datasketches 0.5.2 → 0.5.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (115) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +4 -0
  3. data/ext/datasketches/theta_wrapper.cpp +1 -1
  4. data/lib/datasketches/version.rb +1 -1
  5. data/vendor/datasketches-cpp/CMakeLists.txt +5 -3
  6. data/vendor/datasketches-cpp/CODE_OF_CONDUCT.md +1 -1
  7. data/vendor/datasketches-cpp/LICENSE +14 -0
  8. data/vendor/datasketches-cpp/README.md +67 -73
  9. data/vendor/datasketches-cpp/benchmarks/CMakeLists.txt +52 -0
  10. data/vendor/datasketches-cpp/benchmarks/benchmark_count_min_sketch.cpp +153 -0
  11. data/vendor/datasketches-cpp/benchmarks/benchmark_count_min_sketch_serialization.cpp +161 -0
  12. data/vendor/datasketches-cpp/common/CMakeLists.txt +1 -0
  13. data/vendor/datasketches-cpp/common/include/binomial_bounds.hpp +2 -2
  14. data/vendor/datasketches-cpp/common/include/fdlibm_log.hpp +101 -0
  15. data/vendor/datasketches-cpp/common/include/serde.hpp +6 -0
  16. data/vendor/datasketches-cpp/common/test/CMakeLists.txt +44 -2
  17. data/vendor/datasketches-cpp/common/test/binomial_bounds_test.cpp +279 -0
  18. data/vendor/datasketches-cpp/common/test/deserialize_hardening_test.cpp +188 -0
  19. data/vendor/datasketches-cpp/count/include/count_min.hpp +17 -4
  20. data/vendor/datasketches-cpp/count/include/count_min_impl.hpp +65 -83
  21. data/vendor/datasketches-cpp/count/test/count_min_test.cpp +63 -7
  22. data/vendor/datasketches-cpp/cpc/include/compression_data.hpp +2 -0
  23. data/vendor/datasketches-cpp/cpc/include/cpc_compressor_impl.hpp +16 -7
  24. data/vendor/datasketches-cpp/cpc/include/cpc_sketch.hpp +1 -0
  25. data/vendor/datasketches-cpp/cpc/include/cpc_sketch_impl.hpp +54 -36
  26. data/vendor/datasketches-cpp/cpc/include/cpc_union_impl.hpp +27 -27
  27. data/vendor/datasketches-cpp/cpc/include/cpc_util.hpp +7 -7
  28. data/vendor/datasketches-cpp/cpc/include/icon_estimator.hpp +5 -5
  29. data/vendor/datasketches-cpp/cpc/include/u32_table_impl.hpp +16 -16
  30. data/vendor/datasketches-cpp/cpc/test/cpc_sketch_test.cpp +35 -0
  31. data/vendor/datasketches-cpp/fi/include/frequent_items_sketch.hpp +28 -3
  32. data/vendor/datasketches-cpp/fi/include/frequent_items_sketch_impl.hpp +41 -25
  33. data/vendor/datasketches-cpp/fi/include/reverse_purge_hash_map.hpp +3 -1
  34. data/vendor/datasketches-cpp/fi/include/reverse_purge_hash_map_impl.hpp +10 -5
  35. data/vendor/datasketches-cpp/fi/test/frequent_items_sketch_serialize_for_java.cpp +24 -0
  36. data/vendor/datasketches-cpp/fi/test/frequent_items_sketch_test.cpp +116 -0
  37. data/vendor/datasketches-cpp/filters/include/bloom_filter.hpp +1 -1
  38. data/vendor/datasketches-cpp/filters/include/bloom_filter_impl.hpp +32 -12
  39. data/vendor/datasketches-cpp/filters/test/bloom_filter_test.cpp +28 -1
  40. data/vendor/datasketches-cpp/hll/include/CouponHashSet-internal.hpp +1 -2
  41. data/vendor/datasketches-cpp/hll/include/CouponList-internal.hpp +19 -5
  42. data/vendor/datasketches-cpp/hll/include/CubicInterpolation-internal.hpp +4 -4
  43. data/vendor/datasketches-cpp/hll/include/HarmonicNumbers-internal.hpp +2 -1
  44. data/vendor/datasketches-cpp/hll/include/Hll4Array-internal.hpp +4 -4
  45. data/vendor/datasketches-cpp/hll/include/Hll4Array.hpp +1 -1
  46. data/vendor/datasketches-cpp/hll/include/Hll6Array-internal.hpp +3 -3
  47. data/vendor/datasketches-cpp/hll/include/Hll6Array.hpp +1 -1
  48. data/vendor/datasketches-cpp/hll/include/Hll8Array-internal.hpp +6 -3
  49. data/vendor/datasketches-cpp/hll/include/Hll8Array.hpp +1 -1
  50. data/vendor/datasketches-cpp/hll/include/HllArray-internal.hpp +35 -29
  51. data/vendor/datasketches-cpp/hll/include/HllArray.hpp +1 -1
  52. data/vendor/datasketches-cpp/hll/include/HllSketch-internal.hpp +3 -5
  53. data/vendor/datasketches-cpp/hll/include/HllSketchImpl-internal.hpp +5 -11
  54. data/vendor/datasketches-cpp/hll/include/HllSketchImpl.hpp +2 -4
  55. data/vendor/datasketches-cpp/hll/include/HllSketchImplFactory.hpp +11 -10
  56. data/vendor/datasketches-cpp/hll/include/HllUnion-internal.hpp +17 -8
  57. data/vendor/datasketches-cpp/hll/include/HllUtil.hpp +12 -3
  58. data/vendor/datasketches-cpp/hll/include/coupon_iterator-internal.hpp +2 -2
  59. data/vendor/datasketches-cpp/hll/include/coupon_iterator.hpp +3 -0
  60. data/vendor/datasketches-cpp/hll/include/hll.hpp +11 -4
  61. data/vendor/datasketches-cpp/hll/include/hll.private.hpp +19 -0
  62. data/vendor/datasketches-cpp/hll/test/CMakeLists.txt +2 -0
  63. data/vendor/datasketches-cpp/hll/test/CouponListTest.cpp +64 -0
  64. data/vendor/datasketches-cpp/hll/test/HllFullSizeTest.cpp +137 -0
  65. data/vendor/datasketches-cpp/hll/test/HllKxqRebuildTest.cpp +150 -0
  66. data/vendor/datasketches-cpp/hll/test/HllSketchTest.cpp +3 -3
  67. data/vendor/datasketches-cpp/hll/test/HllUnionTest.cpp +71 -1
  68. data/vendor/datasketches-cpp/kll/include/kll_helper_impl.hpp +10 -10
  69. data/vendor/datasketches-cpp/kll/include/kll_sketch.hpp +10 -1
  70. data/vendor/datasketches-cpp/kll/include/kll_sketch_impl.hpp +33 -24
  71. data/vendor/datasketches-cpp/kll/test/kll_sketch_deserialize_from_java_test.cpp +24 -0
  72. data/vendor/datasketches-cpp/kll/test/kll_sketch_serialize_for_java.cpp +10 -0
  73. data/vendor/datasketches-cpp/quantiles/include/quantiles_sketch.hpp +11 -2
  74. data/vendor/datasketches-cpp/quantiles/include/quantiles_sketch_impl.hpp +24 -15
  75. data/vendor/datasketches-cpp/req/include/req_sketch.hpp +9 -0
  76. data/vendor/datasketches-cpp/req/include/req_sketch_impl.hpp +24 -15
  77. data/vendor/datasketches-cpp/req/test/req_sketch_deserialize_from_java_test.cpp +46 -0
  78. data/vendor/datasketches-cpp/req/test/req_sketch_serialize_for_java.cpp +20 -0
  79. data/vendor/datasketches-cpp/req/test/req_sketch_test.cpp +70 -0
  80. data/vendor/datasketches-cpp/sampling/include/ebpps_sample_impl.hpp +17 -8
  81. data/vendor/datasketches-cpp/sampling/include/ebpps_sketch.hpp +13 -0
  82. data/vendor/datasketches-cpp/sampling/include/var_opt_sketch.hpp +10 -1
  83. data/vendor/datasketches-cpp/sampling/include/var_opt_sketch_impl.hpp +6 -7
  84. data/vendor/datasketches-cpp/sampling/include/var_opt_union.hpp +5 -1
  85. data/vendor/datasketches-cpp/sampling/include/var_opt_union_impl.hpp +2 -1
  86. data/vendor/datasketches-cpp/sampling/test/ebpps_allocation_test.cpp +1 -1
  87. data/vendor/datasketches-cpp/sampling/test/ebpps_sketch_test.cpp +2 -2
  88. data/vendor/datasketches-cpp/sampling/test/var_opt_allocation_test.cpp +1 -1
  89. data/vendor/datasketches-cpp/sampling/test/var_opt_sketch_test.cpp +10 -4
  90. data/vendor/datasketches-cpp/sampling/test/var_opt_union_test.cpp +12 -0
  91. data/vendor/datasketches-cpp/tdigest/include/tdigest.hpp +38 -2
  92. data/vendor/datasketches-cpp/tdigest/include/tdigest_impl.hpp +168 -9
  93. data/vendor/datasketches-cpp/tdigest/test/CMakeLists.txt +1 -0
  94. data/vendor/datasketches-cpp/tdigest/test/tdigest_iterator_test.cpp +274 -0
  95. data/vendor/datasketches-cpp/tdigest/test/tdigest_test.cpp +275 -0
  96. data/vendor/datasketches-cpp/theta/include/compact_theta_sketch_parser.hpp +2 -0
  97. data/vendor/datasketches-cpp/theta/include/compact_theta_sketch_parser_impl.hpp +24 -3
  98. data/vendor/datasketches-cpp/theta/include/theta_constants.hpp +4 -2
  99. data/vendor/datasketches-cpp/theta/include/theta_helpers.hpp +32 -0
  100. data/vendor/datasketches-cpp/theta/include/theta_set_difference_base_impl.hpp +4 -2
  101. data/vendor/datasketches-cpp/theta/include/theta_sketch.hpp +22 -4
  102. data/vendor/datasketches-cpp/theta/include/theta_sketch_impl.hpp +60 -38
  103. data/vendor/datasketches-cpp/theta/include/theta_union_base_impl.hpp +2 -6
  104. data/vendor/datasketches-cpp/theta/include/theta_update_sketch_base_impl.hpp +2 -2
  105. data/vendor/datasketches-cpp/theta/test/bit_packing_test.cpp +50 -0
  106. data/vendor/datasketches-cpp/theta/test/theta_a_not_b_test.cpp +22 -0
  107. data/vendor/datasketches-cpp/theta/test/theta_sketch_test.cpp +315 -0
  108. data/vendor/datasketches-cpp/tools/rat-check.sh +68 -0
  109. data/vendor/datasketches-cpp/tuple/include/array_tuple_sketch.hpp +35 -4
  110. data/vendor/datasketches-cpp/tuple/include/array_tuple_sketch_impl.hpp +2 -2
  111. data/vendor/datasketches-cpp/tuple/include/tuple_sketch.hpp +41 -0
  112. data/vendor/datasketches-cpp/tuple/include/tuple_sketch_impl.hpp +5 -4
  113. data/vendor/datasketches-cpp/tuple/test/tuple_sketch_test.cpp +59 -0
  114. data/vendor/datasketches-cpp/version.cfg.in +1 -1
  115. metadata +12 -2
