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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +4 -0
- data/ext/datasketches/theta_wrapper.cpp +1 -1
- data/lib/datasketches/version.rb +1 -1
- data/vendor/datasketches-cpp/CMakeLists.txt +5 -3
- data/vendor/datasketches-cpp/CODE_OF_CONDUCT.md +1 -1
- data/vendor/datasketches-cpp/LICENSE +14 -0
- data/vendor/datasketches-cpp/README.md +67 -73
- data/vendor/datasketches-cpp/benchmarks/CMakeLists.txt +52 -0
- data/vendor/datasketches-cpp/benchmarks/benchmark_count_min_sketch.cpp +153 -0
- data/vendor/datasketches-cpp/benchmarks/benchmark_count_min_sketch_serialization.cpp +161 -0
- data/vendor/datasketches-cpp/common/CMakeLists.txt +1 -0
- data/vendor/datasketches-cpp/common/include/binomial_bounds.hpp +2 -2
- data/vendor/datasketches-cpp/common/include/fdlibm_log.hpp +101 -0
- data/vendor/datasketches-cpp/common/include/serde.hpp +6 -0
- data/vendor/datasketches-cpp/common/test/CMakeLists.txt +44 -2
- data/vendor/datasketches-cpp/common/test/binomial_bounds_test.cpp +279 -0
- data/vendor/datasketches-cpp/common/test/deserialize_hardening_test.cpp +188 -0
- data/vendor/datasketches-cpp/count/include/count_min.hpp +17 -4
- data/vendor/datasketches-cpp/count/include/count_min_impl.hpp +65 -83
- data/vendor/datasketches-cpp/count/test/count_min_test.cpp +63 -7
- data/vendor/datasketches-cpp/cpc/include/compression_data.hpp +2 -0
- data/vendor/datasketches-cpp/cpc/include/cpc_compressor_impl.hpp +16 -7
- data/vendor/datasketches-cpp/cpc/include/cpc_sketch.hpp +1 -0
- data/vendor/datasketches-cpp/cpc/include/cpc_sketch_impl.hpp +54 -36
- data/vendor/datasketches-cpp/cpc/include/cpc_union_impl.hpp +27 -27
- data/vendor/datasketches-cpp/cpc/include/cpc_util.hpp +7 -7
- data/vendor/datasketches-cpp/cpc/include/icon_estimator.hpp +5 -5
- data/vendor/datasketches-cpp/cpc/include/u32_table_impl.hpp +16 -16
- data/vendor/datasketches-cpp/cpc/test/cpc_sketch_test.cpp +35 -0
- data/vendor/datasketches-cpp/fi/include/frequent_items_sketch.hpp +28 -3
- data/vendor/datasketches-cpp/fi/include/frequent_items_sketch_impl.hpp +41 -25
- data/vendor/datasketches-cpp/fi/include/reverse_purge_hash_map.hpp +3 -1
- data/vendor/datasketches-cpp/fi/include/reverse_purge_hash_map_impl.hpp +10 -5
- data/vendor/datasketches-cpp/fi/test/frequent_items_sketch_serialize_for_java.cpp +24 -0
- data/vendor/datasketches-cpp/fi/test/frequent_items_sketch_test.cpp +116 -0
- data/vendor/datasketches-cpp/filters/include/bloom_filter.hpp +1 -1
- data/vendor/datasketches-cpp/filters/include/bloom_filter_impl.hpp +32 -12
- data/vendor/datasketches-cpp/filters/test/bloom_filter_test.cpp +28 -1
- data/vendor/datasketches-cpp/hll/include/CouponHashSet-internal.hpp +1 -2
- data/vendor/datasketches-cpp/hll/include/CouponList-internal.hpp +19 -5
- data/vendor/datasketches-cpp/hll/include/CubicInterpolation-internal.hpp +4 -4
- data/vendor/datasketches-cpp/hll/include/HarmonicNumbers-internal.hpp +2 -1
- data/vendor/datasketches-cpp/hll/include/Hll4Array-internal.hpp +4 -4
- data/vendor/datasketches-cpp/hll/include/Hll4Array.hpp +1 -1
- data/vendor/datasketches-cpp/hll/include/Hll6Array-internal.hpp +3 -3
- data/vendor/datasketches-cpp/hll/include/Hll6Array.hpp +1 -1
- data/vendor/datasketches-cpp/hll/include/Hll8Array-internal.hpp +6 -3
- data/vendor/datasketches-cpp/hll/include/Hll8Array.hpp +1 -1
- data/vendor/datasketches-cpp/hll/include/HllArray-internal.hpp +35 -29
- data/vendor/datasketches-cpp/hll/include/HllArray.hpp +1 -1
- data/vendor/datasketches-cpp/hll/include/HllSketch-internal.hpp +3 -5
- data/vendor/datasketches-cpp/hll/include/HllSketchImpl-internal.hpp +5 -11
- data/vendor/datasketches-cpp/hll/include/HllSketchImpl.hpp +2 -4
- data/vendor/datasketches-cpp/hll/include/HllSketchImplFactory.hpp +11 -10
- data/vendor/datasketches-cpp/hll/include/HllUnion-internal.hpp +17 -8
- data/vendor/datasketches-cpp/hll/include/HllUtil.hpp +12 -3
- data/vendor/datasketches-cpp/hll/include/coupon_iterator-internal.hpp +2 -2
- data/vendor/datasketches-cpp/hll/include/coupon_iterator.hpp +3 -0
- data/vendor/datasketches-cpp/hll/include/hll.hpp +11 -4
- data/vendor/datasketches-cpp/hll/include/hll.private.hpp +19 -0
- data/vendor/datasketches-cpp/hll/test/CMakeLists.txt +2 -0
- data/vendor/datasketches-cpp/hll/test/CouponListTest.cpp +64 -0
- data/vendor/datasketches-cpp/hll/test/HllFullSizeTest.cpp +137 -0
- data/vendor/datasketches-cpp/hll/test/HllKxqRebuildTest.cpp +150 -0
- data/vendor/datasketches-cpp/hll/test/HllSketchTest.cpp +3 -3
- data/vendor/datasketches-cpp/hll/test/HllUnionTest.cpp +71 -1
- data/vendor/datasketches-cpp/kll/include/kll_helper_impl.hpp +10 -10
- data/vendor/datasketches-cpp/kll/include/kll_sketch.hpp +10 -1
- data/vendor/datasketches-cpp/kll/include/kll_sketch_impl.hpp +33 -24
- data/vendor/datasketches-cpp/kll/test/kll_sketch_deserialize_from_java_test.cpp +24 -0
- data/vendor/datasketches-cpp/kll/test/kll_sketch_serialize_for_java.cpp +10 -0
- data/vendor/datasketches-cpp/quantiles/include/quantiles_sketch.hpp +11 -2
- data/vendor/datasketches-cpp/quantiles/include/quantiles_sketch_impl.hpp +24 -15
- data/vendor/datasketches-cpp/req/include/req_sketch.hpp +9 -0
- data/vendor/datasketches-cpp/req/include/req_sketch_impl.hpp +24 -15
- data/vendor/datasketches-cpp/req/test/req_sketch_deserialize_from_java_test.cpp +46 -0
- data/vendor/datasketches-cpp/req/test/req_sketch_serialize_for_java.cpp +20 -0
- data/vendor/datasketches-cpp/req/test/req_sketch_test.cpp +70 -0
- data/vendor/datasketches-cpp/sampling/include/ebpps_sample_impl.hpp +17 -8
- data/vendor/datasketches-cpp/sampling/include/ebpps_sketch.hpp +13 -0
- data/vendor/datasketches-cpp/sampling/include/var_opt_sketch.hpp +10 -1
- data/vendor/datasketches-cpp/sampling/include/var_opt_sketch_impl.hpp +6 -7
- data/vendor/datasketches-cpp/sampling/include/var_opt_union.hpp +5 -1
- data/vendor/datasketches-cpp/sampling/include/var_opt_union_impl.hpp +2 -1
- data/vendor/datasketches-cpp/sampling/test/ebpps_allocation_test.cpp +1 -1
- data/vendor/datasketches-cpp/sampling/test/ebpps_sketch_test.cpp +2 -2
- data/vendor/datasketches-cpp/sampling/test/var_opt_allocation_test.cpp +1 -1
- data/vendor/datasketches-cpp/sampling/test/var_opt_sketch_test.cpp +10 -4
- data/vendor/datasketches-cpp/sampling/test/var_opt_union_test.cpp +12 -0
- data/vendor/datasketches-cpp/tdigest/include/tdigest.hpp +38 -2
- data/vendor/datasketches-cpp/tdigest/include/tdigest_impl.hpp +168 -9
- data/vendor/datasketches-cpp/tdigest/test/CMakeLists.txt +1 -0
- data/vendor/datasketches-cpp/tdigest/test/tdigest_iterator_test.cpp +274 -0
- data/vendor/datasketches-cpp/tdigest/test/tdigest_test.cpp +275 -0
- data/vendor/datasketches-cpp/theta/include/compact_theta_sketch_parser.hpp +2 -0
- data/vendor/datasketches-cpp/theta/include/compact_theta_sketch_parser_impl.hpp +24 -3
- data/vendor/datasketches-cpp/theta/include/theta_constants.hpp +4 -2
- data/vendor/datasketches-cpp/theta/include/theta_helpers.hpp +32 -0
- data/vendor/datasketches-cpp/theta/include/theta_set_difference_base_impl.hpp +4 -2
- data/vendor/datasketches-cpp/theta/include/theta_sketch.hpp +22 -4
- data/vendor/datasketches-cpp/theta/include/theta_sketch_impl.hpp +60 -38
- data/vendor/datasketches-cpp/theta/include/theta_union_base_impl.hpp +2 -6
- data/vendor/datasketches-cpp/theta/include/theta_update_sketch_base_impl.hpp +2 -2
- data/vendor/datasketches-cpp/theta/test/bit_packing_test.cpp +50 -0
- data/vendor/datasketches-cpp/theta/test/theta_a_not_b_test.cpp +22 -0
- data/vendor/datasketches-cpp/theta/test/theta_sketch_test.cpp +315 -0
- data/vendor/datasketches-cpp/tools/rat-check.sh +68 -0
- data/vendor/datasketches-cpp/tuple/include/array_tuple_sketch.hpp +35 -4
- data/vendor/datasketches-cpp/tuple/include/array_tuple_sketch_impl.hpp +2 -2
- data/vendor/datasketches-cpp/tuple/include/tuple_sketch.hpp +41 -0
- data/vendor/datasketches-cpp/tuple/include/tuple_sketch_impl.hpp +5 -4
- data/vendor/datasketches-cpp/tuple/test/tuple_sketch_test.cpp +59 -0
- data/vendor/datasketches-cpp/version.cfg.in +1 -1
- 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.
|
|
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.
|
|
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.
|
|
355
|
+
rubygems_version: 4.0.20
|
|
346
356
|
specification_version: 4
|
|
347
357
|
summary: Sketch data structures for Ruby
|
|
348
358
|
test_files: []
|