@@ -301,26 +301,32 @@ TEST_CASE("CountMin sketch: bytes serialize-deserialize non-empty", "[cm_sketch]
301301}
302302
303303TEST_CASE (" CountMin sketch: sink serialize matches bytes" , " [cm_sketch]" ) {
304- auto check_sink_serialize = [](const count_min_sketch<uint64_t >& c) {
304+ auto check_sink_serialize = [](const count_min_sketch<uint64_t >& c, size_t expected_fragments, size_t expected_last_fragment_size = 0 ) {
305305 auto bytes = c.serialize ();
306306 std::vector<uint8_t > sink_bytes;
307307 sink_bytes.reserve (c.get_serialized_size_bytes ());
308+ std::vector<size_t > fragment_sizes;
308309
309- const size_t bytes_written = c.serialize_to ([&sink_bytes](const void * data, size_t size) {
310+ const size_t bytes_written = c.serialize_to ([&sink_bytes, &fragment_sizes ](const void * data, size_t size) {
310311 const auto * begin = static_cast <const uint8_t *>(data);
311312 sink_bytes.insert (sink_bytes.end (), begin, begin + size);
313+ fragment_sizes.push_back (size);
312314 });
313315
314316 REQUIRE (bytes_written == bytes.size ());
315317 REQUIRE (sink_bytes == bytes);
318+ REQUIRE (fragment_sizes.size () == expected_fragments);
319+ if (expected_last_fragment_size > 0 ) {
320+ REQUIRE (fragment_sizes.back () == expected_last_fragment_size);
321+ }
316322 };
317323
318324 count_min_sketch<uint64_t > empty (3 , 32 );
319- check_sink_serialize (empty);
325+ check_sink_serialize (empty, 9 );
320326
321327 count_min_sketch<uint64_t > non_empty (5 , 64 );
322328 for (uint64_t i=0 ; i < 10 ; ++i) non_empty.update (i, 10 * i * i);
323- check_sink_serialize (non_empty);
329+ check_sink_serialize (non_empty, 11 , sizeof ( uint64_t ) * non_empty. get_num_hashes () * non_empty. get_num_buckets () );
324330}
325331
326332} /* namespace datasketches */
0 commit comments