@@ -19,6 +19,7 @@
19
19
 
20
20
  #include <iostream>
21
21
  #include <tuple>
22
+ #include <stdexcept>
22
23
 
23
24
  namespace datasketches {
24
25
 
@@ -49,6 +50,49 @@ TEST_CASE("tuple sketch float: builder", "[tuple_sketch]") {
49
50
  REQUIRE(sketch.get_theta() == 0.5); // theta = p
50
51
  }
51
52
 
53
+ TEST_CASE("tuple sketch: min lg_k", "[tuple_sketch]") {
54
+ // Tuple sketches reuse theta's builder and hash table, so the same nominal floor
55
+ // (MIN_LG_K = 4, matching Java's ThetaUtil.MIN_LG_NOM_LONGS) and cache floor (MIN_LG_ARR = 5)
56
+ // apply. lg_k = 4 (nominal 16) is the smallest allowed nominal size; below it must throw.
57
+ REQUIRE(theta_constants::MIN_LG_K == 4);
58
+ REQUIRE_THROWS_AS(update_tuple_sketch<float>::builder().set_lg_k(theta_constants::MIN_LG_K - 1),
59
+ std::invalid_argument);
60
+ auto min_sketch = update_tuple_sketch<float>::builder().set_lg_k(theta_constants::MIN_LG_K).build();
61
+ REQUIRE(min_sketch.get_lg_k() == theta_constants::MIN_LG_K);
62
+
63
+ // update well past the nominal size to force estimation mode and exercise the rebuild path,
64
+ // tracking the peak number of retained entries seen between rebuilds.
65
+ const int n = 10000;
66
+ uint32_t max_retained = 0;
67
+ for (int i = 0; i < n; ++i) {
68
+ min_sketch.update(i, 1.0f);
69
+ if (min_sketch.get_num_retained() > max_retained) max_retained = min_sketch.get_num_retained();
70
+ }
71
+ REQUIRE(min_sketch.is_estimation_mode());
72
+ REQUIRE(min_sketch.get_theta() < 1.0);
73
+
74
+ // The internal hash table is floored at MIN_LG_ARR (5, i.e. 32 slots), one lg above the
75
+ // nominal size. This is exactly what MIN_LG_ARR guarantees: between rebuilds the sketch holds
76
+ // more than the nominal 2^MIN_LG_K (16) entries, but never more than the 2^MIN_LG_ARR (32)
77
+ // slots of the table. Were the table sized to the nominal 16, it could not retain more than 16.
78
+ REQUIRE(max_retained > (1 << theta_constants::MIN_LG_K));
79
+ REQUIRE(max_retained <= (1 << theta_constants::MIN_LG_ARR));
80
+
81
+ // the true count is bracketed by the 2-standard-deviation confidence bounds
82
+ REQUIRE(min_sketch.get_lower_bound(2) <= n);
83
+ REQUIRE(min_sketch.get_upper_bound(2) >= n);
84
+
85
+ // trimming reduces the sketch to exactly the nominal number of entries (2^4 = 16)
86
+ min_sketch.trim();
87
+ REQUIRE(min_sketch.get_num_retained() == (1 << theta_constants::MIN_LG_K));
88
+
89
+ // a compacted min-size sketch round trips through serialization
90
+ auto bytes = min_sketch.compact().serialize();
91
+ auto deserialized = compact_tuple_sketch<float>::deserialize(bytes.data(), bytes.size());
92
+ REQUIRE(deserialized.get_num_retained() == min_sketch.get_num_retained());
93
+ REQUIRE(deserialized.get_estimate() == min_sketch.get_estimate());
94
+ }
95
+
52
96
  TEST_CASE("tuple sketch float: empty", "[tuple_sketch]") {
53
97
  auto update_sketch = update_tuple_sketch<float>::builder().build();
54
98
  std::cout << "sizeof(update_tuple_sketch<float>)=" << sizeof(update_sketch) << std::endl;
@@ -371,4 +415,19 @@ TEST_CASE("filter", "[tuple_sketch]") {
371
415
  }
372
416
  }
373
417
 
418
+ TEST_CASE("tuple sketch: deserialize bounds-checks each entry key", "[tuple_sketch]") {
419
+ // A compact sketch serialized with a narrower summary (float, 4 bytes) and then
420
+ // deserialized as a wider summary (double, 8 bytes). The per-entry stride the reader
421
+ // assumes (8-byte key + 8-byte summary) is larger than the entries actually occupy
422
+ // (8-byte key + 4-byte summary), so the read cursor advances past the end of the buffer.
423
+ // num_entries is read from the preamble and is unaffected, so the entry loop still runs
424
+ // the full count and the per-entry key read walks off the end. This must throw rather
425
+ // than read out of bounds (a heap-buffer-overflow under AddressSanitizer).
426
+ auto update_sketch = update_tuple_sketch<float>::builder().build();
427
+ for (int i = 0; i < 100; ++i) update_sketch.update(i, 1.0f);
428
+ auto bytes = update_sketch.compact().serialize();
429
+ REQUIRE_THROWS_AS(compact_tuple_sketch<double>::deserialize(bytes.data(), bytes.size()),
430
+ std::out_of_range);
431
+ }
432
+
374
433
  } /* namespace datasketches */
