datasketches 0.3.2 → 0.4.0
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 +6 -0
- data/NOTICE +1 -1
- data/README.md +0 -2
- data/ext/datasketches/cpc_wrapper.cpp +2 -2
- data/ext/datasketches/kll_wrapper.cpp +0 -10
- data/lib/datasketches/version.rb +1 -1
- data/lib/datasketches.rb +1 -1
- data/vendor/datasketches-cpp/CMakeLists.txt +1 -0
- data/vendor/datasketches-cpp/CODE_OF_CONDUCT.md +3 -0
- data/vendor/datasketches-cpp/CONTRIBUTING.md +50 -0
- data/vendor/datasketches-cpp/Doxyfile +2827 -0
- data/vendor/datasketches-cpp/LICENSE +0 -76
- data/vendor/datasketches-cpp/NOTICE +1 -1
- data/vendor/datasketches-cpp/README.md +1 -3
- data/vendor/datasketches-cpp/common/CMakeLists.txt +12 -11
- data/vendor/datasketches-cpp/common/include/common_defs.hpp +11 -8
- data/vendor/datasketches-cpp/common/include/count_zeros.hpp +0 -2
- data/vendor/datasketches-cpp/common/include/kolmogorov_smirnov.hpp +9 -6
- data/vendor/datasketches-cpp/common/include/optional.hpp +148 -0
- data/vendor/datasketches-cpp/common/include/quantiles_sorted_view.hpp +95 -2
- data/vendor/datasketches-cpp/common/include/quantiles_sorted_view_impl.hpp +1 -1
- data/vendor/datasketches-cpp/common/include/serde.hpp +69 -20
- data/vendor/datasketches-cpp/common/test/CMakeLists.txt +1 -1
- data/vendor/datasketches-cpp/common/test/optional_test.cpp +85 -0
- data/vendor/datasketches-cpp/common/test/test_allocator.hpp +14 -14
- data/vendor/datasketches-cpp/count/include/count_min.hpp +132 -78
- data/vendor/datasketches-cpp/count/include/count_min_impl.hpp +132 -152
- data/vendor/datasketches-cpp/count/test/CMakeLists.txt +11 -12
- data/vendor/datasketches-cpp/count/test/count_min_allocation_test.cpp +61 -61
- data/vendor/datasketches-cpp/count/test/count_min_test.cpp +175 -178
- data/vendor/datasketches-cpp/cpc/include/cpc_common.hpp +14 -20
- data/vendor/datasketches-cpp/cpc/include/cpc_compressor.hpp +7 -4
- data/vendor/datasketches-cpp/cpc/include/cpc_compressor_impl.hpp +17 -17
- data/vendor/datasketches-cpp/cpc/include/cpc_sketch.hpp +40 -40
- data/vendor/datasketches-cpp/cpc/include/cpc_sketch_impl.hpp +13 -10
- data/vendor/datasketches-cpp/cpc/include/cpc_union.hpp +35 -11
- data/vendor/datasketches-cpp/cpc/include/cpc_union_impl.hpp +8 -8
- data/vendor/datasketches-cpp/cpc/include/u32_table.hpp +3 -2
- data/vendor/datasketches-cpp/cpc/include/u32_table_impl.hpp +5 -5
- data/vendor/datasketches-cpp/cpc/test/CMakeLists.txt +20 -7
- data/vendor/datasketches-cpp/cpc/test/cpc_sketch_deserialize_from_java_test.cpp +60 -0
- data/vendor/datasketches-cpp/{python/include/py_object_lt.hpp → cpc/test/cpc_sketch_serialize_for_java.cpp} +15 -14
- data/vendor/datasketches-cpp/cpc/test/cpc_sketch_test.cpp +4 -29
- data/vendor/datasketches-cpp/cpc/test/cpc_union_test.cpp +4 -4
- data/vendor/datasketches-cpp/density/include/density_sketch.hpp +29 -9
- data/vendor/datasketches-cpp/density/include/density_sketch_impl.hpp +1 -1
- data/vendor/datasketches-cpp/density/test/CMakeLists.txt +0 -1
- data/vendor/datasketches-cpp/fi/include/frequent_items_sketch.hpp +21 -9
- data/vendor/datasketches-cpp/fi/include/frequent_items_sketch_impl.hpp +6 -4
- data/vendor/datasketches-cpp/fi/test/CMakeLists.txt +14 -1
- data/vendor/datasketches-cpp/fi/test/frequent_items_sketch_deserialize_from_java_test.cpp +95 -0
- data/vendor/datasketches-cpp/fi/test/frequent_items_sketch_serialize_for_java.cpp +83 -0
- data/vendor/datasketches-cpp/fi/test/frequent_items_sketch_test.cpp +3 -42
- data/vendor/datasketches-cpp/hll/include/CouponList-internal.hpp +2 -2
- data/vendor/datasketches-cpp/hll/include/CouponList.hpp +3 -1
- data/vendor/datasketches-cpp/hll/include/HllArray-internal.hpp +3 -3
- data/vendor/datasketches-cpp/hll/include/HllArray.hpp +5 -3
- data/vendor/datasketches-cpp/hll/include/HllSketch-internal.hpp +4 -4
- data/vendor/datasketches-cpp/hll/include/HllSketchImpl.hpp +3 -1
- data/vendor/datasketches-cpp/hll/include/HllUtil.hpp +0 -12
- data/vendor/datasketches-cpp/hll/include/hll.hpp +70 -57
- data/vendor/datasketches-cpp/hll/test/CMakeLists.txt +14 -1
- data/vendor/datasketches-cpp/hll/test/ToFromByteArrayTest.cpp +0 -68
- data/vendor/datasketches-cpp/hll/test/hll_sketch_deserialize_from_java_test.cpp +69 -0
- data/vendor/datasketches-cpp/hll/test/hll_sketch_serialize_for_java.cpp +52 -0
- data/vendor/datasketches-cpp/kll/include/kll_helper_impl.hpp +2 -2
- data/vendor/datasketches-cpp/kll/include/kll_sketch.hpp +71 -50
- data/vendor/datasketches-cpp/kll/include/kll_sketch_impl.hpp +59 -130
- data/vendor/datasketches-cpp/kll/test/CMakeLists.txt +14 -1
- data/vendor/datasketches-cpp/kll/test/kll_sketch_deserialize_from_java_test.cpp +103 -0
- data/vendor/datasketches-cpp/kll/test/kll_sketch_serialize_for_java.cpp +62 -0
- data/vendor/datasketches-cpp/kll/test/kll_sketch_test.cpp +3 -38
- data/vendor/datasketches-cpp/quantiles/include/quantiles_sketch.hpp +68 -51
- data/vendor/datasketches-cpp/quantiles/include/quantiles_sketch_impl.hpp +62 -132
- data/vendor/datasketches-cpp/quantiles/test/CMakeLists.txt +14 -1
- data/vendor/datasketches-cpp/quantiles/test/quantiles_sketch_deserialize_from_java_test.cpp +84 -0
- data/vendor/datasketches-cpp/quantiles/test/quantiles_sketch_serialize_for_java.cpp +52 -0
- data/vendor/datasketches-cpp/quantiles/test/quantiles_sketch_test.cpp +14 -38
- data/vendor/datasketches-cpp/req/include/req_common.hpp +7 -3
- data/vendor/datasketches-cpp/req/include/req_compactor_impl.hpp +2 -2
- data/vendor/datasketches-cpp/req/include/req_sketch.hpp +97 -23
- data/vendor/datasketches-cpp/req/include/req_sketch_impl.hpp +48 -109
- data/vendor/datasketches-cpp/req/test/CMakeLists.txt +14 -1
- data/vendor/datasketches-cpp/req/test/req_sketch_deserialize_from_java_test.cpp +55 -0
- data/vendor/datasketches-cpp/{tuple/include/array_of_doubles_intersection_impl.hpp → req/test/req_sketch_serialize_for_java.cpp} +12 -7
- data/vendor/datasketches-cpp/req/test/req_sketch_test.cpp +3 -89
- data/vendor/datasketches-cpp/sampling/CMakeLists.txt +4 -0
- data/vendor/datasketches-cpp/sampling/include/ebpps_sample.hpp +210 -0
- data/vendor/datasketches-cpp/sampling/include/ebpps_sample_impl.hpp +535 -0
- data/vendor/datasketches-cpp/sampling/include/ebpps_sketch.hpp +281 -0
- data/vendor/datasketches-cpp/sampling/include/ebpps_sketch_impl.hpp +531 -0
- data/vendor/datasketches-cpp/sampling/include/var_opt_sketch.hpp +69 -26
- data/vendor/datasketches-cpp/sampling/include/var_opt_sketch_impl.hpp +3 -3
- data/vendor/datasketches-cpp/sampling/include/var_opt_union.hpp +10 -11
- data/vendor/datasketches-cpp/sampling/include/var_opt_union_impl.hpp +4 -4
- data/vendor/datasketches-cpp/sampling/test/CMakeLists.txt +55 -8
- data/vendor/datasketches-cpp/sampling/test/ebpps_allocation_test.cpp +96 -0
- data/vendor/datasketches-cpp/sampling/test/ebpps_sample_test.cpp +137 -0
- data/vendor/datasketches-cpp/sampling/test/ebpps_sketch_test.cpp +266 -0
- data/vendor/datasketches-cpp/sampling/test/var_opt_sketch_deserialize_from_java_test.cpp +81 -0
- data/vendor/datasketches-cpp/sampling/test/var_opt_sketch_serialize_for_java.cpp +54 -0
- data/vendor/datasketches-cpp/sampling/test/var_opt_sketch_test.cpp +0 -37
- data/vendor/datasketches-cpp/sampling/test/var_opt_union_deserialize_from_java_test.cpp +50 -0
- data/vendor/datasketches-cpp/sampling/test/var_opt_union_serialize_for_java.cpp +56 -0
- data/vendor/datasketches-cpp/sampling/test/var_opt_union_test.cpp +0 -18
- data/vendor/datasketches-cpp/theta/include/bit_packing.hpp +2608 -2608
- data/vendor/datasketches-cpp/theta/include/bounds_on_ratios_in_sampled_sets.hpp +1 -0
- data/vendor/datasketches-cpp/theta/include/bounds_on_ratios_in_theta_sketched_sets.hpp +7 -6
- data/vendor/datasketches-cpp/theta/include/theta_a_not_b.hpp +20 -5
- data/vendor/datasketches-cpp/theta/include/theta_constants.hpp +10 -4
- data/vendor/datasketches-cpp/theta/include/theta_helpers.hpp +1 -1
- data/vendor/datasketches-cpp/theta/include/theta_intersection.hpp +13 -5
- data/vendor/datasketches-cpp/theta/include/theta_intersection_base_impl.hpp +5 -5
- data/vendor/datasketches-cpp/theta/include/theta_intersection_impl.hpp +3 -3
- data/vendor/datasketches-cpp/theta/include/theta_jaccard_similarity.hpp +2 -1
- data/vendor/datasketches-cpp/theta/include/theta_jaccard_similarity_base.hpp +1 -0
- data/vendor/datasketches-cpp/theta/include/theta_set_difference_base_impl.hpp +1 -1
- data/vendor/datasketches-cpp/theta/include/theta_sketch.hpp +126 -27
- data/vendor/datasketches-cpp/theta/include/theta_sketch_impl.hpp +8 -8
- data/vendor/datasketches-cpp/theta/include/theta_union.hpp +17 -10
- data/vendor/datasketches-cpp/theta/include/theta_union_base_impl.hpp +1 -1
- data/vendor/datasketches-cpp/theta/include/theta_union_impl.hpp +3 -3
- data/vendor/datasketches-cpp/theta/include/theta_update_sketch_base.hpp +5 -2
- data/vendor/datasketches-cpp/theta/include/theta_update_sketch_base_impl.hpp +11 -1
- data/vendor/datasketches-cpp/theta/test/CMakeLists.txt +14 -1
- data/vendor/datasketches-cpp/theta/test/theta_sketch_deserialize_from_java_test.cpp +57 -0
- data/vendor/datasketches-cpp/theta/test/theta_sketch_serialize_for_java.cpp +61 -0
- data/vendor/datasketches-cpp/theta/test/theta_sketch_test.cpp +0 -188
- data/vendor/datasketches-cpp/tuple/CMakeLists.txt +8 -7
- data/vendor/datasketches-cpp/tuple/include/array_of_doubles_sketch.hpp +19 -144
- data/vendor/datasketches-cpp/tuple/include/{array_of_doubles_a_not_b.hpp → array_tuple_a_not_b.hpp} +24 -16
- data/vendor/datasketches-cpp/tuple/include/{array_of_doubles_a_not_b_impl.hpp → array_tuple_a_not_b_impl.hpp} +4 -4
- data/vendor/datasketches-cpp/tuple/include/array_tuple_intersection.hpp +65 -0
- data/vendor/datasketches-cpp/{python/include/py_object_ostream.hpp → tuple/include/array_tuple_intersection_impl.hpp} +7 -24
- data/vendor/datasketches-cpp/tuple/include/array_tuple_sketch.hpp +237 -0
- data/vendor/datasketches-cpp/tuple/include/{array_of_doubles_sketch_impl.hpp → array_tuple_sketch_impl.hpp} +40 -41
- data/vendor/datasketches-cpp/tuple/include/array_tuple_union.hpp +81 -0
- data/vendor/datasketches-cpp/tuple/include/array_tuple_union_impl.hpp +43 -0
- data/vendor/datasketches-cpp/tuple/include/tuple_a_not_b.hpp +11 -2
- data/vendor/datasketches-cpp/tuple/include/tuple_intersection.hpp +17 -10
- data/vendor/datasketches-cpp/tuple/include/tuple_jaccard_similarity.hpp +2 -1
- data/vendor/datasketches-cpp/tuple/include/tuple_sketch.hpp +95 -32
- data/vendor/datasketches-cpp/tuple/include/tuple_union.hpp +19 -11
- data/vendor/datasketches-cpp/tuple/test/CMakeLists.txt +16 -1
- data/vendor/datasketches-cpp/tuple/test/aod_sketch_deserialize_from_java_test.cpp +76 -0
- data/vendor/datasketches-cpp/tuple/test/aod_sketch_serialize_for_java.cpp +62 -0
- data/vendor/datasketches-cpp/tuple/test/array_of_doubles_sketch_test.cpp +5 -129
- data/vendor/datasketches-cpp/tuple/test/engagement_test.cpp +85 -89
- data/vendor/datasketches-cpp/tuple/test/tuple_jaccard_similarity_test.cpp +3 -1
- data/vendor/datasketches-cpp/tuple/test/tuple_sketch_deserialize_from_java_test.cpp +47 -0
- data/vendor/datasketches-cpp/tuple/test/tuple_sketch_serialize_for_java.cpp +38 -0
- data/vendor/datasketches-cpp/tuple/test/tuple_sketch_test.cpp +1 -1
- data/vendor/datasketches-cpp/version.cfg.in +1 -1
- metadata +47 -93
- data/vendor/datasketches-cpp/MANIFEST.in +0 -39
- data/vendor/datasketches-cpp/fi/test/items_sketch_string_from_java.sk +0 -0
- data/vendor/datasketches-cpp/fi/test/items_sketch_string_utf8_from_java.sk +0 -0
- data/vendor/datasketches-cpp/fi/test/longs_sketch_from_java.sk +0 -0
- data/vendor/datasketches-cpp/hll/test/array6_from_java.sk +0 -0
- data/vendor/datasketches-cpp/hll/test/compact_array4_from_java.sk +0 -0
- data/vendor/datasketches-cpp/hll/test/compact_set_from_java.sk +0 -0
- data/vendor/datasketches-cpp/hll/test/list_from_java.sk +0 -0
- data/vendor/datasketches-cpp/hll/test/updatable_array4_from_java.sk +0 -0
- data/vendor/datasketches-cpp/hll/test/updatable_set_from_java.sk +0 -0
- data/vendor/datasketches-cpp/kll/test/kll_sketch_from_java.sk +0 -0
- data/vendor/datasketches-cpp/pyproject.toml +0 -23
- data/vendor/datasketches-cpp/python/CMakeLists.txt +0 -87
- data/vendor/datasketches-cpp/python/README.md +0 -85
- data/vendor/datasketches-cpp/python/datasketches/DensityWrapper.py +0 -87
- data/vendor/datasketches-cpp/python/datasketches/KernelFunction.py +0 -35
- data/vendor/datasketches-cpp/python/datasketches/PySerDe.py +0 -110
- data/vendor/datasketches-cpp/python/datasketches/TuplePolicy.py +0 -77
- data/vendor/datasketches-cpp/python/datasketches/TupleWrapper.py +0 -205
- data/vendor/datasketches-cpp/python/datasketches/__init__.py +0 -38
- data/vendor/datasketches-cpp/python/include/kernel_function.hpp +0 -98
- data/vendor/datasketches-cpp/python/include/py_serde.hpp +0 -113
- data/vendor/datasketches-cpp/python/include/quantile_conditional.hpp +0 -104
- data/vendor/datasketches-cpp/python/include/tuple_policy.hpp +0 -136
- data/vendor/datasketches-cpp/python/jupyter/CPCSketch.ipynb +0 -345
- data/vendor/datasketches-cpp/python/jupyter/FrequentItemsSketch.ipynb +0 -354
- data/vendor/datasketches-cpp/python/jupyter/HLLSketch.ipynb +0 -346
- data/vendor/datasketches-cpp/python/jupyter/KLLSketch.ipynb +0 -463
- data/vendor/datasketches-cpp/python/jupyter/ThetaSketchNotebook.ipynb +0 -403
- data/vendor/datasketches-cpp/python/pybind11Path.cmd +0 -21
- data/vendor/datasketches-cpp/python/src/__init__.py +0 -18
- data/vendor/datasketches-cpp/python/src/count_wrapper.cpp +0 -101
- data/vendor/datasketches-cpp/python/src/cpc_wrapper.cpp +0 -76
- data/vendor/datasketches-cpp/python/src/datasketches.cpp +0 -58
- data/vendor/datasketches-cpp/python/src/density_wrapper.cpp +0 -95
- data/vendor/datasketches-cpp/python/src/fi_wrapper.cpp +0 -182
- data/vendor/datasketches-cpp/python/src/hll_wrapper.cpp +0 -126
- data/vendor/datasketches-cpp/python/src/kll_wrapper.cpp +0 -158
- data/vendor/datasketches-cpp/python/src/ks_wrapper.cpp +0 -68
- data/vendor/datasketches-cpp/python/src/py_serde.cpp +0 -112
- data/vendor/datasketches-cpp/python/src/quantiles_wrapper.cpp +0 -155
- data/vendor/datasketches-cpp/python/src/req_wrapper.cpp +0 -154
- data/vendor/datasketches-cpp/python/src/theta_wrapper.cpp +0 -166
- data/vendor/datasketches-cpp/python/src/tuple_wrapper.cpp +0 -215
- data/vendor/datasketches-cpp/python/src/vector_of_kll.cpp +0 -490
- data/vendor/datasketches-cpp/python/src/vo_wrapper.cpp +0 -173
- data/vendor/datasketches-cpp/python/tests/__init__.py +0 -16
- data/vendor/datasketches-cpp/python/tests/count_min_test.py +0 -86
- data/vendor/datasketches-cpp/python/tests/cpc_test.py +0 -64
- data/vendor/datasketches-cpp/python/tests/density_test.py +0 -93
- data/vendor/datasketches-cpp/python/tests/fi_test.py +0 -149
- data/vendor/datasketches-cpp/python/tests/hll_test.py +0 -129
- data/vendor/datasketches-cpp/python/tests/kll_test.py +0 -159
- data/vendor/datasketches-cpp/python/tests/quantiles_test.py +0 -160
- data/vendor/datasketches-cpp/python/tests/req_test.py +0 -159
- data/vendor/datasketches-cpp/python/tests/theta_test.py +0 -148
- data/vendor/datasketches-cpp/python/tests/tuple_test.py +0 -206
- data/vendor/datasketches-cpp/python/tests/vector_of_kll_test.py +0 -148
- data/vendor/datasketches-cpp/python/tests/vo_test.py +0 -132
- data/vendor/datasketches-cpp/req/test/req_float_empty_from_java.sk +0 -0
- data/vendor/datasketches-cpp/req/test/req_float_estimation_from_java.sk +0 -0
- data/vendor/datasketches-cpp/req/test/req_float_exact_from_java.sk +0 -0
- data/vendor/datasketches-cpp/req/test/req_float_raw_items_from_java.sk +0 -0
- data/vendor/datasketches-cpp/req/test/req_float_single_item_from_java.sk +0 -0
- data/vendor/datasketches-cpp/sampling/test/binaries_from_java.txt +0 -67
- data/vendor/datasketches-cpp/sampling/test/varopt_sketch_long_sampling.sk +0 -0
- data/vendor/datasketches-cpp/sampling/test/varopt_sketch_string_exact.sk +0 -0
- data/vendor/datasketches-cpp/sampling/test/varopt_union_double_sampling.sk +0 -0
- data/vendor/datasketches-cpp/setup.py +0 -110
- data/vendor/datasketches-cpp/theta/test/theta_compact_empty_from_java.sk +0 -0
- data/vendor/datasketches-cpp/theta/test/theta_compact_estimation_from_java.sk +0 -0
- data/vendor/datasketches-cpp/theta/test/theta_compact_exact_from_java.sk +0 -0
- data/vendor/datasketches-cpp/theta/test/theta_compact_single_item_from_java.sk +0 -0
- data/vendor/datasketches-cpp/tox.ini +0 -26
- data/vendor/datasketches-cpp/tuple/include/array_of_doubles_intersection.hpp +0 -52
- data/vendor/datasketches-cpp/tuple/include/array_of_doubles_union.hpp +0 -81
- data/vendor/datasketches-cpp/tuple/include/array_of_doubles_union_impl.hpp +0 -43
- data/vendor/datasketches-cpp/tuple/test/aod_1_compact_empty_from_java.sk +0 -1
- data/vendor/datasketches-cpp/tuple/test/aod_1_compact_estimation_from_java.sk +0 -0
- data/vendor/datasketches-cpp/tuple/test/aod_1_compact_non_empty_no_entries_from_java.sk +0 -0
- data/vendor/datasketches-cpp/tuple/test/aod_2_compact_exact_from_java.sk +0 -0
- data/vendor/datasketches-cpp/tuple/test/aod_3_compact_empty_from_java.sk +0 -1
|
@@ -30,23 +30,56 @@
|
|
|
30
30
|
|
|
31
31
|
namespace datasketches {
|
|
32
32
|
|
|
33
|
-
|
|
33
|
+
/// Interface for serializing and deserializing items
|
|
34
34
|
template<typename T, typename Enable = void> struct serde {
|
|
35
|
-
|
|
35
|
+
/**
|
|
36
|
+
* Stream serialization
|
|
37
|
+
* @param os output stream
|
|
38
|
+
* @param items pointer to array of items
|
|
39
|
+
* @param num number of items
|
|
40
|
+
*/
|
|
36
41
|
void serialize(std::ostream& os, const T* items, unsigned num) const;
|
|
37
|
-
void deserialize(std::istream& is, T* items, unsigned num) const; // items allocated but not initialized
|
|
38
42
|
|
|
39
|
-
|
|
40
|
-
|
|
43
|
+
/**
|
|
44
|
+
* Stream deserialization
|
|
45
|
+
* @param is input stream
|
|
46
|
+
* @param items pointer to array of items (items in the array are allocated but not initialized)
|
|
47
|
+
* @param num number of items
|
|
48
|
+
*/
|
|
49
|
+
void deserialize(std::istream& is, T* items, unsigned num) const;
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Raw bytes serialization
|
|
53
|
+
* @param ptr pointer to output buffer
|
|
54
|
+
* @param capacity size of the buffer in bytes
|
|
55
|
+
* @param items pointer to array of items
|
|
56
|
+
* @param num number of items
|
|
57
|
+
*/
|
|
41
58
|
size_t serialize(void* ptr, size_t capacity, const T* items, unsigned num) const;
|
|
42
|
-
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Raw bytes deserialization
|
|
62
|
+
* @param ptr pointer to input buffer
|
|
63
|
+
* @param capacity size of the buffer in bytes
|
|
64
|
+
* @param items pointer to array of items (items in the array are allocated but not initialized)
|
|
65
|
+
* @param num number of items
|
|
66
|
+
*/
|
|
67
|
+
size_t deserialize(const void* ptr, size_t capacity, T* items, unsigned num) const;
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Size of the given item
|
|
71
|
+
* @param item to be sized
|
|
72
|
+
* @return size of the given item in bytes
|
|
73
|
+
*/
|
|
74
|
+
size_t size_of_item(const T& item) const;
|
|
43
75
|
};
|
|
44
76
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
77
|
+
/// serde for all fixed-size arithmetic types (int and float of different sizes).
|
|
78
|
+
/// in particular, kll_sketch<int64_t> should produce sketches binary-compatible
|
|
79
|
+
/// with LongsSketch and ItemsSketch<Long> with ArrayOfLongsSerDe in Java
|
|
48
80
|
template<typename T>
|
|
49
81
|
struct serde<T, typename std::enable_if<std::is_arithmetic<T>::value>::type> {
|
|
82
|
+
/// @copydoc serde::serialize
|
|
50
83
|
void serialize(std::ostream& os, const T* items, unsigned num) const {
|
|
51
84
|
bool failure = false;
|
|
52
85
|
try {
|
|
@@ -58,6 +91,7 @@ struct serde<T, typename std::enable_if<std::is_arithmetic<T>::value>::type> {
|
|
|
58
91
|
throw std::runtime_error("error writing to std::ostream with " + std::to_string(num) + " items");
|
|
59
92
|
}
|
|
60
93
|
}
|
|
94
|
+
|
|
61
95
|
void deserialize(std::istream& is, T* items, unsigned num) const {
|
|
62
96
|
bool failure = false;
|
|
63
97
|
try {
|
|
@@ -70,30 +104,37 @@ struct serde<T, typename std::enable_if<std::is_arithmetic<T>::value>::type> {
|
|
|
70
104
|
}
|
|
71
105
|
}
|
|
72
106
|
|
|
73
|
-
|
|
74
|
-
return sizeof(T);
|
|
75
|
-
}
|
|
107
|
+
/// @copydoc serde::serialize(void*,size_t,const T*,unsigned) const
|
|
76
108
|
size_t serialize(void* ptr, size_t capacity, const T* items, unsigned num) const {
|
|
77
109
|
const size_t bytes_written = sizeof(T) * num;
|
|
78
110
|
check_memory_size(bytes_written, capacity);
|
|
79
111
|
memcpy(ptr, items, bytes_written);
|
|
80
112
|
return bytes_written;
|
|
81
113
|
}
|
|
114
|
+
|
|
115
|
+
/// @copydoc serde::deserialize(const void*,size_t,T*,unsigned) const
|
|
82
116
|
size_t deserialize(const void* ptr, size_t capacity, T* items, unsigned num) const {
|
|
83
117
|
const size_t bytes_read = sizeof(T) * num;
|
|
84
118
|
check_memory_size(bytes_read, capacity);
|
|
85
119
|
memcpy(items, ptr, bytes_read);
|
|
86
120
|
return bytes_read;
|
|
87
121
|
}
|
|
122
|
+
|
|
123
|
+
/// @copydoc serde::size_of_item
|
|
124
|
+
size_t size_of_item(const T& item) const {
|
|
125
|
+
unused(item);
|
|
126
|
+
return sizeof(T);
|
|
127
|
+
}
|
|
88
128
|
};
|
|
89
129
|
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
130
|
+
/// serde for std::string items.
|
|
131
|
+
/// This should produce sketches binary-compatible with
|
|
132
|
+
/// ItemsSketch<String> with ArrayOfStringsSerDe in Java.
|
|
133
|
+
/// The length of each string is stored as a 32-bit integer (historically),
|
|
134
|
+
/// which may be too wasteful. Treat this as an example.
|
|
95
135
|
template<>
|
|
96
136
|
struct serde<std::string> {
|
|
137
|
+
/// @copydoc serde::serialize
|
|
97
138
|
void serialize(std::ostream& os, const std::string* items, unsigned num) const {
|
|
98
139
|
unsigned i = 0;
|
|
99
140
|
bool failure = false;
|
|
@@ -110,6 +151,8 @@ struct serde<std::string> {
|
|
|
110
151
|
throw std::runtime_error("error writing to std::ostream at item " + std::to_string(i));
|
|
111
152
|
}
|
|
112
153
|
}
|
|
154
|
+
|
|
155
|
+
/// @copydoc serde::deserialize
|
|
113
156
|
void deserialize(std::istream& is, std::string* items, unsigned num) const {
|
|
114
157
|
unsigned i = 0;
|
|
115
158
|
bool failure = false;
|
|
@@ -137,9 +180,8 @@ struct serde<std::string> {
|
|
|
137
180
|
throw std::runtime_error("error reading from std::istream at item " + std::to_string(i));
|
|
138
181
|
}
|
|
139
182
|
}
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
}
|
|
183
|
+
|
|
184
|
+
/// @copydoc serde::serialize(void*,size_t,const T*,unsigned) const
|
|
143
185
|
size_t serialize(void* ptr, size_t capacity, const std::string* items, unsigned num) const {
|
|
144
186
|
size_t bytes_written = 0;
|
|
145
187
|
for (unsigned i = 0; i < num; ++i) {
|
|
@@ -154,6 +196,8 @@ struct serde<std::string> {
|
|
|
154
196
|
}
|
|
155
197
|
return bytes_written;
|
|
156
198
|
}
|
|
199
|
+
|
|
200
|
+
/// @copydoc serde::deserialize(const void*,size_t,T*,unsigned) const
|
|
157
201
|
size_t deserialize(const void* ptr, size_t capacity, std::string* items, unsigned num) const {
|
|
158
202
|
size_t bytes_read = 0;
|
|
159
203
|
unsigned i = 0;
|
|
@@ -189,6 +233,11 @@ struct serde<std::string> {
|
|
|
189
233
|
|
|
190
234
|
return bytes_read;
|
|
191
235
|
}
|
|
236
|
+
|
|
237
|
+
/// @copydoc serde::size_of_item
|
|
238
|
+
size_t size_of_item(const std::string& item) const {
|
|
239
|
+
return sizeof(uint32_t) + item.size();
|
|
240
|
+
}
|
|
192
241
|
};
|
|
193
242
|
|
|
194
243
|
} /* namespace datasketches */
|
|
@@ -34,7 +34,6 @@ FetchContent_MakeAvailable(Catch2)
|
|
|
34
34
|
target_link_libraries(common_test_lib PUBLIC Catch2::Catch2)
|
|
35
35
|
|
|
36
36
|
set_target_properties(common_test_lib PROPERTIES
|
|
37
|
-
CXX_STANDARD 11
|
|
38
37
|
CXX_STANDARD_REQUIRED YES
|
|
39
38
|
)
|
|
40
39
|
|
|
@@ -69,6 +68,7 @@ add_test(
|
|
|
69
68
|
target_sources(common_test
|
|
70
69
|
PRIVATE
|
|
71
70
|
quantiles_sorted_view_test.cpp
|
|
71
|
+
optional_test.cpp
|
|
72
72
|
)
|
|
73
73
|
|
|
74
74
|
# now the integration test part
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Licensed to the Apache Software Foundation (ASF) under one
|
|
3
|
+
* or more contributor license agreements. See the NOTICE file
|
|
4
|
+
* distributed with this work for additional information
|
|
5
|
+
* regarding copyright ownership. The ASF licenses this file
|
|
6
|
+
* to you under the Apache License, Version 2.0 (the
|
|
7
|
+
* "License"); you may not use this file except in compliance
|
|
8
|
+
* with the License. You may obtain a copy of the License at
|
|
9
|
+
*
|
|
10
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
+
*
|
|
12
|
+
* Unless required by applicable law or agreed to in writing,
|
|
13
|
+
* software distributed under the License is distributed on an
|
|
14
|
+
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
15
|
+
* KIND, either express or implied. See the License for the
|
|
16
|
+
* specific language governing permissions and limitations
|
|
17
|
+
* under the License.
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
#include <catch2/catch.hpp>
|
|
21
|
+
|
|
22
|
+
#include <iostream>
|
|
23
|
+
|
|
24
|
+
#include "optional.hpp"
|
|
25
|
+
|
|
26
|
+
namespace datasketches {
|
|
27
|
+
|
|
28
|
+
class tt {
|
|
29
|
+
public:
|
|
30
|
+
tt() = delete; // make sure it cannot be default constructed
|
|
31
|
+
tt(int val): val_(val) {}
|
|
32
|
+
tt(const tt& other): val_(other.val_) { std::cout << "tt copy constructor\n"; }
|
|
33
|
+
tt(tt&& other): val_(other.val_) { std::cout << "tt move constructor\n"; }
|
|
34
|
+
tt& operator=(const tt& other) { val_ = other.val_; std::cout << "tt copy assignment\n"; return *this; }
|
|
35
|
+
tt& operator=(tt&& other) { val_ = other.val_; std::cout << "tt move assignment\n"; return *this; }
|
|
36
|
+
int get_val() const { return val_; }
|
|
37
|
+
private:
|
|
38
|
+
int val_;
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
TEST_CASE("optional", "[common]") {
|
|
42
|
+
optional<tt> opt;
|
|
43
|
+
REQUIRE_FALSE(opt);
|
|
44
|
+
opt.emplace(5);
|
|
45
|
+
REQUIRE(bool(opt));
|
|
46
|
+
REQUIRE((*opt).get_val() == 5);
|
|
47
|
+
REQUIRE(opt->get_val() == 5);
|
|
48
|
+
opt.reset();
|
|
49
|
+
REQUIRE_FALSE(opt);
|
|
50
|
+
|
|
51
|
+
optional<tt> opt2(opt);
|
|
52
|
+
REQUIRE_FALSE(opt2);
|
|
53
|
+
|
|
54
|
+
opt2.emplace(3);
|
|
55
|
+
if (opt2) *opt2 = 6; // good if it is initialized
|
|
56
|
+
REQUIRE(opt2->get_val() == 6);
|
|
57
|
+
|
|
58
|
+
opt.reset();
|
|
59
|
+
REQUIRE_FALSE(opt);
|
|
60
|
+
optional<tt> opt3(std::move(opt));
|
|
61
|
+
REQUIRE_FALSE(opt3);
|
|
62
|
+
*opt3 = 7; // don't do this! may be dangerous for arbitrary T, and it still thinks it is not initialized
|
|
63
|
+
REQUIRE_FALSE(opt3);
|
|
64
|
+
opt3.emplace(8);
|
|
65
|
+
REQUIRE(bool(opt3));
|
|
66
|
+
REQUIRE(opt3->get_val() == 8);
|
|
67
|
+
|
|
68
|
+
std::swap(opt2, opt3);
|
|
69
|
+
REQUIRE(opt2->get_val() == 8);
|
|
70
|
+
REQUIRE(opt3->get_val() == 6);
|
|
71
|
+
|
|
72
|
+
std::swap(opt2, opt);
|
|
73
|
+
REQUIRE_FALSE(opt2);
|
|
74
|
+
REQUIRE(bool(opt));
|
|
75
|
+
REQUIRE(opt->get_val() == 8);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
TEST_CASE("optional conversion", "[common]") {
|
|
79
|
+
optional<float> opt_f(1);
|
|
80
|
+
optional<double> opt_d(opt_f);
|
|
81
|
+
REQUIRE(bool(opt_d));
|
|
82
|
+
REQUIRE(*opt_d == static_cast<double>(*opt_f));
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
} /* namespace datasketches */
|
|
@@ -33,16 +33,16 @@ extern long long test_allocator_net_allocations;
|
|
|
33
33
|
|
|
34
34
|
template <class T> class test_allocator {
|
|
35
35
|
public:
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
36
|
+
using value_type = T;
|
|
37
|
+
using pointer = value_type*;
|
|
38
|
+
using const_pointer = const value_type*;
|
|
39
|
+
using reference = value_type&;
|
|
40
|
+
using const_reference = const value_type&;
|
|
41
|
+
using size_type = std::size_t;
|
|
42
|
+
using difference_type = std::ptrdiff_t;
|
|
43
43
|
|
|
44
44
|
template <class U>
|
|
45
|
-
struct rebind {
|
|
45
|
+
struct rebind { using other = test_allocator<U>; };
|
|
46
46
|
|
|
47
47
|
// this is to test that a given instance of an allocator is used instead of instantiating
|
|
48
48
|
static const bool DISALLOW_DEFAULT_CONSTRUCTOR = true;
|
|
@@ -66,7 +66,7 @@ public:
|
|
|
66
66
|
}
|
|
67
67
|
|
|
68
68
|
pointer allocate(size_type n, const_pointer = 0) {
|
|
69
|
-
void* p = new
|
|
69
|
+
void* p = ::operator new(n * sizeof(value_type));
|
|
70
70
|
if (!p) throw std::bad_alloc();
|
|
71
71
|
test_allocator_total_bytes += n * sizeof(value_type);
|
|
72
72
|
++test_allocator_net_allocations;
|
|
@@ -74,7 +74,7 @@ public:
|
|
|
74
74
|
}
|
|
75
75
|
|
|
76
76
|
void deallocate(pointer p, size_type n) {
|
|
77
|
-
if (p) delete
|
|
77
|
+
if (p) ::operator delete(p);
|
|
78
78
|
test_allocator_total_bytes -= n * sizeof(value_type);
|
|
79
79
|
--test_allocator_net_allocations;
|
|
80
80
|
}
|
|
@@ -92,12 +92,12 @@ public:
|
|
|
92
92
|
|
|
93
93
|
template<> class test_allocator<void> {
|
|
94
94
|
public:
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
95
|
+
using value_type = void;
|
|
96
|
+
using pointer = void*;
|
|
97
|
+
using const_pointer = const void*;
|
|
98
98
|
|
|
99
99
|
template <class U>
|
|
100
|
-
struct rebind {
|
|
100
|
+
struct rebind { using other = test_allocator<U>; };
|
|
101
101
|
};
|
|
102
102
|
|
|
103
103
|
|