@@ -517,6 +517,47 @@ TEST_CASE("theta sketch: wrap compact v2 estimation from java", "[theta_sketch]"
517517 }
518518}
519519
520+ TEST_CASE (" theta sketch: serialize deserialize small compressed" , " [theta_sketch]" ) {
521+ auto update_sketch = update_theta_sketch::builder ().build ();
522+ for (int i = 0 ; i < 10 ; i++) update_sketch.update (i);
523+ auto compact_sketch = update_sketch.compact ();
524+
525+ auto bytes = compact_sketch.serialize_compressed ();
526+ REQUIRE (bytes.size () == compact_sketch.get_serialized_size_bytes (true ));
527+ { // deserialize bytes
528+ auto deserialized_sketch = compact_theta_sketch::deserialize (bytes.data (), bytes.size ());
529+ REQUIRE (deserialized_sketch.get_num_retained () == compact_sketch.get_num_retained ());
530+ REQUIRE (deserialized_sketch.get_theta () == compact_sketch.get_theta ());
531+ auto iter = deserialized_sketch.begin ();
532+ for (const auto key: compact_sketch) {
533+ REQUIRE (*iter == key);
534+ ++iter;
535+ }
536+ }
537+ { // wrap bytes
538+ auto wrapped_sketch = wrapped_compact_theta_sketch::wrap (bytes.data (), bytes.size ());
539+ REQUIRE (wrapped_sketch.get_num_retained () == compact_sketch.get_num_retained ());
540+ REQUIRE (wrapped_sketch.get_theta () == compact_sketch.get_theta ());
541+ auto iter = wrapped_sketch.begin ();
542+ for (const auto key: compact_sketch) {
543+ REQUIRE (*iter == key);
544+ ++iter;
545+ }
546+ }
547+
548+ std::stringstream s (std::ios::in | std::ios::out | std::ios::binary);
549+ compact_sketch.serialize_compressed (s);
550+ REQUIRE (static_cast <size_t >(s.tellp ()) == compact_sketch.get_serialized_size_bytes (true ));
551+ auto deserialized_sketch = compact_theta_sketch::deserialize (s);
552+ REQUIRE (deserialized_sketch.get_num_retained () == compact_sketch.get_num_retained ());
553+ REQUIRE (deserialized_sketch.get_theta () == compact_sketch.get_theta ());
554+ auto iter = deserialized_sketch.begin ();
555+ for (const auto key: compact_sketch) {
556+ REQUIRE (*iter == key);
557+ ++iter;
558+ }
559+ }
560+
520561TEST_CASE (" theta sketch: serialize deserialize compressed" , " [theta_sketch]" ) {
521562 auto update_sketch = update_theta_sketch::builder ().build ();
522563 for (int i = 0 ; i < 10000 ; i++) update_sketch.update (i);
0 commit comments