@@ -1 +1 @@
1
- 5.2.0
1
+ 5.3.0
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: datasketches
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.2
4
+ version: 0.5.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Kane
@@ -50,6 +50,9 @@ files:
50
50
  - vendor/datasketches-cpp/LICENSE
51
51
  - vendor/datasketches-cpp/NOTICE
52
52
  - vendor/datasketches-cpp/README.md
53
+ - vendor/datasketches-cpp/benchmarks/CMakeLists.txt
54
+ - vendor/datasketches-cpp/benchmarks/benchmark_count_min_sketch.cpp
55
+ - vendor/datasketches-cpp/benchmarks/benchmark_count_min_sketch_serialization.cpp
53
56
  - vendor/datasketches-cpp/cmake/DataSketchesConfig.cmake.in
54
57
  - vendor/datasketches-cpp/common/CMakeLists.txt
55
58
  - vendor/datasketches-cpp/common/include/MurmurHash3.h
@@ -60,6 +63,7 @@ files:
60
63
  - vendor/datasketches-cpp/common/include/conditional_back_inserter.hpp
61
64
  - vendor/datasketches-cpp/common/include/conditional_forward.hpp
62
65
  - vendor/datasketches-cpp/common/include/count_zeros.hpp
66
+ - vendor/datasketches-cpp/common/include/fdlibm_log.hpp
63
67
  - vendor/datasketches-cpp/common/include/inv_pow2_table.hpp
