@@ -216,6 +216,12 @@ class DataFileTest {
216216 }
217217#endif
218218
219+ #ifdef ZSTD_CODEC_AVAILABLE
220+ void testWriteWithZstdCodec () {
221+ testWriteWithCodec (avro::ZSTD_CODEC);
222+ }
223+ #endif
224+
219225 void testWriteWithCodec (avro::Codec codec) {
220226 avro::DataFileWriter<ComplexInteger> df (filename, writerSchema, 100 , codec);
221227 int64_t re = 3 ;
@@ -618,6 +624,39 @@ class DataFileTest {
618624 }
619625#endif
620626
627+ #ifdef ZSTD_CODEC_AVAILABLE
628+ void testZstd () {
629+ // Add enough objects to span multiple blocks
630+ const size_t number_of_objects = 1000000 ;
631+ // first create a large file
632+ ValidSchema dschema = avro::compileJsonSchemaFromString (sch);
633+ {
634+ avro::DataFileWriter<ComplexInteger> writer (
635+ filename, dschema, 16 * 1024 , avro::ZSTD_CODEC);
636+
637+ for (size_t i = 0 ; i < number_of_objects; ++i) {
638+ ComplexInteger d;
639+ d.re = i;
640+ d.im = 2 * i;
641+ writer.write (d);
642+ }
643+ }
644+ {
645+ avro::DataFileReader<ComplexInteger> reader (filename, dschema);
646+ std::this_thread::sleep_for (std::chrono::seconds (1 ));
647+ std::vector<int64_t > found;
648+ ComplexInteger record;
649+ while (reader.read (record)) {
650+ found.push_back (record.re );
651+ }
652+ BOOST_CHECK_EQUAL (found.size (), number_of_objects);
653+ for (unsigned int i = 0 ; i < found.size (); ++i) {
654+ BOOST_CHECK_EQUAL (found[i], i);
655+ }
656+ }
657+ }
658+ #endif
659+
621660 void testSchemaReadWrite () {
622661 uint32_t a = 42 ;
623662 {
@@ -792,6 +831,13 @@ void testSkipStringSnappyCodec() {
792831}
793832#endif
794833
834+ #ifdef ZSTD_CODEC_AVAILABLE
835+ void testSkipStringZstdCodec () {
836+ BOOST_TEST_CHECKPOINT (__func__);
837+ testSkipString (avro::ZSTD_CODEC);
838+ }
839+ #endif
840+
795841struct TestRecord {
796842 std::string s1;
797843 int64_t id;
@@ -1005,6 +1051,13 @@ void testLastSyncSnappyCodec() {
10051051}
10061052#endif
10071053
1054+ #ifdef ZSTD_CODEC_AVAILABLE
1055+ void testLastSyncZstdCodec () {
1056+ BOOST_TEST_CHECKPOINT (__func__);
1057+ testLastSync (avro::ZSTD_CODEC);
1058+ }
1059+ #endif
1060+
10081061void testReadRecordEfficientlyUsingLastSyncNullCodec () {
10091062 BOOST_TEST_CHECKPOINT (__func__);
10101063 testReadRecordEfficientlyUsingLastSync (avro::NULL_CODEC);
@@ -1022,6 +1075,13 @@ void testReadRecordEfficientlyUsingLastSyncSnappyCodec() {
10221075}
10231076#endif
10241077
1078+ #ifdef ZSTD_CODEC_AVAILABLE
1079+ void testReadRecordEfficientlyUsingLastSyncZstdCodec () {
1080+ BOOST_TEST_CHECKPOINT (__func__);
1081+ testReadRecordEfficientlyUsingLastSync (avro::ZSTD_CODEC);
1082+ }
1083+ #endif
1084+
10251085test_suite *
10261086init_unit_test_suite (int , char *[]) {
10271087 {
@@ -1055,6 +1115,16 @@ init_unit_test_suite(int, char *[]) {
10551115 addReaderTests (ts, t1);
10561116 boost::unit_test::framework::master_test_suite ().add (ts);
10571117 }
1118+ #endif
1119+ #ifdef ZSTD_CODEC_AVAILABLE
1120+ {
1121+ auto *ts = BOOST_TEST_SUITE (" DataFile tests: test1.zstd.df" );
1122+ shared_ptr<DataFileTest> t1 (new DataFileTest (" test1.zstd.df" , sch, isch));
1123+ ts->add (BOOST_CLASS_TEST_CASE (
1124+ &DataFileTest::testWriteWithZstdCodec, t1));
1125+ addReaderTests (ts, t1);
1126+ boost::unit_test::framework::master_test_suite ().add (ts);
1127+ }
10581128#endif
10591129 {
10601130 auto *ts = BOOST_TEST_SUITE (" DataFile tests: test2.df" );
@@ -1101,6 +1171,9 @@ init_unit_test_suite(int, char *[]) {
11011171 shared_ptr<DataFileTest> t8 (new DataFileTest (" test8.df" , dsch, dblsch));
11021172#ifdef SNAPPY_CODEC_AVAILABLE
11031173 ts->add (BOOST_CLASS_TEST_CASE (&DataFileTest::testSnappy, t8));
1174+ #endif
1175+ #ifdef ZSTD_CODEC_AVAILABLE
1176+ ts->add (BOOST_CLASS_TEST_CASE (&DataFileTest::testZstd, t8));
11041177#endif
11051178 boost::unit_test::framework::master_test_suite ().add (ts);
11061179 }
@@ -1165,18 +1238,27 @@ init_unit_test_suite(int, char *[]) {
11651238#ifdef SNAPPY_CODEC_AVAILABLE
11661239 boost::unit_test::framework::master_test_suite ().add (BOOST_TEST_CASE (&testSkipStringSnappyCodec));
11671240#endif
1241+ #ifdef ZSTD_CODEC_AVAILABLE
1242+ boost::unit_test::framework::master_test_suite ().add (BOOST_TEST_CASE (&testSkipStringZstdCodec));
1243+ #endif
11681244
11691245 boost::unit_test::framework::master_test_suite ().add (BOOST_TEST_CASE (&testLastSyncNullCodec));
11701246 boost::unit_test::framework::master_test_suite ().add (BOOST_TEST_CASE (&testLastSyncDeflateCodec));
11711247#ifdef SNAPPY_CODEC_AVAILABLE
11721248 boost::unit_test::framework::master_test_suite ().add (BOOST_TEST_CASE (&testLastSyncSnappyCodec));
11731249#endif
1250+ #ifdef ZSTD_CODEC_AVAILABLE
1251+ boost::unit_test::framework::master_test_suite ().add (BOOST_TEST_CASE (&testLastSyncZstdCodec));
1252+ #endif
11741253
11751254 boost::unit_test::framework::master_test_suite ().add (BOOST_TEST_CASE (&testReadRecordEfficientlyUsingLastSyncNullCodec));
11761255 boost::unit_test::framework::master_test_suite ().add (BOOST_TEST_CASE (&testReadRecordEfficientlyUsingLastSyncDeflateCodec));
11771256#ifdef SNAPPY_CODEC_AVAILABLE
11781257 boost::unit_test::framework::master_test_suite ().add (BOOST_TEST_CASE (&testReadRecordEfficientlyUsingLastSyncSnappyCodec));
11791258#endif
1259+ #ifdef ZSTD_CODEC_AVAILABLE
1260+ boost::unit_test::framework::master_test_suite ().add (BOOST_TEST_CASE (&testReadRecordEfficientlyUsingLastSyncZstdCodec));
1261+ #endif
11801262
11811263 return nullptr ;
11821264}
0 commit comments