64
68
  - vendor/datasketches-cpp/common/include/kolmogorov_smirnov.hpp
65
69
  - vendor/datasketches-cpp/common/include/kolmogorov_smirnov_impl.hpp
@@ -71,7 +75,9 @@ files:
71
75
  - vendor/datasketches-cpp/common/include/version.hpp.in
72
76
  - vendor/datasketches-cpp/common/include/xxhash64.h
73
77
  - vendor/datasketches-cpp/common/test/CMakeLists.txt
78
+ - vendor/datasketches-cpp/common/test/binomial_bounds_test.cpp
74
79
  - vendor/datasketches-cpp/common/test/catch_runner.cpp
80
+ - vendor/datasketches-cpp/common/test/deserialize_hardening_test.cpp
75
81
  - vendor/datasketches-cpp/common/test/integration_test.cpp
76
82
  - vendor/datasketches-cpp/common/test/optional_test.cpp
77
83
  - vendor/datasketches-cpp/common/test/quantiles_sorted_view_test.cpp
@@ -172,6 +178,8 @@ files:
172
178
  - vendor/datasketches-cpp/hll/test/CouponListTest.cpp
173
179
  - vendor/datasketches-cpp/hll/test/CrossCountingTest.cpp
174
180
  - vendor/datasketches-cpp/hll/test/HllArrayTest.cpp
181
+ - vendor/datasketches-cpp/hll/test/HllFullSizeTest.cpp
182
+ - vendor/datasketches-cpp/hll/test/HllKxqRebuildTest.cpp
175
183
  - vendor/datasketches-cpp/hll/test/HllSketchTest.cpp
176
184
  - vendor/datasketches-cpp/hll/test/HllUnionTest.cpp
177
185
  - vendor/datasketches-cpp/hll/test/IsomorphicTest.cpp
@@ -246,6 +254,7 @@ files:
246
254
  - vendor/datasketches-cpp/tdigest/test/CMakeLists.txt
247
255
  - vendor/datasketches-cpp/tdigest/test/tdigest_custom_allocator_test.cpp
248
256
  - vendor/datasketches-cpp/tdigest/test/tdigest_deserialize_from_java_test.cpp
257
+ - vendor/datasketches-cpp/tdigest/test/tdigest_iterator_test.cpp
249
258
  - vendor/datasketches-cpp/tdigest/test/tdigest_ref_k100_n10000_double.sk
250
259
  - vendor/datasketches-cpp/tdigest/test/tdigest_ref_k100_n10000_float.sk
251
260
  - vendor/datasketches-cpp/tdigest/test/tdigest_serialize_for_java.cpp
@@ -291,6 +300,7 @@ files:
291
300
  - vendor/datasketches-cpp/theta/test/theta_sketch_serialize_for_java.cpp
292
301
  - vendor/datasketches-cpp/theta/test/theta_sketch_test.cpp
293
302
  - vendor/datasketches-cpp/theta/test/theta_union_test.cpp
303
+ - vendor/datasketches-cpp/tools/rat-check.sh
294
304
  - vendor/datasketches-cpp/tuple/CMakeLists.txt
295
305
  - vendor/datasketches-cpp/tuple/include/array_of_doubles_sketch.hpp
296
306
  - vendor/datasketches-cpp/tuple/include/array_tuple_a_not_b.hpp
@@ -342,7 +352,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
342
352
  - !ruby/object:Gem::Version
343
353
  version: '0'
344
354
  requirements: []
345
- rubygems_version: 4.0.6
355
+ rubygems_version: 4.0.20
346
356
  specification_version: 4
347
357
  summary: Sketch data structures for Ruby
348
358
  test_files: []