From aaf941e3bd764cdf3e3e7695da72f80f45078718 Mon Sep 17 00:00:00 2001 From: LucaCappelletti94 Date: Tue, 20 Aug 2024 17:41:30 +0200 Subject: [PATCH] Added and tested extensively arbitrary word sizes --- Cargo.toml | 3 +- benches/array.rs | 1 - benches/unique_count_from_sorted_iterators.rs | 43 ++ evaluate_composite_hash/collision_rates.csv | 547 +++++++++-------- evaluate_composite_hash/collision_rates.png | Bin 0 -> 408137 bytes evaluate_composite_hash/src/main.rs | 5 +- evaluate_composite_hash/visualization.py | 246 ++++++++ hyperloglog-derive/Cargo.toml | 2 +- hyperloglog-derive/src/lib.rs | 429 ++++++++++++-- src/basicloglog.rs | 4 +- src/estimator.rs | 24 +- src/hashset.rs | 19 +- src/hybrid.rs | 106 ++-- src/hyperloglog.rs | 4 +- src/lib.rs | 2 +- src/loglogbeta.rs | 74 +-- src/mle.rs | 53 +- src/plusplus.rs | 72 +-- src/precisions.rs | 28 +- src/registers.rs | 260 -------- src/registers/packed_array.rs | 557 +++++++++++++----- src/sketches.rs | 15 +- src/utils.rs | 23 +- src/utils/as_bytes.rs | 73 +++ src/utils/composite_hash.rs | 36 +- src/utils/matrix.rs | 13 +- src/utils/number.rs | 48 +- src/utils/random.rs | 87 ++- src/utils/variable_word.rs | 9 +- src/utils/variable_words.rs | 66 ++- .../benches/cardinality.rs | 2 +- statistical_comparisons/benches/insert.rs | 2 +- statistical_comparisons/benches/union.rs | 2 +- .../macro_test_utils/tests/test_derives.rs | 8 - .../src/estimation_tests.rs | 6 +- .../src/proxy_implementations.rs | 36 -- tests/test_hll.rs | 205 +++---- 37 files changed, 1899 insertions(+), 1211 deletions(-) delete mode 100644 benches/array.rs create mode 100644 benches/unique_count_from_sorted_iterators.rs create mode 100644 evaluate_composite_hash/collision_rates.png create mode 100644 evaluate_composite_hash/visualization.py create mode 100644 src/utils/as_bytes.rs diff --git a/Cargo.toml b/Cargo.toml index d82768b..b4b3e48 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -41,6 +41,7 @@ serde_json = "1.0" [dev-dependencies] serde_json = "1.0" wyhash = "0.5.0" +criterion = { version = "0.5", features = ["html_reports"] } [features] default = ["low_precisions", "beta", "plusplus"] @@ -118,5 +119,5 @@ debug-assertions = false # Enables debug assertions. opt-level = 3 [[bench]] -name = "array" +name = "unique_count_from_sorted_iterators" harness = false diff --git a/benches/array.rs b/benches/array.rs deleted file mode 100644 index 5c34f15..0000000 --- a/benches/array.rs +++ /dev/null @@ -1 +0,0 @@ -//! Benchmarks on the array data structure and its key operations. \ No newline at end of file diff --git a/benches/unique_count_from_sorted_iterators.rs b/benches/unique_count_from_sorted_iterators.rs new file mode 100644 index 0000000..dbe7f3d --- /dev/null +++ b/benches/unique_count_from_sorted_iterators.rs @@ -0,0 +1,43 @@ +//! Benchmarks to evaluate improvements on the unique_count_from_sorted_iterators function. + +use criterion::{criterion_group, criterion_main, Criterion, black_box}; +use hyperloglog_rs::hybrid::unique_count_from_sorted_iterators; +use hyperloglog_rs::prelude::{iter_var_len_random_values, splitmix64}; + +fn bench_unique_count_from_sorted_iterators(b: &mut Criterion) { + let mut group = b.benchmark_group("unique_count_from_sorted_iterators"); + let mut random_state = 76568342984735313_u64; + // We consider the case of hash of 32 bits in a precision of 18, using 6 bits per register. + let maximal_possible_size = ((1 << 18) * 6) / 32; + let entries: Vec<(Vec, Vec)> = (0..200) + .map(|_| { + random_state = splitmix64(random_state); + let mut a = + iter_var_len_random_values::(0, maximal_possible_size, None, Some(random_state)) + .collect::>(); + random_state = splitmix64(random_state); + let mut b = + iter_var_len_random_values::(0, maximal_possible_size, None, Some(random_state)) + .collect::>(); + a.sort(); + b.sort(); + + (a, b) + }) + .collect(); + + group.bench_function("unique_count_from_sorted_iterators", |b| { + b.iter(|| { + for (a, b) in &entries { + unique_count_from_sorted_iterators(black_box(a.iter()), black_box(b.iter())); + } + }) + }); + + group.finish(); +} + + +criterion_group!(benches, bench_unique_count_from_sorted_iterators); + +criterion_main!(benches); \ No newline at end of file diff --git a/evaluate_composite_hash/collision_rates.csv b/evaluate_composite_hash/collision_rates.csv index 46ef0cc..af2022a 100644 --- a/evaluate_composite_hash/collision_rates.csv +++ b/evaluate_composite_hash/collision_rates.csv @@ -1,251 +1,296 @@ -mean_collision_rate,mean_number_of_collisions,number_of_elements,number_of_bits,exponent,number_of_bits_composite_hash -0.0690105,0.552084,8,4,4,8 -0.0001165,0.000466,4,4,4,16 -0.0003196,0.001598,5,5,4,16 -0.0008173333333333332,0.004904,6,6,4,16 -0.000277,0.002216,8,4,5,16 -0.0007198,0.007198,10,5,5,16 -0.0017856666666666665,0.021428,12,6,5,16 -0.000613,0.009808,16,4,6,16 -0.001544,0.03088,20,5,6,16 -0.0037432499999999996,0.089838,24,6,6,16 -0.0012619375,0.040382,32,4,7,16 -0.00316625,0.12665,40,5,7,16 -0.007616708333333332,0.365602,48,6,7,16 -0.0025518125,0.163316,64,4,8,16 -0.006396400000000001,0.511712,80,5,8,16 -0.015271520833333331,1.466066,96,6,8,16 -0.005136375,0.657456,128,4,9,16 -0.0127901875,2.04643,160,5,9,16 -0.030271177083333333,5.812066,192,6,9,16 -0.01028984375,2.6342,256,4,10,16 -0.0253973625,8.127156,320,5,10,16 -0.05916940625,22.721052,384,6,10,16 -0.0204325234375,10.461452,512,4,11,16 -0.04977158749999999,31.853816,640,5,11,16 -0.0402007890625,41.165608,1024,4,12,16 -0.0,0.0,2,4,4,32 -0.0,0.0,2,5,4,32 -0.0,0.0,3,6,4,32 -0.0,0.0,4,4,5,32 -0.0,0.0,5,5,5,32 -0.0,0.0,6,6,5,32 -0.0,0.0,8,4,6,32 -0.0,0.0,10,5,6,32 -0.0,0.0,12,6,6,32 -0.0,0.0,16,4,7,32 -0.0,0.0,20,5,7,32 -0.0,0.0,24,6,7,32 -0.0,0.0,32,4,8,32 -0.0,0.0,40,5,8,32 -8.333333333333333e-8,4e-6,48,6,8,32 -0.0,0.0,64,4,9,32 -1.0000000000000001e-7,8e-6,80,5,9,32 -3.333333333333333e-7,0.000032,96,6,9,32 -7.8125e-8,0.00001,128,4,10,32 -1.875e-7,0.00003,160,5,10,32 -4.583333333333333e-7,0.000088,192,6,10,32 -1.71875e-7,0.000044,256,4,11,32 -3.9375000000000004e-7,0.000126,320,5,11,32 -9.114583333333332e-7,0.00035,384,6,11,32 -3.1640625e-7,0.000162,512,4,12,32 -7.28125e-7,0.000466,640,5,12,32 -1.9374999999999997e-6,0.001488,768,6,12,32 -6.46484375e-7,0.000662,1024,4,13,32 -1.559375e-6,0.001996,1280,5,13,32 -3.768229166666666e-6,0.005788,1536,6,13,32 -1.26953125e-6,0.0026,2048,4,14,32 -3.1898437500000005e-6,0.008166,2560,5,14,32 -7.586588541666666e-6,0.023306,3072,6,14,32 -2.4990234375e-6,0.010236,4096,4,15,32 -6.362109375000001e-6,0.032574,5120,5,15,32 -0.000015208333333333331,0.09344,6144,6,15,32 -5.05419921875e-6,0.041404,8192,4,16,32 -0.000012777929687499998,0.130846,10240,5,16,32 -0.00003063509114583333,0.376444,12288,6,16,32 -0.0000101385498046875,0.16611,16384,4,17,32 -0.00002549072265625,0.52205,20480,5,17,32 -0.00006123250325520833,1.50485,24576,6,17,32 -0.00002038848876953125,0.66809,32768,4,18,32 -0.000050943505859375,2.086646,40960,5,18,32 -0.0001222291259765625,6.007806,49152,6,18,32 -0.0,0.0,1,4,4,40 -0.0,0.0,2,5,4,40 -0.0,0.0,2,6,4,40 -0.0,0.0,3,4,5,40 -0.0,0.0,4,5,5,40 -0.0,0.0,4,6,5,40 -0.0,0.0,6,4,6,40 -0.0,0.0,8,5,6,40 -0.0,0.0,9,6,6,40 -0.0,0.0,12,4,7,40 -0.0,0.0,16,5,7,40 -0.0,0.0,19,6,7,40 -0.0,0.0,25,4,8,40 -0.0,0.0,32,5,8,40 -0.0,0.0,38,6,8,40 -0.0,0.0,51,4,9,40 -0.0,0.0,64,5,9,40 -0.0,0.0,76,6,9,40 -0.0,0.0,102,4,10,40 -0.0,0.0,128,5,10,40 -0.0,0.0,153,6,10,40 -0.0,0.0,204,4,11,40 -0.0,0.0,256,5,11,40 -0.0,0.0,307,6,11,40 -0.0,0.0,409,4,12,40 -0.0,0.0,512,5,12,40 -3.2573289902280134e-9,2e-6,614,6,12,40 -2.442002442002442e-9,2e-6,819,4,13,40 -5.859375e-9,6e-6,1024,5,13,40 -1.3029315960912054e-8,0.000016,1228,6,13,40 -6.105006105006105e-9,0.00001,1638,4,14,40 -6.8359375e-9,0.000014,2048,5,14,40 -2.1978021978021977e-8,0.000054,2457,6,14,40 -4.884004884004884e-9,0.000016,3276,4,15,40 -1.66015625e-8,0.000068,4096,5,15,40 -5.2085452695829094e-8,0.000256,4915,6,15,40 -1.2513352662902487e-8,0.000082,6553,4,16,40 -3.369140625e-8,0.000276,8192,5,16,40 -9.318413021363173e-8,0.000916,9830,6,16,40 -2.7313649195086596e-8,0.000358,13107,4,17,40 -7.6171875e-8,0.001248,16384,5,17,40 -1.9003051881993897e-7,0.003736,19660,6,17,40 -5.943389028763256e-8,0.001558,26214,4,18,40 -1.571044921875e-7,0.005148,32768,5,18,40 -3.8249281554385696e-7,0.01504,39321,6,18,40 -0.0,0.0,1,4,4,48 -0.0,0.0,1,5,4,48 -0.0,0.0,2,6,4,48 -0.0,0.0,2,4,5,48 -0.0,0.0,3,5,5,48 -0.0,0.0,4,6,5,48 -0.0,0.0,5,4,6,48 -0.0,0.0,6,5,6,48 -0.0,0.0,8,6,6,48 -0.0,0.0,10,4,7,48 -0.0,0.0,13,5,7,48 -0.0,0.0,16,6,7,48 -0.0,0.0,21,4,8,48 -0.0,0.0,26,5,8,48 -0.0,0.0,32,6,8,48 -0.0,0.0,42,4,9,48 -0.0,0.0,53,5,9,48 -0.0,0.0,64,6,9,48 -0.0,0.0,85,4,10,48 -0.0,0.0,106,5,10,48 -0.0,0.0,128,6,10,48 -0.0,0.0,170,4,11,48 -0.0,0.0,213,5,11,48 -0.0,0.0,256,6,11,48 -0.0,0.0,341,4,12,48 -0.0,0.0,426,5,12,48 -0.0,0.0,512,6,12,48 -0.0,0.0,682,4,13,48 -0.0,0.0,853,5,13,48 -0.0,0.0,1024,6,13,48 -0.0,0.0,1365,4,14,48 -0.0,0.0,1706,5,14,48 -0.0,0.0,2048,6,14,48 -0.0,0.0,2730,4,15,48 -0.0,0.0,3413,5,15,48 -4.8828125e-10,2e-6,4096,6,15,48 -0.0,0.0,5461,4,16,48 -2.9299736302373277e-10,2e-6,6826,5,16,48 -2.44140625e-10,2e-6,8192,6,16,48 -0.0,0.0,10922,4,17,48 -2.929759027320003e-10,4e-6,13653,5,17,48 -7.32421875e-10,0.000012,16384,6,17,48 -1.8310826276035705e-10,4e-6,21845,4,18,48 -5.859518054640006e-10,0.000016,27306,5,18,48 -7.9345703125e-10,0.000026,32768,6,18,48 -0.0,0.0,1,4,4,56 -0.0,0.0,1,5,4,56 -0.0,0.0,1,6,4,56 -0.0,0.0,2,4,5,56 -0.0,0.0,2,5,5,56 -0.0,0.0,3,6,5,56 -0.0,0.0,4,4,6,56 -0.0,0.0,5,5,6,56 -0.0,0.0,6,6,6,56 -0.0,0.0,9,4,7,56 -0.0,0.0,11,5,7,56 -0.0,0.0,13,6,7,56 -0.0,0.0,18,4,8,56 -0.0,0.0,22,5,8,56 -0.0,0.0,27,6,8,56 -0.0,0.0,36,4,9,56 -0.0,0.0,45,5,9,56 -0.0,0.0,54,6,9,56 -0.0,0.0,73,4,10,56 -0.0,0.0,91,5,10,56 -0.0,0.0,109,6,10,56 -0.0,0.0,146,4,11,56 -0.0,0.0,182,5,11,56 -0.0,0.0,219,6,11,56 -0.0,0.0,292,4,12,56 -0.0,0.0,365,5,12,56 -0.0,0.0,438,6,12,56 -0.0,0.0,585,4,13,56 -0.0,0.0,731,5,13,56 -0.0,0.0,877,6,13,56 -0.0,0.0,1170,4,14,56 -0.0,0.0,1462,5,14,56 -0.0,0.0,1755,6,14,56 -0.0,0.0,2340,4,15,56 -0.0,0.0,2925,5,15,56 -0.0,0.0,3510,6,15,56 -0.0,0.0,4681,4,16,56 -0.0,0.0,5851,5,16,56 -0.0,0.0,7021,6,16,56 -0.0,0.0,9362,4,17,56 -0.0,0.0,11702,5,17,56 -0.0,0.0,14043,6,17,56 -0.0,0.0,18724,4,18,56 -0.0,0.0,23405,5,18,56 -0.0,0.0,28086,6,18,56 -0.0,0.0,1,4,4,64 -0.0,0.0,1,5,4,64 -0.0,0.0,1,6,4,64 -0.0,0.0,2,4,5,64 -0.0,0.0,2,5,5,64 -0.0,0.0,3,6,5,64 -0.0,0.0,4,4,6,64 -0.0,0.0,5,5,6,64 -0.0,0.0,6,6,6,64 -0.0,0.0,8,4,7,64 -0.0,0.0,10,5,7,64 -0.0,0.0,12,6,7,64 -0.0,0.0,16,4,8,64 -0.0,0.0,20,5,8,64 -0.0,0.0,24,6,8,64 -0.0,0.0,32,4,9,64 -0.0,0.0,40,5,9,64 -0.0,0.0,48,6,9,64 -0.0,0.0,64,4,10,64 -0.0,0.0,80,5,10,64 -0.0,0.0,96,6,10,64 -0.0,0.0,128,4,11,64 -0.0,0.0,160,5,11,64 -0.0,0.0,192,6,11,64 -0.0,0.0,256,4,12,64 -0.0,0.0,320,5,12,64 -0.0,0.0,384,6,12,64 -0.0,0.0,512,4,13,64 -0.0,0.0,640,5,13,64 -0.0,0.0,768,6,13,64 -0.0,0.0,1024,4,14,64 -0.0,0.0,1280,5,14,64 -0.0,0.0,1536,6,14,64 -0.0,0.0,2048,4,15,64 -0.0,0.0,2560,5,15,64 -0.0,0.0,3072,6,15,64 -0.0,0.0,4096,4,16,64 -0.0,0.0,5120,5,16,64 -0.0,0.0,6144,6,16,64 -0.0,0.0,8192,4,17,64 -0.0,0.0,10240,5,17,64 -0.0,0.0,12288,6,17,64 -0.0,0.0,16384,4,18,64 -0.0,0.0,20480,5,18,64 -0.0,0.0,24576,6,18,64 +hll_error,mean_collision_rate,mean_number_of_collisions,number_of_elements,number_of_bits,exponent,number_of_bits_composite_hash +0.26,0.0690105,0.552084,8,4,4,8 +0.26,0.0001165,0.000466,4,4,4,16 +0.26,0.0003196,0.001598,5,5,4,16 +0.26,0.0008173333333333332,0.004904,6,6,4,16 +0.18384776310850234,0.000277,0.002216,8,4,5,16 +0.18384776310850234,0.0007198,0.007198,10,5,5,16 +0.18384776310850234,0.0017856666666666665,0.021428,12,6,5,16 +0.13,0.000613,0.009808,16,4,6,16 +0.13,0.001544,0.03088,20,5,6,16 +0.13,0.0037432499999999996,0.089838,24,6,6,16 +0.09192388155425117,0.0012619375,0.040382,32,4,7,16 +0.09192388155425117,0.00316625,0.12665,40,5,7,16 +0.09192388155425117,0.007616708333333333,0.365602,48,6,7,16 +0.065,0.0025518125,0.163316,64,4,8,16 +0.065,0.006396400000000002,0.511712,80,5,8,16 +0.065,0.015271520833333331,1.466066,96,6,8,16 +0.045961940777125586,0.005136375,0.657456,128,4,9,16 +0.045961940777125586,0.0127901875,2.04643,160,5,9,16 +0.045961940777125586,0.030271177083333333,5.812066,192,6,9,16 +0.0325,0.01028984375,2.6342,256,4,10,16 +0.0325,0.0253973625,8.127156,320,5,10,16 +0.0325,0.05916940625,22.721052,384,6,10,16 +0.022980970388562793,0.0204325234375,10.461452,512,4,11,16 +0.022980970388562793,0.04977158749999999,31.853816,640,5,11,16 +0.01625,0.0402007890625,41.165608,1024,4,12,16 +0.26,0.0,0.0,2,4,4,24 +0.26,6.666666666666666e-7,2e-6,3,5,4,24 +0.26,3.5e-6,0.000014,4,6,4,24 +0.18384776310850234,8.000000000000001e-7,4e-6,5,4,5,24 +0.18384776310850234,2.6666666666666664e-6,0.000016,6,5,5,24 +0.18384776310850234,4.5e-6,0.000036,8,6,5,24 +0.13,2.2e-6,0.000022,10,4,6,24 +0.13,4.153846153846154e-6,0.000054,13,5,6,24 +0.13,0.000011,0.000176,16,6,6,24 +0.09192388155425117,3.904761904761905e-6,0.000082,21,4,7,24 +0.09192388155425117,7.846153846153847e-6,0.000204,26,5,7,24 +0.09192388155425117,0.0000203125,0.00065,32,6,7,24 +0.065,6.428571428571428e-6,0.00027,42,4,8,24 +0.065,0.000016301886792452833,0.000864,53,5,8,24 +0.065,0.00003946875,0.002526,64,6,8,24 +0.045961940777125586,0.00001355294117647059,0.001152,85,4,9,24 +0.045961940777125586,0.00003230188679245283,0.003424,106,5,9,24 +0.045961940777125586,0.00007971875,0.010204,128,6,9,24 +0.0325,0.000025705882352941175,0.00437,170,4,10,24 +0.0325,0.00006630985915492956,0.014124,213,5,10,24 +0.0325,0.0001623203125,0.041554,256,6,10,24 +0.022980970388562793,0.00005334310850439882,0.01819,341,4,11,24 +0.022980970388562793,0.00013441314553990608,0.05726,426,5,11,24 +0.022980970388562793,0.00032531640625,0.166562,512,6,11,24 +0.01625,0.00010789442815249265,0.073584,682,4,12,24 +0.01625,0.00027095427901524034,0.231124,853,5,12,24 +0.01625,0.000651259765625,0.66689,1024,6,12,24 +0.011490485194281396,0.000216589010989011,0.295644,1365,4,13,24 +0.011490485194281396,0.0005412942555685816,0.923448,1706,5,13,24 +0.011490485194281396,0.0012999599609375,2.662318,2048,6,13,24 +0.008125,0.0004335589743589743,1.183616,2730,4,14,24 +0.008125,0.0010827254614708469,3.695342,3413,5,14,24 +0.008125,0.00259695361328125,10.637122,4096,6,14,24 +0.005745242597140698,0.0008668577183665996,4.73391,5461,4,15,24 +0.005745242597140698,0.0021645244652798126,14.775044,6826,5,15,24 +0.005745242597140698,0.00518360498046875,42.464092,8192,6,15,24 +0.0040625,0.001733303424281267,18.93114,10922,4,16,24 +0.0040625,0.004323509558338827,59.028876,13653,5,16,24 +0.0040625,0.01032388427734375,169.14652,16384,6,16,24 +0.002872621298570349,0.0034617740444037527,75.622454,21845,4,17,24 +0.002872621298570349,0.00861595927634952,235.267384,27306,5,17,24 +0.002872621298570349,0.020466392211914063,670.64274,32768,6,17,24 +0.00203125,0.006902834195468067,301.584826,43690,4,18,24 +0.00203125,0.017105012323073265,934.156038,54613,5,18,24 +0.00203125,0.04022003979492188,2635.860528,65536,6,18,24 +0.26,0.0,0.0,2,4,4,32 +0.26,0.0,0.0,2,5,4,32 +0.26,0.0,0.0,3,6,4,32 +0.18384776310850234,0.0,0.0,4,4,5,32 +0.18384776310850234,0.0,0.0,5,5,5,32 +0.18384776310850234,0.0,0.0,6,6,5,32 +0.13,0.0,0.0,8,4,6,32 +0.13,0.0,0.0,10,5,6,32 +0.13,0.0,0.0,12,6,6,32 +0.09192388155425117,0.0,0.0,16,4,7,32 +0.09192388155425117,0.0,0.0,20,5,7,32 +0.09192388155425117,0.0,0.0,24,6,7,32 +0.065,0.0,0.0,32,4,8,32 +0.065,0.0,0.0,40,5,8,32 +0.065,8.333333333333333e-8,4e-6,48,6,8,32 +0.045961940777125586,0.0,0.0,64,4,9,32 +0.045961940777125586,1.0000000000000001e-7,8e-6,80,5,9,32 +0.045961940777125586,3.333333333333333e-7,0.000032,96,6,9,32 +0.0325,7.8125e-8,0.00001,128,4,10,32 +0.0325,1.875e-7,0.00003,160,5,10,32 +0.0325,4.583333333333333e-7,0.000088,192,6,10,32 +0.022980970388562793,1.71875e-7,0.000044,256,4,11,32 +0.022980970388562793,3.9375000000000004e-7,0.000126,320,5,11,32 +0.022980970388562793,9.114583333333332e-7,0.00035,384,6,11,32 +0.01625,3.1640625e-7,0.000162,512,4,12,32 +0.01625,7.28125e-7,0.000466,640,5,12,32 +0.01625,1.9374999999999997e-6,0.001488,768,6,12,32 +0.011490485194281396,6.46484375e-7,0.000662,1024,4,13,32 +0.011490485194281396,1.559375e-6,0.001996,1280,5,13,32 +0.011490485194281396,3.768229166666666e-6,0.005788,1536,6,13,32 +0.008125,1.26953125e-6,0.0026,2048,4,14,32 +0.008125,3.1898437500000005e-6,0.008166,2560,5,14,32 +0.008125,7.586588541666666e-6,0.023306,3072,6,14,32 +0.005745242597140698,2.4990234375e-6,0.010236,4096,4,15,32 +0.005745242597140698,6.362109375000001e-6,0.032574,5120,5,15,32 +0.005745242597140698,0.000015208333333333331,0.09344,6144,6,15,32 +0.0040625,5.05419921875e-6,0.041404,8192,4,16,32 +0.0040625,0.0000127779296875,0.130846,10240,5,16,32 +0.0040625,0.000030635091145833333,0.376444,12288,6,16,32 +0.002872621298570349,0.0000101385498046875,0.16611,16384,4,17,32 +0.002872621298570349,0.00002549072265625,0.52205,20480,5,17,32 +0.002872621298570349,0.00006123250325520833,1.50485,24576,6,17,32 +0.00203125,0.00002038848876953125,0.66809,32768,4,18,32 +0.00203125,0.000050943505859375,2.086646,40960,5,18,32 +0.00203125,0.0001222291259765625,6.007806,49152,6,18,32 +0.26,0.0,0.0,1,4,4,40 +0.26,0.0,0.0,2,5,4,40 +0.26,0.0,0.0,2,6,4,40 +0.18384776310850234,0.0,0.0,3,4,5,40 +0.18384776310850234,0.0,0.0,4,5,5,40 +0.18384776310850234,0.0,0.0,4,6,5,40 +0.13,0.0,0.0,6,4,6,40 +0.13,0.0,0.0,8,5,6,40 +0.13,0.0,0.0,9,6,6,40 +0.09192388155425117,0.0,0.0,12,4,7,40 +0.09192388155425117,0.0,0.0,16,5,7,40 +0.09192388155425117,0.0,0.0,19,6,7,40 +0.065,0.0,0.0,25,4,8,40 +0.065,0.0,0.0,32,5,8,40 +0.065,0.0,0.0,38,6,8,40 +0.045961940777125586,0.0,0.0,51,4,9,40 +0.045961940777125586,0.0,0.0,64,5,9,40 +0.045961940777125586,0.0,0.0,76,6,9,40 +0.0325,0.0,0.0,102,4,10,40 +0.0325,0.0,0.0,128,5,10,40 +0.0325,0.0,0.0,153,6,10,40 +0.022980970388562793,0.0,0.0,204,4,11,40 +0.022980970388562793,0.0,0.0,256,5,11,40 +0.022980970388562793,0.0,0.0,307,6,11,40 +0.01625,0.0,0.0,409,4,12,40 +0.01625,0.0,0.0,512,5,12,40 +0.01625,3.2573289902280134e-9,2e-6,614,6,12,40 +0.011490485194281396,2.442002442002442e-9,2e-6,819,4,13,40 +0.011490485194281396,5.859375e-9,6e-6,1024,5,13,40 +0.011490485194281396,1.3029315960912054e-8,0.000016,1228,6,13,40 +0.008125,6.105006105006105e-9,0.00001,1638,4,14,40 +0.008125,6.8359375e-9,0.000014,2048,5,14,40 +0.008125,2.1978021978021977e-8,0.000054,2457,6,14,40 +0.005745242597140698,4.884004884004884e-9,0.000016,3276,4,15,40 +0.005745242597140698,1.66015625e-8,0.000068,4096,5,15,40 +0.005745242597140698,5.2085452695829094e-8,0.000256,4915,6,15,40 +0.0040625,1.2513352662902487e-8,0.000082,6553,4,16,40 +0.0040625,3.369140625e-8,0.000276,8192,5,16,40 +0.0040625,9.318413021363173e-8,0.000916,9830,6,16,40 +0.002872621298570349,2.7313649195086596e-8,0.000358,13107,4,17,40 +0.002872621298570349,7.6171875e-8,0.001248,16384,5,17,40 +0.002872621298570349,1.9003051881993897e-7,0.003736,19660,6,17,40 +0.00203125,5.943389028763256e-8,0.001558,26214,4,18,40 +0.00203125,1.571044921875e-7,0.005148,32768,5,18,40 +0.00203125,3.8249281554385696e-7,0.01504,39321,6,18,40 +0.26,0.0,0.0,1,4,4,48 +0.26,0.0,0.0,1,5,4,48 +0.26,0.0,0.0,2,6,4,48 +0.18384776310850234,0.0,0.0,2,4,5,48 +0.18384776310850234,0.0,0.0,3,5,5,48 +0.18384776310850234,0.0,0.0,4,6,5,48 +0.13,0.0,0.0,5,4,6,48 +0.13,0.0,0.0,6,5,6,48 +0.13,0.0,0.0,8,6,6,48 +0.09192388155425117,0.0,0.0,10,4,7,48 +0.09192388155425117,0.0,0.0,13,5,7,48 +0.09192388155425117,0.0,0.0,16,6,7,48 +0.065,0.0,0.0,21,4,8,48 +0.065,0.0,0.0,26,5,8,48 +0.065,0.0,0.0,32,6,8,48 +0.045961940777125586,0.0,0.0,42,4,9,48 +0.045961940777125586,0.0,0.0,53,5,9,48 +0.045961940777125586,0.0,0.0,64,6,9,48 +0.0325,0.0,0.0,85,4,10,48 +0.0325,0.0,0.0,106,5,10,48 +0.0325,0.0,0.0,128,6,10,48 +0.022980970388562793,0.0,0.0,170,4,11,48 +0.022980970388562793,0.0,0.0,213,5,11,48 +0.022980970388562793,0.0,0.0,256,6,11,48 +0.01625,0.0,0.0,341,4,12,48 +0.01625,0.0,0.0,426,5,12,48 +0.01625,0.0,0.0,512,6,12,48 +0.011490485194281396,0.0,0.0,682,4,13,48 +0.011490485194281396,0.0,0.0,853,5,13,48 +0.011490485194281396,0.0,0.0,1024,6,13,48 +0.008125,0.0,0.0,1365,4,14,48 +0.008125,0.0,0.0,1706,5,14,48 +0.008125,0.0,0.0,2048,6,14,48 +0.005745242597140698,0.0,0.0,2730,4,15,48 +0.005745242597140698,0.0,0.0,3413,5,15,48 +0.005745242597140698,4.8828125e-10,2e-6,4096,6,15,48 +0.0040625,0.0,0.0,5461,4,16,48 +0.0040625,2.9299736302373277e-10,2e-6,6826,5,16,48 +0.0040625,2.44140625e-10,2e-6,8192,6,16,48 +0.002872621298570349,0.0,0.0,10922,4,17,48 +0.002872621298570349,2.929759027320003e-10,4e-6,13653,5,17,48 +0.002872621298570349,7.32421875e-10,0.000012,16384,6,17,48 +0.00203125,1.8310826276035705e-10,4e-6,21845,4,18,48 +0.00203125,5.859518054640006e-10,0.000016,27306,5,18,48 +0.00203125,7.9345703125e-10,0.000026,32768,6,18,48 +0.26,0.0,0.0,1,4,4,56 +0.26,0.0,0.0,1,5,4,56 +0.26,0.0,0.0,1,6,4,56 +0.18384776310850234,0.0,0.0,2,4,5,56 +0.18384776310850234,0.0,0.0,2,5,5,56 +0.18384776310850234,0.0,0.0,3,6,5,56 +0.13,0.0,0.0,4,4,6,56 +0.13,0.0,0.0,5,5,6,56 +0.13,0.0,0.0,6,6,6,56 +0.09192388155425117,0.0,0.0,9,4,7,56 +0.09192388155425117,0.0,0.0,11,5,7,56 +0.09192388155425117,0.0,0.0,13,6,7,56 +0.065,0.0,0.0,18,4,8,56 +0.065,0.0,0.0,22,5,8,56 +0.065,0.0,0.0,27,6,8,56 +0.045961940777125586,0.0,0.0,36,4,9,56 +0.045961940777125586,0.0,0.0,45,5,9,56 +0.045961940777125586,0.0,0.0,54,6,9,56 +0.0325,0.0,0.0,73,4,10,56 +0.0325,0.0,0.0,91,5,10,56 +0.0325,0.0,0.0,109,6,10,56 +0.022980970388562793,0.0,0.0,146,4,11,56 +0.022980970388562793,0.0,0.0,182,5,11,56 +0.022980970388562793,0.0,0.0,219,6,11,56 +0.01625,0.0,0.0,292,4,12,56 +0.01625,0.0,0.0,365,5,12,56 +0.01625,0.0,0.0,438,6,12,56 +0.011490485194281396,0.0,0.0,585,4,13,56 +0.011490485194281396,0.0,0.0,731,5,13,56 +0.011490485194281396,0.0,0.0,877,6,13,56 +0.008125,0.0,0.0,1170,4,14,56 +0.008125,0.0,0.0,1462,5,14,56 +0.008125,0.0,0.0,1755,6,14,56 +0.005745242597140698,0.0,0.0,2340,4,15,56 +0.005745242597140698,0.0,0.0,2925,5,15,56 +0.005745242597140698,0.0,0.0,3510,6,15,56 +0.0040625,0.0,0.0,4681,4,16,56 +0.0040625,0.0,0.0,5851,5,16,56 +0.0040625,0.0,0.0,7021,6,16,56 +0.002872621298570349,0.0,0.0,9362,4,17,56 +0.002872621298570349,0.0,0.0,11702,5,17,56 +0.002872621298570349,0.0,0.0,14043,6,17,56 +0.00203125,0.0,0.0,18724,4,18,56 +0.00203125,0.0,0.0,23405,5,18,56 +0.00203125,0.0,0.0,28086,6,18,56 +0.26,0.0,0.0,1,4,4,64 +0.26,0.0,0.0,1,5,4,64 +0.26,0.0,0.0,1,6,4,64 +0.18384776310850234,0.0,0.0,2,4,5,64 +0.18384776310850234,0.0,0.0,2,5,5,64 +0.18384776310850234,0.0,0.0,3,6,5,64 +0.13,0.0,0.0,4,4,6,64 +0.13,0.0,0.0,5,5,6,64 +0.13,0.0,0.0,6,6,6,64 +0.09192388155425117,0.0,0.0,8,4,7,64 +0.09192388155425117,0.0,0.0,10,5,7,64 +0.09192388155425117,0.0,0.0,12,6,7,64 +0.065,0.0,0.0,16,4,8,64 +0.065,0.0,0.0,20,5,8,64 +0.065,0.0,0.0,24,6,8,64 +0.045961940777125586,0.0,0.0,32,4,9,64 +0.045961940777125586,0.0,0.0,40,5,9,64 +0.045961940777125586,0.0,0.0,48,6,9,64 +0.0325,0.0,0.0,64,4,10,64 +0.0325,0.0,0.0,80,5,10,64 +0.0325,0.0,0.0,96,6,10,64 +0.022980970388562793,0.0,0.0,128,4,11,64 +0.022980970388562793,0.0,0.0,160,5,11,64 +0.022980970388562793,0.0,0.0,192,6,11,64 +0.01625,0.0,0.0,256,4,12,64 +0.01625,0.0,0.0,320,5,12,64 +0.01625,0.0,0.0,384,6,12,64 +0.011490485194281396,0.0,0.0,512,4,13,64 +0.011490485194281396,0.0,0.0,640,5,13,64 +0.011490485194281396,0.0,0.0,768,6,13,64 +0.008125,0.0,0.0,1024,4,14,64 +0.008125,0.0,0.0,1280,5,14,64 +0.008125,0.0,0.0,1536,6,14,64 +0.005745242597140698,0.0,0.0,2048,4,15,64 +0.005745242597140698,0.0,0.0,2560,5,15,64 +0.005745242597140698,0.0,0.0,3072,6,15,64 +0.0040625,0.0,0.0,4096,4,16,64 +0.0040625,0.0,0.0,5120,5,16,64 +0.0040625,0.0,0.0,6144,6,16,64 +0.002872621298570349,0.0,0.0,8192,4,17,64 +0.002872621298570349,0.0,0.0,10240,5,17,64 +0.002872621298570349,0.0,0.0,12288,6,17,64 +0.00203125,0.0,0.0,16384,4,18,64 +0.00203125,0.0,0.0,20480,5,18,64 +0.00203125,0.0,0.0,24576,6,18,64 diff --git a/evaluate_composite_hash/collision_rates.png b/evaluate_composite_hash/collision_rates.png new file mode 100644 index 0000000000000000000000000000000000000000..ecfa1c42ac5be0b80cc98a446b2cca0cf153ce99 GIT binary patch literal 408137 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ⅅ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

Nw9EH=3j3vI%VAi+CFJVJTaj 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

M{YOz(+&)u30yT5f~T1 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


7L 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
Tt$@!@KOqqp4$ip3}?dN_JnY0S97vW3a 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%0Da6V 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 literal 0 HcmV?d00001 diff --git a/evaluate_composite_hash/src/main.rs b/evaluate_composite_hash/src/main.rs index 83134b3..03f4b81 100644 --- a/evaluate_composite_hash/src/main.rs +++ b/evaluate_composite_hash/src/main.rs @@ -11,6 +11,8 @@ use wyhash::WyHash; #[derive(Serialize, Deserialize)] /// Struct to store the collision report. struct CollisionReport { + /// HLL theoretical error at this precision. + hll_error: f64, /// Average normalized number of elements that are missing in the set of composite hashes. mean_collision_rate: f64, /// Average number of elements that are missing in the set of composite hashes. @@ -89,6 +91,7 @@ where let mean_number_of_collisions = total_number_of_collisions as f64 / number_of_iterations as f64; Some(CollisionReport { + hll_error: P::error_rate(), mean_collision_rate, mean_number_of_collisions, number_of_elements, @@ -147,7 +150,7 @@ fn main() { test_composite_hash!(progress_bar, reports, u16, 11, Bits4, Bits5); test_composite_hash!(progress_bar, reports, u16, 12, Bits4); - test_collision_rate!(progress_bar, reports, u32, u40, u48, u56, u64); + test_collision_rate!(progress_bar, reports, u24, u32, u40, u48, u56, u64); // We write the reports to a CSV using csv and serde. diff --git a/evaluate_composite_hash/visualization.py b/evaluate_composite_hash/visualization.py new file mode 100644 index 0000000..0b6322e --- /dev/null +++ b/evaluate_composite_hash/visualization.py @@ -0,0 +1,246 @@ +"""Python script to visualize the collision rates of different composite hashes. + +We plot the number of elements on the abscissa and the collision rate on the ordinate. +We split the report into different plots, where in each plot we display a different composite hash. +In each plot, we display the performance for all combinations of precision and number of bits. +We distinguish the precisions (4-18) by color, and the number of bits (4, 5, 6) by the style of the line +and of the marker. + +The CSV report, for reference, looks like this: + +| hll_error | mean_collision_rate | mean_number_of_collisions | number_of_elements | number_of_bits | exponent | number_of_bits_composite_hash | +|---------------------|--------------------------|---------------------------|--------------------|----------------|----------|------------------------------| +| 0.26 | 0.0690105 | 0.552084 | 8 | 4 | 4 | 8 | +| 0.26 | 0.0001165 | 0.000466 | 4 | 4 | 4 | 16 | +| 0.26 | 0.0003196 | 0.001598 | 5 | 5 | 4 | 16 | +| 0.26 | 0.0008173333333333332 | 0.004904 | 6 | 6 | 4 | 16 | +| 0.18384776310850234 | 0.000277 | 0.002216 | 8 | 4 | 5 | 16 | +| 0.18384776310850234 | 0.0007198 | 0.007198 | 10 | 5 | 5 | 16 | +| 0.18384776310850234 | 0.0017856666666666665 | 0.021428 | 12 | 6 | 5 | 16 | + + +""" + +import matplotlib.pyplot as plt +import pandas as pd + + +def align_hashes(df) -> pd.DataFrame: + """Aligns and infers the performance of different composite hashes by the number of elements.""" + unique_number_of_elements = df["number_of_elements"].unique() + unique_hash_values = df["number_of_bits_composite_hash"].unique() + + # We increase the minimum mean_collision_rate to avoid zeros to the next non-zero value + df["mean_collision_rate"] = df["mean_collision_rate"].apply( + lambda x: 1e-20 if x == 0 else x + ) + + # We combine the number of bits and the exponent to create a unique identifier which we will plot. + df["hll"] = [ + f"P{precision}B{bits}" + for bits, precision in zip(df["number_of_bits"], df["exponent"]) + ] + + # We determine for precision the maximal number of elements it can handle + max_number_of_elements_per_hll = df.groupby(["hll"])["number_of_elements"].max() + min_number_of_elements_per_hll_and_hash = df.groupby( + ["hll", "number_of_bits_composite_hash"] + )["number_of_elements"].min() + + # We impute the performance of missing unique number of elements for each object + # were they are missing by putting the HLL expected error rate. + missing_values = [] + for hll, max_number_of_elements in max_number_of_elements_per_hll.items(): + # We get the precision associated at the current hll object + precision = int(hll.split("B")[0].split("P")[1]) + bits = int(hll.split("B")[1]) + hll_error = max(1.04 * (2 ** (-precision / 2.0)), 1e-20) + + for number_of_elements in unique_number_of_elements: + if number_of_elements > max_number_of_elements: + # This applies to all hashes. + for unique_hash_value in unique_hash_values: + # We verify that there is indeed at least an entry for this hash + # associated with the current hll object, so not to display values + # for hashes that are not compatible at all with a given combination + # of precision and bits. + if df[ + (df["hll"] == hll) + & (df["number_of_bits_composite_hash"] == unique_hash_value) + ].empty: + continue + + missing_values.append( + { + "hll": hll, + "hll_error": hll_error, + "mean_collision_rate": hll_error, + "mean_number_of_collisions": hll_error * (max_number_of_elements + 1), + "number_of_elements": max_number_of_elements + 1, + "number_of_bits": bits, + "exponent": precision, + "number_of_bits_composite_hash": unique_hash_value, + } + ) + missing_values.append( + { + "hll": hll, + "hll_error": hll_error, + "mean_collision_rate": hll_error, + "mean_number_of_collisions": hll_error * number_of_elements, + "number_of_elements": number_of_elements, + "number_of_bits": bits, + "exponent": precision, + "number_of_bits_composite_hash": unique_hash_value, + } + ) + # We do a similar procedure to infer the case where the number of elements is below the minimum + for ( + hll, + unique_hash_value, + ), min_number_of_elements in min_number_of_elements_per_hll_and_hash.items(): + for number_of_elements in unique_number_of_elements: + if number_of_elements < min_number_of_elements: + # We retrieve the row associated to the current hash, hll and min number of elements + # and we impute the missing values. If the row does not exist, as in some cases the + # hash function is not compatible with precision and bit size, we skip it. + row = df[ + (df["hll"] == hll) + & (df["number_of_elements"] == min_number_of_elements) + & (df["number_of_bits_composite_hash"] == unique_hash_value) + ].iloc[0] + + missing_values.append( + { + "hll": hll, + "hll_error": row.hll_error, + "mean_collision_rate": row.mean_collision_rate * (min_number_of_elements - 1) / min_number_of_elements, + "mean_number_of_collisions": row.mean_number_of_collisions, + "number_of_elements": min_number_of_elements - 1, + "number_of_bits": row.number_of_bits, + "exponent": row.exponent, + "number_of_bits_composite_hash": row.number_of_bits_composite_hash, + } + ) + + missing_values.append( + { + "hll": hll, + "hll_error": row.hll_error, + "mean_collision_rate": row.mean_collision_rate * number_of_elements / min_number_of_elements, + "mean_number_of_collisions": row.mean_number_of_collisions, + "number_of_elements": number_of_elements, + "number_of_bits": row.number_of_bits, + "exponent": row.exponent, + "number_of_bits_composite_hash": row.number_of_bits_composite_hash, + } + ) + + print(f"Imputed {len(missing_values)} missing values.") + + return pd.concat([df, pd.DataFrame(missing_values)]) + +def plot(): + """Plot the collision rates of different composite hashes.""" + # Load the collision rates of different composite hashes + df = pd.read_csv("collision_rates.csv") + + # We only keep the case at 4 bits because it is the only one we can compare + # across all hashes. + df = df[df["number_of_bits"] == 4] + + # We align the composite hashes performance by the number of elements + df = align_hashes(df) + + # We need to plot a total of 8 hashes. We place these subplots in a 4x2 grid. + fig, axs = plt.subplots(2, 4, figsize=(20, 10), sharex=True, sharey=True) + + # We iterate over the different hashes and we plot them in the corresponding subplot + unique_hashes = df["number_of_bits_composite_hash"].unique() + + colors_per_precision = { + 4: "tab:blue", + 5: "tab:orange", + 6: "tab:green", + 7: "tab:red", + 8: "tab:purple", + 9: "tab:brown", + 10: "tab:pink", + 11: "tab:gray", + 12: "tab:olive", + 13: "tab:cyan", + 14: "#FFA07A", + 15: "#FFD700", + 16: "#FF6347", + 17: "#FF4500", + 18: "#FF1493", + } + + marker_per_bit_size = { + 4: "o", + 5: "s", + 6: "^", + } + + line_style_per_bit_size = { + 4: "-", + 5: "--", + 6: "-.", + } + + for i, hash_value in enumerate(unique_hashes): + ax = axs[i // 4, i % 4] + + # We filter the data for the current hash + hash_df = df[df["number_of_bits_composite_hash"] == hash_value] + + assert not hash_df.empty, f"No data for hash {hash_value}" + + # We iterate the hll objects and we plot them in the corresponding subplot + for hll, group in hash_df.groupby("hll"): + precision = int(hll.split("P")[1].split("B")[0]) + bits = int(hll.split("B")[1]) + + # We sort the values by mean collision rate + group = group.sort_values("number_of_elements") + + # We plot the linear scale + ax.plot( + group["number_of_elements"], + group["mean_collision_rate"], + label=f"P{precision}B{bits}", + color=colors_per_precision[precision], + marker=marker_per_bit_size[bits], + markersize=1, + linewidth=1, + linestyle=line_style_per_bit_size[bits], + ) + + # We display the grids for the subplots + ax.grid(True, which="both") + + # We display the legend for these two subplots, splitting + # into 3 columns to avoid overlapping. + ax.legend(ncol=3, fontsize="small") + + # We set the title for the linear scale + ax.set_title(f"Composite Hash {hash_value} (Log Scale)") + + # We set the x-axis label for the linear scale + ax.set_xlabel("Number of Elements (Log Scale)") + ax.set_xscale("log") + ax.set_yscale("log") + + # We set the y-axis label for the linear scale + ax.set_ylabel("Collision Rate (Log Scale)") + + + # We adjust the layout of the subplots + fig.tight_layout() + + # We save the plot + fig.savefig("collision_rates.png") + + +if __name__ == "__main__": + plot() \ No newline at end of file diff --git a/hyperloglog-derive/Cargo.toml b/hyperloglog-derive/Cargo.toml index 4ffef31..621f5b9 100644 --- a/hyperloglog-derive/Cargo.toml +++ b/hyperloglog-derive/Cargo.toml @@ -4,7 +4,7 @@ version = "0.1.0" edition = "2021" [dependencies] -syn = "2.0" +syn = {version="2.0", features=["full"]} quote = "1.0" proc-macro2 = "1.0" diff --git a/hyperloglog-derive/src/lib.rs b/hyperloglog-derive/src/lib.rs index 6198ec4..c16ccaf 100644 --- a/hyperloglog-derive/src/lib.rs +++ b/hyperloglog-derive/src/lib.rs @@ -1,20 +1,12 @@ //! Submodule providing the derive macro for the VariableWord trait. -//! -//! A variable word is a trait that allows to define 'virtual' words, which -//! we use to define custom words that are multiples of 8 bits but not a power -//! of two, such as 40, 48, or 56 bits. The VariableWord derive not only derives -//! the variable word trait, but also all of the necessary traits for the word, -//! assuming that the underlying word is an u64 (we only cover 40, 48, and 56 bits). -//! These include for instance the Display, Debug, Add, Sub, Mul, Div, BitAnd, BitOr, -//! BitXor, Shl, Shr, AddAssign, SubAssign, MulAssign, DivAssign, BitAndAssign, BitOrAssign, -//! BitXorAssign, ShlAssign, ShrAssign, PartialEq, Eq, PartialOrd, Ord, Hash, and Default traits. -//! use proc_macro::TokenStream; use quote::quote; -use syn::{parse_macro_input, Data, DeriveInput, Fields, Ident}; +use syn::{parse_macro_input, Data, DeriveInput, Fields, Ident, ItemFn, Type}; /// Possible variants for the word size currently supported. enum WordSize { + /// 24-bit word. + U24, /// 40-bit word. U40, /// 48-bit word. @@ -25,14 +17,16 @@ enum WordSize { impl From<&Ident> for WordSize { fn from(ident: &Ident) -> Self { - if ident.to_string().contains("40") { + if ident.to_string().contains("24") { + WordSize::U24 + } else if ident.to_string().contains("40") { WordSize::U40 } else if ident.to_string().contains("48") { WordSize::U48 } else if ident.to_string().contains("56") { WordSize::U56 } else { - panic!("The struct name must contain either 40, 48, or 56"); + panic!("The struct name must contain either 24, 40, 48, or 56"); } } } @@ -40,6 +34,7 @@ impl From<&Ident> for WordSize { impl WordSize { fn number_of_bits(&self) -> u8 { match self { + WordSize::U24 => 24, WordSize::U40 => 40, WordSize::U48 => 48, WordSize::U56 => 56, @@ -48,6 +43,7 @@ impl WordSize { fn mask(&self) -> u64 { match self { + WordSize::U24 => 0xFF_FFFF, WordSize::U40 => 0xFF_FFFF_FFFF, WordSize::U48 => 0xFFFF_FFFF_FFFF, WordSize::U56 => 0xFF_FFFF_FFFF_FFFF, @@ -55,6 +51,44 @@ impl WordSize { } } +/// The words that can be used underneath the hood. +enum WordType { + U32, + U64, +} + +impl From for WordType { + fn from(ty: Type) -> Self { + match ty { + Type::Path(type_path) => { + let segment = type_path.path.segments.first().unwrap(); + let ident = &segment.ident; + if ident.to_string() == "u32" { + WordType::U32 + } else if ident.to_string() == "u64" { + WordType::U64 + } else { + panic!("The word type must be either u32 or u64"); + } + } + _ => panic!("The word type must be either u32 or u64"), + } + } +} + +impl WordType { + fn bits(&self) -> usize { + match self { + WordType::U32 => 32, + WordType::U64 => 64, + } + } + + fn bytes(&self) -> usize { + self.bits() / 8 + } +} + #[proc_macro_derive(VariableWord)] pub fn derive_variable_word(input: TokenStream) -> TokenStream { // Parse the input TokenStream into a syntax tree @@ -69,15 +103,21 @@ pub fn derive_variable_word(input: TokenStream) -> TokenStream { }; // Ensure the struct has exactly one unnamed field (i.e., a tuple struct) - let _field = match &data_struct.fields { + let field = match &data_struct.fields { Fields::Unnamed(fields) if fields.unnamed.len() == 1 => &fields.unnamed[0], _ => panic!("The struct must have exactly one unnamed field"), }; + // We get the type of the field + let field_type = &field.ty; + let word_type: WordType = WordType::from(field_type.clone()); + // Get the word size from the struct name let word_size = WordSize::from(name); let number_of_bits = word_size.number_of_bits(); + let number_of_bits_usize = number_of_bits as usize; let mask = word_size.mask(); + let word_bytes = word_type.bytes(); // Generate the necessary traits for the word let expanded = quote! { @@ -87,6 +127,36 @@ pub fn derive_variable_word(input: TokenStream) -> TokenStream { type Word = Self; } + impl crate::prelude::AsBytes for #name { + type Bytes = [u8; #number_of_bits_usize / 8]; + + #[inline] + #[must_use] + fn as_bytes(self) -> Self::Bytes { + self.into() + } + } + + impl From<[u8; #number_of_bits_usize / 8]> for #name { + #[inline] + #[must_use] + fn from(bytes: [u8; #number_of_bits_usize / 8]) -> Self { + let mut array = [0; #word_bytes]; + array[#word_bytes - #number_of_bits_usize / 8..].copy_from_slice(&bytes); + Self(#field_type::from_be_bytes(array)) + } + } + + impl Into<[u8; #number_of_bits_usize / 8]> for #name { + #[inline] + #[must_use] + fn into(self) -> [u8; #number_of_bits_usize / 8] { + let mut bytes = [0; #number_of_bits_usize / 8]; + bytes.copy_from_slice(&self.0.to_be_bytes()[#word_bytes - #number_of_bits_usize / 8..]); + bytes + } + } + impl core::fmt::Display for #name { fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { write!(f, "{}", self.0) @@ -99,7 +169,7 @@ pub fn derive_variable_word(input: TokenStream) -> TokenStream { #[inline] #[must_use] fn add(self, rhs: Self) -> Self::Output { - Self((self.0 + rhs.0) & ::MASK) + Self((self.0 + rhs.0) & (::MASK as #field_type)) } } @@ -117,7 +187,7 @@ pub fn derive_variable_word(input: TokenStream) -> TokenStream { #[inline] #[must_use] fn sub(self, rhs: Self) -> Self::Output { - Self((self.0.wrapping_sub(rhs.0)) & ::MASK) + Self((self.0.wrapping_sub(rhs.0)) & (::MASK as #field_type)) } } @@ -135,7 +205,7 @@ pub fn derive_variable_word(input: TokenStream) -> TokenStream { #[inline] #[must_use] fn mul(self, rhs: Self) -> Self::Output { - Self((self.0 * rhs.0) & ::MASK) + Self((self.0 * rhs.0) & (::MASK as #field_type)) } } @@ -153,7 +223,7 @@ pub fn derive_variable_word(input: TokenStream) -> TokenStream { #[inline] #[must_use] fn div(self, rhs: Self) -> Self::Output { - Self((self.0 / rhs.0) & ::MASK) + Self((self.0 / rhs.0) & (::MASK as #field_type)) } } @@ -165,6 +235,24 @@ pub fn derive_variable_word(input: TokenStream) -> TokenStream { } } + impl core::ops::Rem for #name { + type Output = Self; + + #[inline] + #[must_use] + fn rem(self, rhs: Self) -> Self::Output { + Self((self.0 % rhs.0) & (::MASK as #field_type)) + } + } + + impl core::ops::RemAssign for #name { + #[inline] + #[must_use] + fn rem_assign(&mut self, rhs: Self) { + *self = *self % rhs; + } + } + impl core::ops::BitAnd for #name { type Output = Self; @@ -219,7 +307,7 @@ pub fn derive_variable_word(input: TokenStream) -> TokenStream { } } - impl core::ops::Shl for #name where u64: core::ops::Shl { + impl core::ops::Shl for #name where #field_type: core::ops::Shl { type Output = Self; #[inline] @@ -229,16 +317,16 @@ pub fn derive_variable_word(input: TokenStream) -> TokenStream { } } - impl core::ops::ShlAssign for #name where u64: core::ops::ShlAssign { + impl core::ops::ShlAssign for #name where #field_type: core::ops::ShlAssign { #[inline] #[must_use] fn shl_assign(&mut self, rhs: A) { self.0 <<= rhs; - self.0 &= ::MASK; + self.0 &= (::MASK as #field_type); } } - impl core::ops::Shr for #name where u64: core::ops::Shr { + impl core::ops::Shr for #name where #field_type: core::ops::Shr { type Output = Self; #[inline] @@ -248,7 +336,7 @@ pub fn derive_variable_word(input: TokenStream) -> TokenStream { } } - impl core::ops::ShrAssign for #name where u64: core::ops::ShrAssign { + impl core::ops::ShrAssign for #name where #field_type: core::ops::ShrAssign { #[inline] #[must_use] fn shr_assign(&mut self, rhs: A) { @@ -322,7 +410,7 @@ pub fn derive_variable_word(input: TokenStream) -> TokenStream { #[inline] #[must_use] unsafe fn unchecked_from_u64(value: u64) -> Self { - Self(value) + Self(value as #field_type) } #[inline] @@ -358,7 +446,7 @@ pub fn derive_variable_word(input: TokenStream) -> TokenStream { #[inline] #[must_use] fn not(self) -> Self::Output { - Self(!self.0 & ::MASK) + Self(!self.0 & (::MASK as #field_type)) } } @@ -387,7 +475,7 @@ pub fn derive_variable_word(input: TokenStream) -> TokenStream { if value > ::MASK { Err("Value is too large for the word size") } else { - Ok(Self(value)) + Ok(Self(value as #field_type)) } } } @@ -396,7 +484,7 @@ pub fn derive_variable_word(input: TokenStream) -> TokenStream { #[inline] #[must_use] fn from(value: u8) -> Self { - Self(value as u64) + Self(value as #field_type) } } @@ -404,7 +492,7 @@ pub fn derive_variable_word(input: TokenStream) -> TokenStream { #[inline] #[must_use] fn from(value: u16) -> Self { - Self(value as u64) + Self(value as #field_type) } } @@ -412,7 +500,7 @@ pub fn derive_variable_word(input: TokenStream) -> TokenStream { #[inline] #[must_use] fn from(value: u32) -> Self { - Self(value as u64) + Self(value as #field_type) } } @@ -420,7 +508,7 @@ pub fn derive_variable_word(input: TokenStream) -> TokenStream { #[inline] #[must_use] fn into(self) -> u64 { - self.0 + self.0 as u64 } } @@ -430,7 +518,7 @@ pub fn derive_variable_word(input: TokenStream) -> TokenStream { #[inline] #[must_use] fn try_into(self) -> Result { - if self.0 > u8::MAX as u64 { + if self.0 > u8::MAX as #field_type { Err("Value is too large for u8") } else { Ok(self.0 as u8) @@ -444,7 +532,7 @@ pub fn derive_variable_word(input: TokenStream) -> TokenStream { #[inline] #[must_use] fn try_into(self) -> Result { - if self.0 > u16::MAX as u64 { + if self.0 > u16::MAX as #field_type { Err("Value is too large for u16") } else { Ok(self.0 as u16) @@ -452,20 +540,6 @@ pub fn derive_variable_word(input: TokenStream) -> TokenStream { } } - impl TryInto for #name { - type Error = &'static str; - - #[inline] - #[must_use] - fn try_into(self) -> Result { - if self.0 > u32::MAX as u64 { - Err("Value is too large for u32") - } else { - Ok(self.0 as u32) - } - } - } - #[cfg(feature = "std")] impl crate::prelude::Named for #name { #[inline] @@ -479,3 +553,266 @@ pub fn derive_variable_word(input: TokenStream) -> TokenStream { // Return the generated impl TokenStream::from(expanded) } + +#[proc_macro_attribute] +pub fn test_variable_words(_attr: TokenStream, item: TokenStream) -> TokenStream { + // Parse the input token stream (the function we're deriving for) + let input = parse_macro_input!(item as ItemFn); + + // Extract the function name + let fn_name = &input.sig.ident; + + // Define a list of generics we want to cover + let mut generics = vec![ + Ident::new("u8", fn_name.span()), + Ident::new("u16", fn_name.span()), + Ident::new("u24", fn_name.span()), + Ident::new("u32", fn_name.span()), + Ident::new("u40", fn_name.span()), + Ident::new("u48", fn_name.span()), + Ident::new("u56", fn_name.span()), + Ident::new("u64", fn_name.span()), + ]; + + // We add the Bits{i} for the range 1-8 + for i in 1..=8 { + generics.push(Ident::new(&format!("Bits{}", i), fn_name.span())); + } + + // Generate the test functions + let test_functions = generics.iter().map(|generic| { + let test_fn_name = Ident::new( + &format!("{}_{}", fn_name, generic).to_lowercase(), + fn_name.span(), + ); + quote! { + #[test] + /// Test the #generic type + fn #test_fn_name() { + #fn_name::<#generic>(); + } + } + }); + + // Generate the final token stream + let expanded = quote! { + #input + + #(#test_functions)* + }; + + // Convert the expanded code into a token stream + TokenStream::from(expanded) +} + +#[proc_macro_attribute] +pub fn test_array(_attr: TokenStream, item: TokenStream) -> TokenStream { + // Parse the input token stream (the function we're deriving for) + let input = parse_macro_input!(item as ItemFn); + + // Extract the function name + let fn_name = &input.sig.ident; + + // Define a list of generics we want to cover + let mut generics = vec![ + Ident::new("u8", fn_name.span()), + Ident::new("u16", fn_name.span()), + Ident::new("u24", fn_name.span()), + Ident::new("u32", fn_name.span()), + Ident::new("u40", fn_name.span()), + Ident::new("u48", fn_name.span()), + Ident::new("u56", fn_name.span()), + Ident::new("u64", fn_name.span()), + ]; + + // We add the Bits{i} for the range 1-8 + for i in 1..=8 { + generics.push(Ident::new(&format!("Bits{}", i), fn_name.span())); + } + + // Generate the test functions + let test_functions = generics.iter().flat_map(|generic| { + [true, false].into_iter().flat_map(move |packed| { + [0_usize, 1_usize, 2_usize, 3_usize, 4_usize, 5_usize, 6_usize, 7_usize, 8_usize] + .into_iter() + .map(move |number_of_words| { + let packed_name = if packed { "packed_" } else { "" }; + + let test_fn_name = Ident::new( + &format!("{}_{}_{}{}", fn_name, generic, packed_name, number_of_words) + .to_lowercase(), + fn_name.span(), + ); + quote! { + #[test] + /// Test the #generic type + fn #test_fn_name() { + const NUMBER_OF_WORDS: usize = Array::<#number_of_words, #packed, #generic>::number_of_values() as usize; + let mut reference = [<<#generic as VariableWord>::Word as Zero>::ZERO; NUMBER_OF_WORDS]; + for (value, element) in iter_random_values::<#generic>(NUMBER_OF_WORDS as u64, None, None).zip(reference.iter_mut()) { + *element = value; + } + #fn_name::(reference); + } + } + }) + }) + }); + + // Generate the final token stream + let expanded = quote! { + #input + + #(#test_functions)* + }; + + // Convert the expanded code into a token stream + TokenStream::from(expanded) +} + +#[proc_macro_attribute] +pub fn test_all_precisions_and_bits(_attr: TokenStream, item: TokenStream) -> TokenStream { + // Parse the input token stream (the function we're deriving for) + let input = parse_macro_input!(item as ItemFn); + + // Extract the function name + let fn_name = &input.sig.ident; + + // Define a list of generics we want to cover + let precisions = (4..=18) + .map(|precision| Ident::new(&format!("Precision{}", precision), fn_name.span())) + .collect::>(); + let bits = (4..=6) + .map(|bits| Ident::new(&format!("Bits{}", bits), fn_name.span())) + .collect::>(); + + // Generate the test functions + let test_functions = precisions.iter().enumerate().flat_map(|(i, precision)| { + let precision_exponent = i + 4; + (bits).iter().flat_map(move |bit| { + let test_fn_name = Ident::new( + &format!( + "{fn_name}_{precision}_{bit}", + ) + .to_lowercase(), + fn_name.span(), + ); + + // For each precision, we need to check whether the feature precision_{exponent} is enabled + let precision_flag = format!("precision_{precision_exponent}"); + let feature_constraints = + vec![quote! { #[cfg(feature = #precision_flag)] }]; + + quote! { + #[test] + #(#feature_constraints)* + fn #test_fn_name() { + #fn_name::<#precision, #bit>(); + } + } + }) + }); + + // Generate the final token stream + let expanded = quote! { + #input + + #(#test_functions)* + }; + + // Convert the expanded code into a token stream + TokenStream::from(expanded) +} + + +#[proc_macro_attribute] +pub fn test_estimator(_attr: TokenStream, item: TokenStream) -> TokenStream { + // Parse the input token stream (the function we're deriving for) + let input = parse_macro_input!(item as ItemFn); + + // Extract the function name + let fn_name = &input.sig.ident; + + // Define a list of generics we want to cover + let precisions = (4..=18) + .map(|precision| Ident::new(&format!("Precision{}", precision), fn_name.span())) + .collect::>(); + let bits = (4..=6) + .map(|bits| Ident::new(&format!("Bits{}", bits), fn_name.span())) + .collect::>(); + let hashers = vec![ + Ident::new("XxHash", fn_name.span()), + Ident::new("WyHash", fn_name.span()), + ]; + + // Generate the test functions + let test_functions = precisions.iter().enumerate().flat_map(|(i, precision)| { + let precision_exponent = i + 4; + let hashers = hashers.clone(); + (bits).iter().flat_map(move |bit| { + let hashers = hashers.clone(); + hashers.into_iter().flat_map(move |hasher| { + [true, false].into_iter().map(move |packed| { + let packed_name = if packed { "packed_" } else { "" }; + + let test_fn_name = Ident::new( + &format!( + "{}_{}_{}{}_{}", + fn_name, precision, packed_name, bit, hasher + ) + .to_lowercase(), + fn_name.span(), + ); + + // For each precision, we need to check whether the feature precision_{exponent} is enabled + let precision_flag = format!("precision_{precision_exponent}"); + let mut feature_constraints = + vec![quote! { #[cfg(feature = #precision_flag)] }]; + + // If in the name of the function there appears the word MLE, we add the feature mle + if fn_name.to_string().contains("mle") { + feature_constraints.push(quote! { #[cfg(feature = "mle")] }); + } + + // If in the name of the function there appears the word plusplus, we add the feature plusplus + if fn_name.to_string().contains("plusplus") { + feature_constraints.push(quote! { #[cfg(feature = "plusplus")] }); + } + + // If in the name of the function there appears the word beta, we add the feature beta + if fn_name.to_string().contains("beta") { + feature_constraints.push(quote! { #[cfg(feature = "beta")] }); + } + + if packed { + quote! { + #[test] + #(#feature_constraints)* + fn #test_fn_name() { + #fn_name::<#precision, #bit, <#precision as ArrayRegister<#bit>>::Packed, #hasher>(); + } + } + } else { + quote! { + #[test] + #(#feature_constraints)* + fn #test_fn_name() { + #fn_name::<#precision, #bit, <#precision as ArrayRegister<#bit>>::Array, #hasher>(); + } + } + } + }) + }) + }) + }); + + // Generate the final token stream + let expanded = quote! { + #input + + #(#test_functions)* + }; + + // Convert the expanded code into a token stream + TokenStream::from(expanded) +} diff --git a/src/basicloglog.rs b/src/basicloglog.rs index c50f575..3137f02 100644 --- a/src/basicloglog.rs +++ b/src/basicloglog.rs @@ -79,7 +79,7 @@ impl, Hasher: HasherType> BasicLogLog< ) -> bool { // Count leading zeros. debug_assert!( - new_register_value < 1 << B::NUMBER_OF_BITS, + new_register_value <= u8::try_from(B::MASK).unwrap(), "Register value is too large." ); debug_assert!( @@ -359,7 +359,7 @@ impl> SetPropertie // is equal to 2^(exponent - max_multiplicity). self.harmonic_sum <= f64::integer_exp2_minus_signed( - i8::try_from(maximal_multeplicity(P::EXPONENT, B::NUMBER_OF_BITS)).unwrap() + i8::try_from(1 << B::NUMBER_OF_BITS).unwrap() - i8::try_from(P::EXPONENT).unwrap() - 1, ) diff --git a/src/estimator.rs b/src/estimator.rs index 261b84d..8480b20 100644 --- a/src/estimator.rs +++ b/src/estimator.rs @@ -44,17 +44,33 @@ pub trait Estimator: Sized + Send + Sync { fn estimate_cardinality(&self) -> F; /// Returns an estimate of two [`HyperLogLog`] counters union cardinality. - fn estimate_union_cardinality(&self, other: &Self) -> F; + fn estimate_union_cardinality_with_cardinalities( + &self, + other: &Self, + self_cardinality: F, + other_cardinality: F, + ) -> F; + + /// Returns an estimate of two [`HyperLogLog`] counters union cardinality. + fn estimate_union_cardinality(&self, other: &Self) -> F { + self.estimate_union_cardinality_with_cardinalities( + other, + self.estimate_cardinality(), + other.estimate_cardinality(), + ) + } /// Returns whether the union estimate is currently non-deterministic. - fn is_union_estimate_non_deterministic(&self, other: &Self) -> bool; + fn is_union_estimate_non_deterministic(&self, _: &Self) -> bool { + false + } #[inline] /// Returns an estimate of the intersection cardinality between two counters. fn estimate_intersection_cardinality(&self, other: &Self) -> F { let self_cardinality = self.estimate_cardinality(); let other_cardinality = other.estimate_cardinality(); - let union_cardinality = self.estimate_union_cardinality(other); + let union_cardinality = self.estimate_union_cardinality_with_cardinalities(other, self_cardinality, other_cardinality); // We apply correction to the union cardinality to get the intersection cardinality. if self_cardinality + other_cardinality < union_cardinality { @@ -69,7 +85,7 @@ pub trait Estimator: Sized + Send + Sync { fn estimate_jaccard_index(&self, other: &Self) -> F { let self_cardinality = self.estimate_cardinality(); let other_cardinality = other.estimate_cardinality(); - let union_cardinality = self.estimate_union_cardinality(other); + let union_cardinality = self.estimate_union_cardinality_with_cardinalities(other, self_cardinality, other_cardinality); // We apply correction to the union cardinality to get the intersection cardinality. if self_cardinality + other_cardinality < union_cardinality || union_cardinality.is_zero() { diff --git a/src/hashset.rs b/src/hashset.rs index 5f71f8c..fb3faea 100644 --- a/src/hashset.rs +++ b/src/hashset.rs @@ -25,7 +25,7 @@ where reason = "This is an adapter trait for tests." )] #[expect(clippy::as_conversions, reason = "There are no better options.")] - fn estimate_union_cardinality(&self, other: &Self) -> f64 { + fn estimate_union_cardinality_with_cardinalities(&self, other: &Self, _: f64, _: f64) -> f64 { self.union(other).count() as f64 } @@ -38,11 +38,6 @@ where fn estimate_cardinality(&self) -> f64 { self.len() as f64 } - - #[inline] - fn is_union_estimate_non_deterministic(&self, _other: &Self) -> bool { - false - } } impl Estimator for HashSet @@ -50,7 +45,12 @@ where I: Eq + Hash + Send + Sync, { #[inline] - fn estimate_union_cardinality(&self, other: &Self) -> usize { + fn estimate_union_cardinality_with_cardinalities( + &self, + other: &Self, + _: usize, + _: usize, + ) -> usize { self.union(other).count() } @@ -58,11 +58,6 @@ where fn estimate_cardinality(&self) -> usize { self.len() } - - #[inline] - fn is_union_estimate_non_deterministic(&self, _other: &Self) -> bool { - false - } } impl SetProperties for HashSet { diff --git a/src/hybrid.rs b/src/hybrid.rs index e320e1b..c6f23d5 100644 --- a/src/hybrid.rs +++ b/src/hybrid.rs @@ -10,7 +10,7 @@ use core::marker::PhantomData; #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] /// A struct representing the hybrid for approximate set cardinality estimation, /// where the hash values are kept explicit up until they fit into the registers. -pub struct Hybrid { +pub struct Hybrid { /// The inner counter. inner: H, /// The type of the composite hash to employ. @@ -102,7 +102,9 @@ impl, CH> PartialEq for Hybrid { impl Eq for Hybrid {} -impl, CH: CompositeHash> SetProperties for Hybrid { +impl, CH: CompositeHash> SetProperties + for Hybrid +{ #[inline] fn is_empty(&self) -> bool { if self.is_hybrid() { @@ -122,7 +124,11 @@ impl, CH: CompositeHash> SetProp } } -impl + Hybridazable, CH: CompositeHash> ApproximatedSet for Hybrid where CH: { +impl + Hybridazable, CH: CompositeHash> + ApproximatedSet for Hybrid +where + CH:, +{ #[inline] fn may_contain(&self, element: &T) -> bool { if self.is_hybrid() { @@ -140,8 +146,11 @@ impl, CH: CompositeHash> MutableSet } } -impl + Hybridazable, CH: CompositeHash> ExtendableApproximatedSet - for Hybrid +impl< + T: Hash, + H: ExtendableApproximatedSet + Hybridazable, + CH: CompositeHash, + > ExtendableApproximatedSet for Hybrid { #[inline] fn insert(&mut self, element: &T) -> bool { @@ -166,48 +175,37 @@ impl + Hybridazable, CH: CompositeH /// of the two sets is at most the sum of the number of unique values in each set, /// so at most 2**16 unique values. We can thus use a u32 to represent the number /// of unique values. -fn unique_values_from_sorted_iterators, J: Iterator>( +pub fn unique_count_from_sorted_iterators, J: ExactSizeIterator>( mut left: I, mut right: J, ) -> u32 { - let mut count = u32::ZERO; + let mut intersection = u32::ZERO; + let left_length = left.len() as u32; + let right_length = right.len() as u32; let mut maybe_left_value = left.next(); let mut maybe_right_value = right.next(); - while let Some(ord) = maybe_left_value.as_ref().and_then(|left_value| { - maybe_right_value - .as_ref() - .map(|right_value| left_value.cmp(right_value)) - }) { - count += u32::ONE; - match ord { - Ordering::Less => { - maybe_left_value = left.next(); - } - Ordering::Greater => { - maybe_right_value = right.next(); - } - Ordering::Equal => { - maybe_left_value = left.next(); - maybe_right_value = right.next(); - } - } - } + while let (Some(left_value), Some(right_value)) = + (maybe_left_value.as_ref(), maybe_right_value.as_ref()) + { + let cmp = left_value.cmp(right_value); - if maybe_left_value.is_some() { - count += u32::ONE; - } + intersection += u32::from(cmp == Ordering::Equal); - if maybe_right_value.is_some() { - count += u32::ONE; + if cmp == Ordering::Equal || cmp == Ordering::Less { + maybe_left_value = left.next(); + } + if cmp == Ordering::Equal || cmp == Ordering::Greater { + maybe_right_value = right.next(); + } } - count + u32::try_from(left.count()).unwrap() + u32::try_from(right.count()).unwrap() + left_length + right_length - intersection } /// Trait for a struct that can be used in the hybrid approach. pub trait Hybridazable>: Default { /// The type of the iterator over the sorted hashes. - type IterSortedHashes<'words>: Iterator + type IterSortedHashes<'words>: ExactSizeIterator where CH: 'words, Self: 'words; @@ -253,7 +251,8 @@ impl Named for Hybrid { } } -impl + Hybridazable + Default, CH: CompositeHash> Estimator for Hybrid +impl + Hybridazable + Default, CH: CompositeHash> + Estimator for Hybrid where Hybrid: Default, { @@ -277,13 +276,18 @@ where } #[inline] - fn estimate_union_cardinality(&self, other: &Self) -> f64 { + fn estimate_union_cardinality_with_cardinalities( + &self, + other: &Self, + self_cardinality: f64, + other_cardinality: f64, + ) -> f64 { match (self.is_hybrid(), other.is_hybrid()) { (true, true) => { // In the case where both counters are in hybrid mode, we can // simply iterate on the two sorted hash arrays and determine the number // of unique hashes. - f64::from(unique_values_from_sorted_iterators( + f64::from(unique_count_from_sorted_iterators( self.iter_sorted_hashes(), other.iter_sorted_hashes(), )) @@ -291,10 +295,22 @@ where (true, false) => { let mut copy = self.clone(); copy.dehybridize(); - copy.estimate_union_cardinality(other) + copy.estimate_union_cardinality_with_cardinalities( + other, + self_cardinality, + other_cardinality, + ) } - (false, true) => other.estimate_union_cardinality(self), - (false, false) => self.inner.estimate_union_cardinality(&other.inner), + (false, true) => other.estimate_union_cardinality_with_cardinalities( + self, + self_cardinality, + other_cardinality, + ), + (false, false) => self.inner.estimate_union_cardinality_with_cardinalities( + &other.inner, + self_cardinality, + other_cardinality, + ), } } } @@ -305,20 +321,22 @@ mod tests { use super::*; #[test] - fn test_unique_values_from_sorted_iterators() { + fn test_unique_count_from_sorted_iterators() { let number_of_iterations = 10; let mut random_state = splitmix64(3456789456776543); for _ in 0..number_of_iterations { random_state = splitmix64(random_state); - let mut left = iter_random_values(1000, None, random_state).collect::>(); + let mut left = iter_var_len_random_values::(0, 1000, None, Some(random_state)) + .collect::>(); left.sort(); random_state = splitmix64(random_state); - let mut right = iter_random_values(1000, None, random_state).collect::>(); + let mut right = iter_var_len_random_values::(0, 1000, None, Some(random_state)) + .collect::>(); right.sort(); let unique_values = - unique_values_from_sorted_iterators(left.iter().cloned(), right.iter().cloned()); + unique_count_from_sorted_iterators(left.iter().cloned(), right.iter().cloned()); let unique_values_set = u32::try_from( left.iter() .chain(right.iter()) @@ -354,7 +372,7 @@ mod tests { let mut exact_set = std::collections::HashSet::new(); let mut random_state = splitmix64(3456789456776543); - for element in iter_random_values(1000, None, random_state) { + for element in iter_var_len_random_values::(0, 1000, None, Some(random_state)) { random_state = splitmix64(random_state); hybrid.insert(&element); exact_set.insert(element); diff --git a/src/hyperloglog.rs b/src/hyperloglog.rs index 45114d5..b819c08 100644 --- a/src/hyperloglog.rs +++ b/src/hyperloglog.rs @@ -120,13 +120,13 @@ pub trait HyperLogLog: // than the maximal value that may be represented in a register // with BITS bits. if B::NUMBER_OF_BITS < 6_u8 { - censored_hash |= 1 << (64_u8 - ((u8::ONE << B::NUMBER_OF_BITS) - u8::ONE)); + censored_hash |= 1_u64 << 64_u64 - B::MASK; } let register_value = u8::try_from(censored_hash.leading_zeros() + 1).unwrap(); debug_assert!( - register_value <= (1 << B::NUMBER_OF_BITS) - 1, + register_value <= u8::try_from(B::MASK).unwrap(), "The register value {} must be less than or equal to the maximum register value {}.", register_value, (1 << B::NUMBER_OF_BITS) - 1 diff --git a/src/lib.rs b/src/lib.rs index 13bd9ea..857c93d 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -8,7 +8,7 @@ mod basicloglog; mod bits; mod estimator; -mod hybrid; +pub mod hybrid; mod hyperloglog; mod hyperloglog_macro; #[cfg(feature = "beta")] diff --git a/src/loglogbeta.rs b/src/loglogbeta.rs index 535ca95..92005b9 100644 --- a/src/loglogbeta.rs +++ b/src/loglogbeta.rs @@ -65,78 +65,20 @@ where } #[inline] - fn estimate_union_cardinality(&self, other: &Self) -> f64 { + fn estimate_union_cardinality_with_cardinalities( + &self, + other: &Self, + self_cardinality: f64, + other_cardinality: f64, + ) -> f64 { let (harmonic_sum, number_of_zero_registers) = self .registers() .get_harmonic_sum_and_zeros(other.registers()); correct_union_estimate( - P::beta_estimate(self.harmonic_sum(), self.get_number_of_zero_registers()), - P::beta_estimate(other.harmonic_sum(), other.get_number_of_zero_registers()), + self_cardinality, + other_cardinality, P::beta_estimate(harmonic_sum, number_of_zero_registers), ) } - - #[inline] - fn is_union_estimate_non_deterministic(&self, _other: &Self) -> bool { - false - } -} - -#[cfg(test)] -mod tests { - use super::*; - - #[test] - #[cfg(feature = "precision_5")] - fn test_estimate_cardinality() { - let mut hll = LogLogBeta::< - Precision5, - Bits6, - >::Array, - >::default(); - hll.extend(&[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]); - let estimate: f64 = hll.estimate_cardinality(); - assert!(estimate > 10.0 * (1.0 - Precision5::error_rate())); - assert!(estimate < 10.0 * (1.0 + Precision5::error_rate())); - } - - #[test] - #[cfg(feature = "precision_5")] - /// In this test we verify that the output of the `estimate_union_cardinality` method always - /// yields the same result as the `estimate_cardinality` run on the bitor of the two sets. - fn test_union_bitor() { - let iterations = 10; - let mut random_state = splitmix64(6545345645876_u64); - - let mut hll1 = LogLogBeta::< - Precision5, - Bits6, - >::Array, - >::default(); - let mut hll2 = LogLogBeta::< - Precision5, - Bits6, - >::Array, - >::default(); - - for _ in 0..iterations { - random_state = splitmix64(random_state); - for (i, value) in iter_random_values(100_000, None, random_state).enumerate() { - if i % 2 == 0 { - hll1.insert(&value); - } else { - hll2.insert(&value); - } - - let union_estimate: f64 = hll1.estimate_union_cardinality(&hll2); - let union_inverted_estimate: f64 = hll2.estimate_union_cardinality(&hll1); - let bitor_estimate: f64 = (hll1 | hll2).estimate_cardinality(); - let bitor_inverted_estimate: f64 = (hll2 | hll1).estimate_cardinality(); - - assert_eq!(bitor_inverted_estimate, bitor_estimate); - assert_eq!(union_estimate, union_inverted_estimate); - } - } - } } diff --git a/src/mle.rs b/src/mle.rs index ed85ea8..937d6b1 100644 --- a/src/mle.rs +++ b/src/mle.rs @@ -46,18 +46,15 @@ fn mle_union_cardinality< >( left: &H, right: &H, + left_cardinality: f64, + right_cardinality: f64, estimate: fn(f64, P::NumberOfRegisters) -> f64, ) -> f64 { - let mut left_multiplicities_larger = - vec![f64::ZERO; usize::from(maximal_multeplicity(P::EXPONENT, B::NUMBER_OF_BITS))]; - let mut left_multiplicities_smaller = - vec![f64::ZERO; usize::from(maximal_multeplicity(P::EXPONENT, B::NUMBER_OF_BITS))]; - let mut right_multiplicities_larger = - vec![f64::ZERO; usize::from(maximal_multeplicity(P::EXPONENT, B::NUMBER_OF_BITS))]; - let mut right_multiplicities_smaller = - vec![f64::ZERO; usize::from(maximal_multeplicity(P::EXPONENT, B::NUMBER_OF_BITS))]; - let mut joint_multiplicities = - vec![f64::ZERO; usize::from(maximal_multeplicity(P::EXPONENT, B::NUMBER_OF_BITS))]; + let mut left_multiplicities_larger = vec![f64::ZERO; 1 << B::NUMBER_OF_BITS]; + let mut left_multiplicities_smaller = vec![f64::ZERO; 1 << B::NUMBER_OF_BITS]; + let mut right_multiplicities_larger = vec![f64::ZERO; 1 << B::NUMBER_OF_BITS]; + let mut right_multiplicities_smaller = vec![f64::ZERO; 1 << B::NUMBER_OF_BITS]; + let mut joint_multiplicities = vec![f64::ZERO; 1 << B::NUMBER_OF_BITS]; let mut union_harmonic_sum = f64::ZERO; let mut union_zeros = P::NumberOfRegisters::ZERO; @@ -86,10 +83,7 @@ fn mle_union_cardinality< } // We get the best estimates from HyperLogLog++ - let union_cardinality_estimate = estimate(union_harmonic_sum, union_zeros); - - let left_cardinality_estimate = left.estimate_cardinality(); - let right_cardinality_estimate = right.estimate_cardinality(); + let union_cardinality = estimate(union_harmonic_sum, union_zeros); // If the sum of the number of registers equal to zero, i.e. // the first value in the multiplicities vectors, is equal @@ -99,15 +93,12 @@ fn mle_union_cardinality< return f64::ZERO; } - let intersection: f64 = (left_cardinality_estimate + right_cardinality_estimate - - union_cardinality_estimate) - .max(f64::EPSILON); + let intersection: f64 = + (left_cardinality + right_cardinality - union_cardinality).max(f64::EPSILON); - let left_difference: f64 = - (union_cardinality_estimate - right_cardinality_estimate).max(f64::EPSILON); + let left_difference: f64 = (union_cardinality - right_cardinality).max(f64::EPSILON); - let right_difference: f64 = - (union_cardinality_estimate - left_cardinality_estimate).max(f64::EPSILON); + let right_difference: f64 = (union_cardinality - left_cardinality).max(f64::EPSILON); let relative_error_limit = 10.0_f64.powi(-ERROR) / f64::integer_exp2(P::EXPONENT).sqrt(); @@ -121,7 +112,7 @@ fn mle_union_cardinality< }; // We precompute q and q+1 for reference. - let q_plus_one: u8 = maximal_multeplicity(P::EXPONENT, B::NUMBER_OF_BITS) - 1; + let q_plus_one: u8 = (1 << B::NUMBER_OF_BITS) - 1; let q: u8 = q_plus_one - 1; // We initialize the vectors for the Adam optimizer. @@ -302,10 +293,17 @@ where } #[inline] - fn estimate_union_cardinality(&self, other: &Self) -> f64 { + fn estimate_union_cardinality_with_cardinalities( + &self, + other: &Self, + self_cardinality: f64, + other_cardinality: f64, + ) -> f64 { mle_union_cardinality::, ERROR>( &self.counter, &other.counter, + self_cardinality, + other_cardinality, P::beta_estimate, ) } @@ -327,10 +325,17 @@ where } #[inline] - fn estimate_union_cardinality(&self, other: &Self) -> f64 { + fn estimate_union_cardinality_with_cardinalities( + &self, + other: &Self, + self_cardinality: f64, + other_cardinality: f64, + ) -> f64 { mle_union_cardinality::, ERROR>( &self.counter, &other.counter, + self_cardinality, + other_cardinality, P::plusplus_estimate, ) } diff --git a/src/plusplus.rs b/src/plusplus.rs index 0590d36..7d36138 100644 --- a/src/plusplus.rs +++ b/src/plusplus.rs @@ -66,81 +66,15 @@ where } #[inline] - fn estimate_union_cardinality(&self, other: &Self) -> f64 { + fn estimate_union_cardinality_with_cardinalities(&self, other: &Self, self_cardinality: f64, other_cardinality: f64) -> f64 { let (harmonic_sum, number_of_zero_registers) = self .registers() .get_harmonic_sum_and_zeros(other.registers()); correct_union_estimate( - P::plusplus_estimate(self.harmonic_sum(), self.get_number_of_zero_registers()), - P::plusplus_estimate(other.harmonic_sum(), other.get_number_of_zero_registers()), + self_cardinality, + other_cardinality, P::plusplus_estimate(harmonic_sum, number_of_zero_registers), ) } - - #[inline] - fn is_union_estimate_non_deterministic(&self, _other: &Self) -> bool { - false - } -} - -#[cfg(test)] -mod tests { - use super::*; - - #[test] - #[cfg(feature = "precision_5")] - fn test_estimate_cardinality() { - let mut hll = PlusPlus::< - Precision5, - Bits6, - >::Array, - twox_hash::XxHash64, - >::default(); - hll.extend(&[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]); - let estimate: f64 = hll.estimate_cardinality(); - assert!(estimate > 10.0 * (1.0 - Precision5::error_rate())); - assert!(estimate < 10.0 * (1.0 + Precision5::error_rate())); - } - - #[test] - #[cfg(feature = "precision_5")] - /// In this test we verify that the output of the `estimate_union_cardinality` method always - /// yields the same result as the `estimate_cardinality` run on the bitor of the two sets. - fn test_union_bitor() { - let iterations = 10; - let mut random_state = splitmix64(6545345645876_u64); - - let mut hll1 = PlusPlus::< - Precision5, - Bits6, - >::Array, - twox_hash::XxHash64, - >::default(); - let mut hll2 = PlusPlus::< - Precision5, - Bits6, - >::Array, - twox_hash::XxHash64, - >::default(); - - for _ in 0..iterations { - random_state = splitmix64(random_state); - for (i, value) in iter_random_values(100_000, None, random_state).enumerate() { - if i % 2 == 0 { - hll1.insert(&value); - } else { - hll2.insert(&value); - } - - let union_estimate: f64 = hll1.estimate_union_cardinality(&hll2); - let union_inverted_estimate: f64 = hll2.estimate_union_cardinality(&hll1); - let bitor_estimate: f64 = (hll1 | hll2).estimate_cardinality(); - let bitor_inverted_estimate: f64 = (hll2 | hll1).estimate_cardinality(); - - assert_eq!(bitor_inverted_estimate, bitor_estimate); - assert_eq!(union_estimate, union_inverted_estimate); - } - } - } } diff --git a/src/precisions.rs b/src/precisions.rs index 6a80b6d..ff7bd04 100644 --- a/src/precisions.rs +++ b/src/precisions.rs @@ -9,7 +9,7 @@ use core::{f64, fmt::Debug}; #[cfg(feature = "mem_dbg")] use mem_dbg::{MemDbg, MemSize}; -use crate::utils::{FloatOps, Number, One, PositiveInteger}; +use crate::utils::{FloatOps, Number, One, PositiveInteger, VariableWord}; #[cfg(feature = "plusplus")] use crate::utils::Two; @@ -110,10 +110,10 @@ pub trait Precision: Default + Copy + Eq + Debug + Send + Sync { /// when counting the number of zeros, as it will be corrected when computing /// the cardinality as it is known before hand whether this can happen at all. #[cfg(feature = "mem_dbg")] - type NumberOfRegisters: PositiveInteger + MemSize + MemDbg; + type NumberOfRegisters: PositiveInteger + VariableWord::NumberOfRegisters> + MemSize + MemDbg; #[cfg(not(feature = "mem_dbg"))] /// Se documentation above. - type NumberOfRegisters: PositiveInteger; + type NumberOfRegisters: PositiveInteger + VariableWord::NumberOfRegisters>; /// The exponent of the number of registers, meaning the number of registers /// that will be used is 2^EXPONENT. This is the p parameter in the [`HyperLogLog`]. const EXPONENT: u8; @@ -299,28 +299,6 @@ mod tests { fn []() { test_error_rate_simmetry::<[]>(); } - - #[test] - #[cfg(feature = "precision_" $exponent)] - fn []() { - // The smallest possible harmonic sum is determined by - // the number of registers, which is 2^EXPONENT, times - // the reciprocal of two to the the largest register value: - // 2^EXPONENT * 2^(-BITS) = 2^(EXPONENT - BITS). - // In this test, we check that the harmonic sum is able to - // store accurately the value 2^(EXPONENT - BITS). - for number_of_bits in [1, 2, 3, 4, 5, 6 , 7 , 8] { - let harmonic_sum = 2f64.powi([]::EXPONENT as i32 - number_of_bits); - let harmonic_sum_plus_one = 2f64.powi([]::EXPONENT as i32 - number_of_bits) + 1.0; - let harmonic_sum_minus_one = harmonic_sum_plus_one - 1.0; - assert_eq!(harmonic_sum, harmonic_sum_minus_one); - - let harmonic_sum = 2f32.powi([]::EXPONENT as i32 - number_of_bits); - let harmonic_sum_plus_one = 2f32.powi([]::EXPONENT as i32 - number_of_bits) + 1.0; - let harmonic_sum_minus_one = harmonic_sum_plus_one - 1.0; - assert_eq!(harmonic_sum, harmonic_sum_minus_one); - } - } } )* }; diff --git a/src/registers.rs b/src/registers.rs index ea8588a..079786c 100644 --- a/src/registers.rs +++ b/src/registers.rs @@ -69,263 +69,3 @@ pub trait Registers: /// Clears the registers to zero. fn clear_registers(&mut self); } - -#[cfg(test)] -#[cfg(feature = "std")] -mod tests { - use super::*; - - fn test_register_iterator>() { - let mut registers = R::default(); - let collected_values = registers.iter_registers().collect::>(); - assert_eq!( - P::NumberOfRegisters::try_from_u64(collected_values.len() as u64).unwrap(), - P::NUMBER_OF_REGISTERS - ); - // All the values should be zeroed. - assert!(collected_values.iter().all(|&value| value == 0)); - // We check that each collected value is identical to what we obtain using the get method. - assert!(collected_values - .iter() - .enumerate() - .all(|(index, &value)| value - == registers - .get_register(P::NumberOfRegisters::try_from_u64(index as u64).unwrap()))); - - // We check that, given all registers are currently zeroed, when we set them to the maximum value - // we get always returned a value and that value is equal to zero. - for index in 0_u64..P::NUMBER_OF_REGISTERS.into() { - let index = P::NumberOfRegisters::try_from_u64(index).unwrap(); - let max_value = u8::try_from(>::LOWER_REGISTER_MASK).unwrap(); - let old_value = registers.set_greater(index, max_value); - assert_eq!(old_value, (0, max_value)); - // If we try to do it again, we should receive the new value - let old_value = registers.set_greater(index, max_value); - assert_eq!(old_value, (max_value, max_value)); - } - } - - fn test_registers_self_consistency, B: Bits>() { - let iterations = 50; - let mut random_state = splitmix64(324564567865354); - let mut index_random_state = splitmix64(324566754567865354); - let mut packed_registers =

>::Packed::default(); - let mut array_registers =

>::Array::default(); - let mut reference = vec![0_u8; 1 << P::EXPONENT]; - - let maximal_register_value = >::LOWER_REGISTER_MASK; - - // We check that the arrays are full of zeros. - assert!(packed_registers.iter_registers().all(|value| value == 0)); - assert!(array_registers.iter_registers().all(|value| value == 0)); - - // We check that if we call get_register on all index we get zeros. - for index in 0..(1 << P::EXPONENT) { - let index = P::NumberOfRegisters::try_from_u64(index).unwrap(); - assert_eq!(packed_registers.get_register(index), 0); - assert_eq!(array_registers.get_register(index), 0); - } - - for i in 0..iterations { - random_state = splitmix64(random_state); - index_random_state = splitmix64(index_random_state); - - for (j, (index, value)) in - iter_random_values(1_000_000, Some(1 << P::EXPONENT), random_state) - .zip(iter_random_values( - 1_000_000, - Some(maximal_register_value.into()), - random_state, - )) - .enumerate() - { - let index_usize = index as usize; - let index: P::NumberOfRegisters = - P::NumberOfRegisters::try_from_u64(index).unwrap(); - let value: u8 = u8::try_from(value).unwrap(); - - // We expect that the values at index are the same in both packed and array registers. - assert_eq!( - packed_registers.get_register(index), - array_registers.get_register(index), - "Registers are dis-aligned at index {}, at inner iteration {} and outer iteration {}. Expected value {}.", - index, j, i, reference[index_usize] - ); - - // We retrieve the values immediately before and after the change and we verify that they - // have not been changed. - let prev_value_packed = (index_usize > 0) - .then(|| packed_registers.get_register(index - P::NumberOfRegisters::ONE)); - let next_value_packed = (index_usize < (1 << P::EXPONENT)) - .then(|| packed_registers.get_register(index + P::NumberOfRegisters::ONE)); - - let prev_value_array = (index_usize > 0) - .then(|| array_registers.get_register(index - P::NumberOfRegisters::ONE)); - let next_value_array = (index_usize < (1 << P::EXPONENT)) - .then(|| array_registers.get_register(index + P::NumberOfRegisters::ONE)); - - // We set the values in all of the registers, and we check that the values are consistent. - let old_value_packed = packed_registers.set_greater(index, value); - let old_value_array = array_registers.set_greater(index, value); - reference[index_usize] = reference[index_usize].max(value); - - assert_eq!( - old_value_packed, old_value_array, - "Failed while trying to set index {} with value {}.", - index, value - ); - - // Then, we check that the before and after values have not been changed. - if let Some(old_value) = prev_value_array { - assert_eq!( - old_value, - array_registers.get_register(index - P::NumberOfRegisters::ONE), - "Failed while trying to set index {} with value {} - Reference value {}.", - index, - value, - reference[index_usize - 1] - ); - } - if let Some(old_value) = next_value_array { - assert_eq!( - old_value, - array_registers.get_register(index + P::NumberOfRegisters::ONE), - "Failed while trying to set index {} with value {} - Reference value {}.", - index, - value, - reference[index_usize + 1] - ); - } - if let Some(old_value) = prev_value_packed { - assert_eq!( - old_value, - packed_registers.get_register(index - P::NumberOfRegisters::ONE), - "Failed while trying to set index {} with value {} - Reference value {}.", - index, - value, - reference[index_usize - 1] - ); - } - if let Some(old_value) = next_value_packed { - assert_eq!( - old_value, - packed_registers.get_register(index + P::NumberOfRegisters::ONE), - "Failed while trying to set index {} with value {} - Reference value {}.", - index, - value, - reference[index_usize + 1] - ); - } - - let largest_value = old_value_array.1; - - assert_eq!( - packed_registers.get_register(index), - array_registers.get_register(index) - ); - - // We check that the values are consistent with the get method. - assert_eq!(array_registers.get_register(index), largest_value); - assert_eq!(packed_registers.get_register(index), largest_value); - } - - // We check that the iterator works as expected. - for (index, value) in array_registers.iter_registers().enumerate() { - assert_eq!( - value, - array_registers - .get_register(P::NumberOfRegisters::try_from_u64(index as u64).unwrap()), - "Failed at index {}.", - index - ); - assert_eq!( - value, reference[index], - "Failed at index {}. Expected value {}.", - index, reference[index] - ); - } - for (index, value) in packed_registers.iter_registers().enumerate() { - assert_eq!( - value, - packed_registers - .get_register(P::NumberOfRegisters::try_from_u64(index as u64).unwrap()), - "Failed at index {}.", - index - ); - assert_eq!( - value, reference[index], - "Failed at index {}. Expected value {}.", - index, reference[index] - ); - } - - for index in 0..(1 << P::EXPONENT) { - let index = P::NumberOfRegisters::try_from_u64(index).unwrap(); - - // We check that the values are consistent with the get method. - assert_eq!( - packed_registers.get_register(index), - array_registers.get_register(index) - ); - } - } - } - - macro_rules! test_register_iterator { - ($precision:ty, $($bits:ty),*) => { - $( - paste::item! { - #[test] - #[cfg(feature = "std")] - fn [< test_registers_self_consistency_ $precision:lower _and_ $bits:lower _bits >]() { - test_registers_self_consistency::<$precision, $bits>(); - } - - #[test] - #[cfg(feature = "std")] - fn [< test_array_register_iterator_ $precision:lower _and_ $bits:lower _bits >]() { - test_register_iterator::<$precision, $bits, <$precision as ArrayRegister<$bits>>::Array>(); - } - - #[test] - #[cfg(feature = "std")] - fn [< test_packed_array_register_iterator_ $precision:lower _and_ $bits:lower _bits >]() { - test_register_iterator::<$precision, $bits, <$precision as ArrayRegister<$bits>>::Packed>(); - } - } - )* - }; - } - - macro_rules! test_register_iterators_by_precision { - ($($precision:ty),*) => { - $( - test_register_iterator!($precision, Bits1, Bits2, Bits3, Bits4, Bits5, Bits6, Bits7, Bits8); - )* - }; - } - - #[cfg(feature = "low_precisions")] - test_register_iterators_by_precision!( - Precision4, - Precision5, - Precision6, - Precision7, - Precision8, - Precision9, - Precision10 - ); - - #[cfg(feature = "medium_precisions")] - test_register_iterators_by_precision!( - Precision11, - Precision12, - Precision13, - Precision14, - Precision15, - Precision16 - ); - - #[cfg(feature = "high_precisions")] - test_register_iterators_by_precision!(Precision17, Precision18); -} diff --git a/src/registers/packed_array.rs b/src/registers/packed_array.rs index c43a96d..c423d64 100644 --- a/src/registers/packed_array.rs +++ b/src/registers/packed_array.rs @@ -55,25 +55,58 @@ use crate::prelude::Precision8; #[cfg(feature = "precision_9")] use crate::prelude::Precision9; +#[allow(unsafe_code)] +#[inline] /// Extracts the register from one or more words at the given offset. /// /// # Arguments /// * `word` - The word array from which the register is to be extracted. -/// * `offset` - The offset at which the register starts. +/// * `offset` - The offset (from the right) at which the register starts. +/// +/// # Implementative details +/// We store the values starting from the left-side of the word, so the offset is the number of bits +/// from the right side of the word at which the register starts. We then shift the word to the right +/// by the offset and apply a mask to extract the register. +/// +/// # Safety +/// This method uses an unsafe conversion from `u64` to `V::Word`, as we do not check +/// whether the value extracted from the word is a valid value for the register type. +/// This is okay because we apply a mask to the value, and it is not possible for the +/// value we cast to be greater than the mask. fn extract_value_from_word(word: u64, offset: u8) -> V::Word { debug_assert!( offset + V::NUMBER_OF_BITS <= 64, "The offset ({offset} + {}) should be less than or equal to 64", V::NUMBER_OF_BITS, ); - V::Word::try_from_u64((word >> offset) & V::MASK).unwrap() + unsafe { V::Word::unchecked_from_u64((word >> (64 - V::NUMBER_OF_BITS - offset)) & V::MASK) } +} + +#[inline] +/// We insert the value into the word at the given offset. +/// +/// # Arguments +/// * `word` - The word in which the value is to be inserted. +/// * `offset` - The offset (from the right) at which the value is to be inserted. +/// * `value` - The value to be inserted. +fn insert_value_into_word(word: &mut u64, offset: u8, value: u64) { + debug_assert!( + offset + V::NUMBER_OF_BITS <= 64, + "The offset ({offset} + {}) should be less than or equal to 64", + V::NUMBER_OF_BITS, + ); + + let flipped_offset = 64 - V::NUMBER_OF_BITS - offset; + *word &= !(V::MASK << flipped_offset); + *word |= value << flipped_offset; } +#[inline] /// Extracts the register from one or more words at the given offset. /// /// # Arguments /// * `word` - The word array from which the register is to be extracted. -/// * `offset` - The offset at which the register starts. +/// * `offset` - The offset (from the right) at which the register starts. fn extract_value_from_words( words: [u64; N], offset: u8, @@ -85,28 +118,68 @@ fn extract_value_from_words( values } -fn insert_value_into_word(word: &mut u64, offset: u8, value: u64) { - *word &= !(V::MASK << offset); - *word |= value << offset; +#[cfg(test)] +/// Test module for the [`extract_value_from_word`], [`extract_value_from_words`] and [`insert_value_into_word`] functions. +mod test_extract_value_from_word { + use super::*; + use crate::prelude::*; + use hyperloglog_derive::test_variable_words; + + #[test_variable_words] + /// Test the extraction of a V::Word from an u64 word. + fn test_extract_value_from_word() { + let mut word = 0_u64; + // We sample 250 random values of the word. + for value in iter_random_values::(V::MASK.min(200), None, None) { + // For each word, we iter all possible offset values. + for offset in 0_u8..=(64_u8 - V::NUMBER_OF_BITS) { + insert_value_into_word::(&mut word, offset, value.into()); + assert_eq!( + extract_value_from_word::(word, offset), + value, + "The value extracted from the word {} at offset {} should be equal to the value {}", + word, + offset, + value + ); + } + } + } } +#[inline] +#[allow(unsafe_code)] /// Returns the number of bits in the upper and lower value of a bridge value. -const fn value_from_bridge(lower_word: u64, upper_word: u64, offset: u8) -> u64 { +/// +/// # Arguments +/// * `lower_word` - The lower word of the bridge value. +/// * `upper_word` - The upper word of the bridge value. +/// * `offset` - The offset (from the right) of the bridge value. +/// +/// # Safety +/// * The method converts in an unchecked manner the value from a `u64` to a `V::Word`. +fn extract_bridge_value_from_word( + lower_word: u64, + upper_word: u64, + offset: u8, +) -> V::Word { debug_assert!(offset != 0, "Offset should be greater than 0"); debug_assert!(offset != 64, "Offset should be less than 64"); debug_assert!( offset > 64 - V::NUMBER_OF_BITS, "Offset should be greater than 64 - V::NUMBER_OF_BITS" ); - let number_of_bits_in_lower_value: u8 = 64 - offset; - let number_of_bits_in_upper_value = V::NUMBER_OF_BITS - number_of_bits_in_lower_value; - let upper_value_mask: u64 = (1 << number_of_bits_in_upper_value) - 1; - let lower_value = lower_word >> offset; + let number_of_high_bits_in_lower_value: u8 = 64 - offset; + let number_of_low_bits_in_upper_value = V::NUMBER_OF_BITS - number_of_high_bits_in_lower_value; + let higher_bits_mask = V::MASK >> number_of_low_bits_in_upper_value; + + let higher_bits = (lower_word & higher_bits_mask) << number_of_low_bits_in_upper_value; + let lower_bits = upper_word >> (64 - number_of_low_bits_in_upper_value); - let upper_value = upper_word & upper_value_mask; + let word = higher_bits | lower_bits; - (upper_value << number_of_bits_in_lower_value) | lower_value + unsafe { V::Word::unchecked_from_u64(word) } } /// Extracts a bridge register from a starting word and an ending word. @@ -115,31 +188,13 @@ fn extract_bridge_value_from_words( upper_word: [u64; N], offset: u8, ) -> [V::Word; N] { - debug_assert!( - offset + V::NUMBER_OF_BITS > 64, - "Offset + bits ({} + {}) should be greater than {}", - offset, - V::NUMBER_OF_BITS, - 64 - ); - debug_assert!(offset <= 64, "Offset {} should be less than {}", offset, 64); let mut values = [V::Word::ZERO; N]; for i in 0..N { - values[i] = - V::Word::try_from_u64(value_from_bridge::(lower_word[i], upper_word[i], offset)) - .unwrap(); + values[i] = extract_bridge_value_from_word::(lower_word[i], upper_word[i], offset); } values } -fn extract_bridge_value_from_word( - lower_word: u64, - upper_word: u64, - offset: u8, -) -> V::Word { - extract_bridge_value_from_words::([lower_word], [upper_word], offset)[0] -} - fn insert_bridge_value_into_word( lower_word: &mut u64, upper_word: &mut u64, @@ -156,13 +211,54 @@ fn insert_bridge_value_into_word( debug_assert!(offset < 64, "Offset {} should be less than {}", offset, 64); + let number_of_lower_bits = V::NUMBER_OF_BITS + offset - 64; + let lower_bits_mask = (1 << number_of_lower_bits) - 1; + let higher_bits_mask = V::MASK >> number_of_lower_bits; + let lower_bits = value & lower_bits_mask; + let higher_bits = value >> number_of_lower_bits; + // First, we clear the bits that will be replaced by the new value. - *lower_word &= !(V::MASK << offset); + *lower_word &= !higher_bits_mask; // Then, we insert the lower part of the new value. - *lower_word |= value << offset; + *lower_word |= higher_bits; // We do the same for the upper part of the new value. - *upper_word &= !(V::MASK >> (64 - offset)); - *upper_word |= value >> (64 - offset); + *upper_word &= !(lower_bits_mask << (64 - number_of_lower_bits)); + *upper_word |= lower_bits << (64 - number_of_lower_bits); +} + +#[cfg(test)] +/// Test module for the [`extract_bridge_value_from_word`], [`extract_bridge_value_from_words`] and [`insert_bridge_value_into_word`] functions. +mod test_extract_bridge_value_from_word { + use super::*; + use crate::prelude::*; + use hyperloglog_derive::test_variable_words; + + #[test_variable_words] + /// Test the extraction of a V::Word from an u64 word. + fn test_extract_bridge_value_from_word() { + let mut lower_word = 0_u64; + let mut upper_word = 0_u64; + // We sample 250 random values of the word. + for value in iter_random_values::(V::MASK.min(200), None, None) { + // For each value, we iter all possible offset values. + for offset in (65_u8 - V::NUMBER_OF_BITS)..64_u8 { + insert_bridge_value_into_word::( + &mut lower_word, + &mut upper_word, + offset, + value.into(), + ); + assert_eq!( + extract_bridge_value_from_words::([lower_word, lower_word], [upper_word, upper_word], offset), + [value, value], + "The value extracted from the word {} at offset {} should be equal to the value {}", + lower_word, + offset, + value + ); + } + } + } } /// Iterator over the registers of two packed arrays. @@ -195,13 +291,17 @@ impl ArrayIter { value_index: 0, word_offset: 0, word_index: 0, - column: arrays.column(0), + column: if N == 0 { + [u64::ZERO; M] + } else { + arrays.column(0) + }, arrays, } } } -/// Implementation of the Iterator trait for [`ArrayIter`]. +/// Implementation of the `Iterator` trait for [`ArrayIter`]. impl<'array, const PACKED: bool, const N: usize, const M: usize, V: VariableWord> Iterator for ArrayIter<&'array Array, M> { @@ -230,7 +330,6 @@ impl<'array, const PACKED: bool, const N: usize, const M: usize, V: VariableWord self.word_offset = V::NUMBER_OF_BITS - (64 - self.word_offset); values } else { - debug_assert!(self.word_offset + V::NUMBER_OF_BITS <= 64, "While iterating on an object of type {}, the offset ({} + {}) should be less than or equal to 64", core::any::type_name::(), self.word_offset, V::NUMBER_OF_BITS); let values = extract_value_from_words::(self.column, self.word_offset); self.word_offset += V::NUMBER_OF_BITS; if self.value_index < self.total_values @@ -245,6 +344,17 @@ impl<'array, const PACKED: bool, const N: usize, const M: usize, V: VariableWord }, ) } + + fn size_hint(&self) -> (usize, Option) { + let remaining_values = self.total_values - self.value_index; + (remaining_values as usize, Some(remaining_values as usize)) + } +} + +/// Implementation of the `ExactSizeIterator` trait for [`ArrayIter`]. +impl<'array, const PACKED: bool, const N: usize, const M: usize, V: VariableWord> ExactSizeIterator + for ArrayIter<&'array Array, M> +{ } #[derive(Debug, Clone, Copy, Eq, PartialEq, Hash)] @@ -275,7 +385,22 @@ impl< #[inline] #[allow(unsafe_code)] fn as_ref(&self) -> &Array { - unsafe { &*(self as *const Array as *const Array) } + unsafe { core::mem::transmute(self) } + } +} + +impl< + const N: usize, + const PACKED1: bool, + const PACKED2: bool, + V1: VariableWord, + V2: VariableWord, + > AsMut> for Array +{ + #[inline] + #[allow(unsafe_code)] + fn as_mut(&mut self) -> &mut Array { + unsafe { &mut *(self as *mut Array as *mut Array) } } } @@ -289,7 +414,7 @@ macro_rules! impl_as_ref_mut { #[allow(unsafe_code)] fn as_ref(&self) -> &[$typ] { let words_u64: &[u64] = self.words.as_ref(); - unsafe { core::slice::from_raw_parts(words_u64.as_ptr() as *const $typ, words_u64.len() * core::mem::size_of::() / core::mem::size_of::<$typ>()) } + unsafe { core::slice::from_raw_parts(words_u64.as_ptr() as *const $typ, words_u64.len() * 8 / core::mem::size_of::<$typ>()) } } } @@ -300,7 +425,7 @@ macro_rules! impl_as_ref_mut { #[allow(unsafe_code)] fn as_mut(&mut self) -> &mut [$typ] { let words_u64: &mut [u64] = self.words.as_mut(); - unsafe { core::slice::from_raw_parts_mut(words_u64.as_mut_ptr() as *mut $typ, words_u64.len() * core::mem::size_of::() / core::mem::size_of::<$typ>()) } + unsafe { core::slice::from_raw_parts_mut(words_u64.as_mut_ptr() as *mut $typ, words_u64.len() * 8 / core::mem::size_of::<$typ>()) } } } )* @@ -309,27 +434,74 @@ macro_rules! impl_as_ref_mut { impl_as_ref_mut!(u8, u16, u32, u64); -impl< - const N: usize, - const PACKED1: bool, - const PACKED2: bool, - V1: VariableWord, - V2: VariableWord, - > AsMut> for Array -{ - #[inline] - #[allow(unsafe_code)] - fn as_mut(&mut self) -> &mut Array { - unsafe { &mut *(self as *mut Array as *mut Array) } - } +macro_rules! impl_as_bytes_ref_mut { + ($($number:expr),*) => { + $( + impl AsRef<[[u8; $number]]> + for Array + { + #[inline] + #[allow(unsafe_code)] + fn as_ref(&self) -> &[[u8; $number]] { + let words_u64: &[u64] = self.words.as_ref(); + unsafe { core::slice::from_raw_parts(words_u64.as_ptr() as *const [u8; $number], words_u64.len() * 8 / $number) } + } + } + + impl AsMut<[[u8; $number]]> + for Array + { + #[inline] + #[allow(unsafe_code)] + fn as_mut(&mut self) -> &mut [[u8; $number]] { + let words_u64: &mut [u64] = self.words.as_mut(); + unsafe { core::slice::from_raw_parts_mut(words_u64.as_mut_ptr() as *mut [u8; $number], words_u64.len() * 8 / $number) } + } + } + )* + }; } +impl_as_bytes_ref_mut!(3, 5, 6, 7); + impl Array { #[inline] fn iter_values(&self, len: u64) -> Map, fn([V::Word; 1]) -> V::Word> { ArrayIter::new([self], len).map(|values| values[0]) } +} + +#[cfg(test)] +mod test_iter_values { + use super::*; + use crate::prelude::*; + use hyperloglog_derive::test_array; + + #[test_array] + /// Test the extraction of a V::Word from an u64 word. + fn test_iter_values( + reference: [V::Word; M], + ) { + let mut array = Array::::default(); + + // We populate the array with the values from the reference. + for (i, value) in reference.iter().enumerate() { + array.set(i as u64, *value); + } + + let iter: Map< + ArrayIter<&Array, 1>, + fn([::Word; 1]) -> ::Word, + > = array.iter_values(M as u64); + assert_eq!(iter.len(), M, "The iterator should have a length of {}", M); + + for (i, (reference_value, array_value)) in reference.iter().zip(iter).enumerate() { + assert_eq!(reference_value, &array_value, "The value ({array_value}) extracted from position ({i}) should be equal to the reference value ({reference_value})."); + } + } +} +impl Array { #[inline] fn iter_values_zipped<'words>( &'words self, @@ -338,15 +510,102 @@ impl Array { ) -> ArrayIter<&'_ Self, 2> { ArrayIter::new([self, other], len) } +} + +#[cfg(test)] +mod test_iter_values_zipped { + use super::*; + use crate::prelude::*; + use hyperloglog_derive::test_array; + + #[test_array] + /// Test the extraction of a V::Word from an u64 word. + fn test_iter_values_zipped< + const M: usize, + const N: usize, + const PACKED: bool, + V: VariableWord, + >( + reference: [V::Word; M], + ) { + let mut array = Array::::default(); + let mut rev_array = Array::::default(); + + // We populate an array with the values from the reference, and + // we populate the reverse array with the values in reverse order. + for (i, value) in reference.iter().enumerate() { + array.set(i as u64, *value); + rev_array.set((M - 1 - i) as u64, *value); + } + + let iter: ArrayIter<&Array, 2> = + array.iter_values_zipped(&rev_array, M as u64); + let swapped_iter: ArrayIter<&Array, 2> = + rev_array.iter_values_zipped(&array, M as u64); + assert_eq!(iter.len(), M, "The iterator should have a length of {}", M); + assert_eq!( + swapped_iter.len(), + M, + "The iterator should have a length of {}", + M + ); + + for (i, (reference_values, (array_value, swapped_array_value))) in (reference + .iter() + .copied() + .zip(reference.iter().copied().rev()) + .map(|(a, b)| [a, b])) + .zip(iter.zip(swapped_iter)) + .enumerate() + { + let swapped_reference = [reference_values[1], reference_values[0]]; + assert_eq!(reference_values, array_value, "The value ({array_value:?}) extracted from position ({i}) should be equal to the reference value ({reference_values:?})."); + assert_eq!(swapped_reference, swapped_array_value, "The value ({swapped_array_value:?}) extracted from position ({i}) should be equal to the reference value ({reference_values:?})."); + } + } +} +impl Array { /// Clears the packed array of registers. #[inline] fn clear(&mut self) { - for word in self.words.iter_mut() { - *word = u64::ZERO; + self.words.fill(0_u64); + } +} + +#[cfg(test)] +mod test_clear_array { + use super::*; + use crate::prelude::*; + use hyperloglog_derive::test_array; + + #[test_array] + /// Test the extraction of a V::Word from an u64 word. + fn test_clear_array( + reference: [V::Word; M], + ) { + let mut array = Array::::default(); + + // We populate the array with the values from the reference. + for (i, value) in reference.iter().enumerate() { + array.set(i as u64, *value); + } + + // We clear the array. + array.clear(); + + // We check that all the values in the array are zero. + for i in 0..M { + assert_eq!( + array.get(i as u64), + V::Word::ZERO, + "The value at position ({i}) should be zero." + ); } } +} +impl Array { #[inline] /// Returns whether a given offset is a bridge offset. const fn is_bridge_offset(offset: u8) -> bool { @@ -356,7 +615,7 @@ impl Array { } #[inline] - /// Returns whether the packed array has padding for a given length. + /// Returns whether the array has padding for a given length. const fn has_padding(len: u64) -> bool { if PACKED { len * V::NUMBER_OF_BITS_U64 < N as u64 * 64 @@ -365,9 +624,26 @@ impl Array { } } + #[inline] + /// Returns the number of values in the array. + const fn number_of_values() -> u64 { + if PACKED { + N as u64 * 64 / V::NUMBER_OF_BITS_U64 + } else { + N as u64 * V::NUMBER_OF_ENTRIES_U64 + } + } + #[inline] /// Returns the value stored at the given index. fn get(&self, index: u64) -> V::Word { + debug_assert!( + index < Self::number_of_values(), + "The index {index} should be less than {} (the number of registers) in an object of type {}", + N as u64 * V::NUMBER_OF_ENTRIES_U64, + core::any::type_name::() + ); + // We determine the word which contains the value and the position of the value, // taking into account the bridge values. let (word_index, relative_value_offset) = split_index::(index); @@ -394,6 +670,29 @@ impl Array { } } + #[inline] + /// Set the value at the given index. + /// + /// # Arguments + /// * `index` - The index at which the value is to be set. + /// * `value` - The value to be set. + pub fn set(&mut self, index: u64, value: V::Word) { + let (word_index, relative_value_offset) = split_index::(index); + + if Self::is_bridge_offset(relative_value_offset) { + let (low, high) = self.words.split_at_mut(word_index + 1); + let low = &mut low[word_index]; + let high = &mut high[0]; + insert_bridge_value_into_word::(low, high, relative_value_offset, value.into()); + } else { + insert_value_into_word::( + &mut self.words[word_index], + relative_value_offset, + value.into(), + ); + } + } + #[inline] /// Applies a function to the value at the given index. /// @@ -558,7 +857,7 @@ pub trait AllArrays: /// Extracts the word position and the relative register offset from the packed index. const fn split_packed_index(index: u64) -> (usize, u8) { let absolute_register_offset: u64 = V::NUMBER_OF_BITS_U64 * index; - let word_index: u64 = absolute_register_offset / 64; + let word_index: u64 = absolute_register_offset >> 6; let relative_register_offset = (absolute_register_offset - word_index * 64) as u8; (word_index as usize, relative_register_offset) } @@ -571,6 +870,69 @@ const fn split_not_packed_index(index: u64) -> (usize, u8) { (word_index as usize, relative_register_offset) } +#[cfg(test)] +/// Test module for the [`split_packed_index`] and [`split_not_packed_index`] functions. +mod test_split_index { + use super::*; + use crate::prelude::*; + use hyperloglog_derive::test_variable_words; + + #[test_variable_words] + /// Test the extraction of the word index and the relative register offset from the packed index. + fn test_split_packed_index() { + let minimum_index = 0_u64; + // The maximal precision is 18, so the maximum number of registers is 2^18, + // hence the maximum index is 2^18 - 1. + let maximum_index = 1_u64 << 18; + // We iter all possible values of the index. + for index in minimum_index..maximum_index { + let expected_word_index = (V::NUMBER_OF_BITS_U64 * index) / 64; + let expected_relative_register_offset = (V::NUMBER_OF_BITS_U64 * index) % 64; + let (word_index, relative_register_offset) = split_packed_index::(index); + assert_eq!( + word_index, expected_word_index as usize, + "The word index {} should be equal to the word index {}", + word_index, expected_word_index + ); + assert_eq!( + relative_register_offset, + expected_relative_register_offset as u8, + "The relative register offset {} should be equal to the relative register offset {}", + relative_register_offset, + expected_relative_register_offset + ); + } + } + + #[test_variable_words] + /// Test the extraction of the word index and the relative register offset from the non-packed index. + fn test_split_not_packed_index() { + let minimum_index = 0_u64; + // The maximal precision is 18, so the maximum number of registers is 2^18, + // hence the maximum index is 2^18 - 1. + let maximum_index = 1_u64 << 18; + // We iter all possible values of the index. + for index in minimum_index..maximum_index { + let expected_word_index = index / V::NUMBER_OF_ENTRIES_U64; + let expected_relative_register_offset = + (index % V::NUMBER_OF_ENTRIES_U64) as u8 * V::NUMBER_OF_BITS; + let (word_index, relative_register_offset) = split_not_packed_index::(index); + assert_eq!( + word_index, expected_word_index as usize, + "The word index {} should be equal to the word index {}", + word_index, expected_word_index + ); + assert_eq!( + relative_register_offset, + expected_relative_register_offset as u8, + "The relative register offset {} should be equal to the relative register offset {}", + relative_register_offset, + expected_relative_register_offset + ); + } + } +} + const fn split_index(index: u64) -> (usize, u8) { if PACKED { split_packed_index::(index) @@ -579,83 +941,6 @@ const fn split_index(index: u64) -> (usize, } } -// impl VariableWords -// for Array -// where -// ::Word: 'static, -// { -// type Iter<'words> = Map, 1>, fn([W::Word; 1]) -> W::Word> where Self: 'words, W: 'words; - -// #[must_use] -// #[inline] -// fn number_of_words(&self) -> usize { -// if PACKED { -// N * 64 / W::NUMBER_OF_BITS_U64 as usize -// } else { -// N * W::NUMBER_OF_ENTRIES_U64 as usize -// } -// } - -// #[must_use] -// #[inline] -// #[allow(unsafe_code)] -// fn find_sorted_with_len(&self, value: W::Word, len: usize) -> bool { -// debug_assert!( -// len <= >::number_of_words(self), -// "The length must be less than or equal to the number of words." -// ); -// debug_assert!( -// >::variable_words(self, len) -// .zip(>::variable_words(self, len).skip(1)) -// .all(|(a, b)| a <= b), -// "The array must be sorted." -// ); - -// // TODO! Actually implement a binary search! -// match core::any::TypeId::of::() { -// t if t == core::any::TypeId::of::() -// || t == core::any::TypeId::of::() -// || t == core::any::TypeId::of::() -// || t == core::any::TypeId::of::() => -// unsafe { W::transmutative_binary_search(self.words.as_slice(), len, value).is_ok() }, -// _ => >::variable_words(self, len).any(|v| v == value), -// } -// } - -// #[must_use] -// #[inline] -// #[allow(unsafe_code)] -// fn sorted_insert_with_len(&mut self, value: W::Word, len: usize) -> bool { -// debug_assert!( -// len <= >::number_of_words(self), -// "The length must be less than or equal to the number of words." -// ); - -// debug_assert!( -// >::variable_words(self, len) -// .zip(>::variable_words(self, len).skip(1)) -// .all(|(a, b)| a <= b), -// "The array must be sorted." -// ); - -// // TODO! Actually implement a binary search! -// match core::any::TypeId::of::() { -// t if t == core::any::TypeId::of::() -// || t == core::any::TypeId::of::() -// || t == core::any::TypeId::of::() -// || t == core::any::TypeId::of::() => -// unsafe { W::transmutative_sorted_insert(self.words.as_mut(), len, value) }, -// _ => todo!(), -// } -// } - -// #[must_use] -// #[inline] -// fn variable_words(&self, len: usize) -> Self::Iter<'_> { -// >>::as_ref(self).iter_values(len as u64) -// } -// } - /// Implement the packed array registers for a specific combination of precision and bits. macro_rules! impl_packed_array_register_for_precision_and_bits { ($exponent: expr, $($bits: expr),*) => { diff --git a/src/sketches.rs b/src/sketches.rs index f44e5f3..0f62dcd 100644 --- a/src/sketches.rs +++ b/src/sketches.rs @@ -59,7 +59,11 @@ pub trait HyperSpheresSketch: Estimator { }); let mut right_difference_cardinality_vector = [N::ZERO; R]; - let mut euc: EstimatedUnionCardinalities = EstimatedUnionCardinalities { left:N::ZERO, right:N::ZERO, union:N::ZERO }; + let mut euc: EstimatedUnionCardinalities = EstimatedUnionCardinalities { + left: N::ZERO, + right: N::ZERO, + union: N::ZERO, + }; let mut last_left_difference = N::ZERO; // Populate the overlap cardinality matrix. @@ -85,7 +89,9 @@ pub trait HyperSpheresSketch: Estimator { } else { delta }; + comulative_row += differential_overlap_cardinality_matrix[i][j]; + debug_assert!(comulative_row >= N::ZERO, "Expected comulative_row to be larger than zero, but it is not. Got: comulative_row: {comulative_row:?}, delta: {delta:?}"); // We always set the value of the right difference so that the // last time we write this will necessarily be with the last @@ -261,7 +267,12 @@ struct EstimatedUnionCardinalities { impl EstimatedUnionCardinalities { /// Returns the estimated cardinality of the intersection of the two sets. fn get_intersection_cardinality(&self) -> F { - self.left + self.right - self.union + let intersection = self.left + self.right - self.union; + debug_assert!( + intersection >= F::ZERO, + "Expected intersection to be larger than zero, but it is not. Got: intersection: {intersection:?}." + ); + intersection } /// Returns the estimated cardinality of the left set minus the right set. diff --git a/src/utils.rs b/src/utils.rs index 0de18a9..14d46a5 100644 --- a/src/utils.rs +++ b/src/utils.rs @@ -18,6 +18,7 @@ mod number; mod random; mod variable_word; mod variable_words; +mod as_bytes; pub use composite_hash::CompositeHash; pub use constants::*; @@ -25,7 +26,8 @@ pub use hasher_type::HasherType; pub use matrix::Matrix; pub(crate) use number::{FloatOps, Number, PositiveInteger}; pub use random::*; -pub use variable_word::{VariableWord, u40, u48, u56}; +pub use as_bytes::AsBytes; +pub use variable_word::{VariableWord, u24, u40, u48, u56}; pub use variable_words::VariableWords; #[cfg(feature = "std")] @@ -73,25 +75,6 @@ pub(crate) const fn ceil(numerator: usize, denominator: usize) -> usize { (numerator + denominator - 1) / denominator } -#[inline] -/// Returns the maximal multiplicity of the registers given the precision and the number of bits. -pub(crate) const fn maximal_multeplicity(precision: u8, bits: u8) -> u8 { - debug_assert!( - precision >= 4, - "The precision must be greater than or equal to 4." - ); - debug_assert!( - precision <= 18, - "The precision must be less than or equal to 16." - ); - - if bits < 6 { - 1 << bits - } else { - 64 - precision - } -} - #[inline] /// Applies a correction to the provided union cardinality estimate. pub(crate) fn correct_union_estimate( diff --git a/src/utils/as_bytes.rs b/src/utils/as_bytes.rs new file mode 100644 index 0000000..ef8e622 --- /dev/null +++ b/src/utils/as_bytes.rs @@ -0,0 +1,73 @@ +//! Submodule providing the trait AsBytes + +/// Trait for an object that can be represented as bytes. +pub trait AsBytes { + /// The bytes representation of the object. + type Bytes; + + /// Returns the bytes representation of the object. + fn as_bytes(self) -> Self::Bytes; +} + +impl AsBytes for u8 { + type Bytes = [u8; 1]; + + #[inline] + fn as_bytes(self) -> Self::Bytes { + [self] + } +} + +impl AsBytes for u16 { + type Bytes = [u8; 2]; + + #[inline] + fn as_bytes(self) -> Self::Bytes { + self.to_be_bytes() + } +} + +impl AsBytes for u32 { + type Bytes = [u8; 4]; + + #[inline] + fn as_bytes(self) -> Self::Bytes { + self.to_be_bytes() + } +} + +impl AsBytes for u64 { + type Bytes = [u8; 8]; + + #[inline] + fn as_bytes(self) -> Self::Bytes { + self.to_be_bytes() + } +} + +#[cfg(test)] +mod tests { + use crate::prelude::*; + use super::*; + + #[test] + fn test_as_bytes() { + let u8_value = 42u8; + let u16_value = 42u16; + let u24_value = u24::from(42_u32); + let u32_value = 42u32; + let u40_value = u40::from(42_u16); + let u48_value = u48::from(42_u16); + let u56_value = u56::from(42_u16); + let u64_value = 42u64; + + assert_eq!(u8_value.as_bytes(), [42]); + assert_eq!(u16_value.as_bytes(), [0, 42]); + assert_eq!(u24_value.as_bytes(), [0, 0, 42]); + assert_eq!(u32_value.as_bytes(), [0, 0, 0, 42]); + assert_eq!(u40_value.as_bytes(), [0, 0, 0, 0, 42]); + assert_eq!(u48_value.as_bytes(), [0, 0, 0, 0, 0, 42]); + assert_eq!(u56_value.as_bytes(), [0, 0, 0, 0, 0, 0, 42]); + assert_eq!(u64_value.as_bytes(), [0, 0, 0, 0, 0, 0, 0, 42]); + } +} \ No newline at end of file diff --git a/src/utils/composite_hash.rs b/src/utils/composite_hash.rs index a34a521..a4e4eb6 100644 --- a/src/utils/composite_hash.rs +++ b/src/utils/composite_hash.rs @@ -64,12 +64,6 @@ macro_rules! impl_composite_hash_all_bits { }; } -macro_rules! impl_composite_hash_everything { - ($w:ty) => { - impl_composite_hash_all_bits!($w, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18); - }; -} - impl_composite_hash!( u8, (4, Bits4), @@ -118,8 +112,28 @@ impl_composite_hash!( (15, Bits1) ); -impl_composite_hash_everything!(u32); -impl_composite_hash_everything!(u40); -impl_composite_hash_everything!(u48); -impl_composite_hash_everything!(u56); -impl_composite_hash_everything!(u64); +impl_composite_hash_all_bits!(u24, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16); + +impl_composite_hash!( + u24, + (17, Bits7), + (17, Bits6), + (17, Bits5), + (17, Bits4), + (17, Bits3), + (17, Bits2), + (17, Bits1), + (18, Bits6), + (18, Bits5), + (18, Bits4), + (18, Bits3), + (18, Bits2), + (18, Bits1) +); + + +impl CompositeHash for u32 {} +impl CompositeHash for u40 {} +impl CompositeHash for u48 {} +impl CompositeHash for u56 {} +impl CompositeHash for u64 {} \ No newline at end of file diff --git a/src/utils/matrix.rs b/src/utils/matrix.rs index 86a97b8..f137dd7 100644 --- a/src/utils/matrix.rs +++ b/src/utils/matrix.rs @@ -6,18 +6,25 @@ pub trait Matrix { fn column(&self, column: usize) -> [T; ROWS]; } -impl Matrix for [R; ROWS] +impl Matrix + for [R; ROWS] where R: AsRef<[T; COLUMNS]>, { #[inline] + #[allow(unsafe_code)] + /// Returns the column of the matrix. + /// + /// # Safety + /// We are guaranteed that the length of the row is equal to the number of columns, + /// hence we can safely use `get_unchecked`. fn column(&self, column: usize) -> [T; ROWS] { debug_assert!(column < COLUMNS); let mut result = [T::default(); ROWS]; for (i, row) in self.iter().enumerate() { debug_assert_eq!(row.as_ref().len(), COLUMNS); - result[i] = row.as_ref()[column]; + result[i] = unsafe { *row.as_ref().get_unchecked(column) }; } result } -} \ No newline at end of file +} diff --git a/src/utils/number.rs b/src/utils/number.rs index 813cff1..a456cd4 100644 --- a/src/utils/number.rs +++ b/src/utils/number.rs @@ -4,7 +4,7 @@ use core::fmt::{Debug, Display}; use core::hash::Hash; use core::ops::{ Add, AddAssign, BitAnd, BitAndAssign, BitOr, BitOrAssign, Div, Mul, Neg, Not, Shl, Shr, Sub, - SubAssign, + SubAssign, Rem }; /// A trait for numbers. @@ -51,6 +51,7 @@ pub trait PositiveInteger: + BitOr + BitOrAssign + Ord + + Rem + Shl + Shr + Hash @@ -106,8 +107,8 @@ macro_rules! impl_number { impl Number for $t { #[inline(always)] fn saturating_zero_sub(self, other: Self) -> Self { - debug_assert!(self >= Self::ZERO); - debug_assert!(other >= Self::ZERO); + debug_assert!(self >= Self::ZERO, "The first number must be positive, got: {}", self); + debug_assert!(other >= Self::ZERO, "The second number must be positive, got: {}", other); if self < other { Self::ZERO } else { @@ -178,33 +179,30 @@ impl FloatOps for f64 { #[cfg(test)] mod test_integer_exp2_minus { use super::*; - use crate::prelude::maximal_multeplicity; #[test] fn test_integer_exp2_minus() { // At the most, we create registers with 6 bits, which // means that the maximum values is 2^7 - 1 = 127. - for precision in 4..=16 { - for bits in 1..=6 { - for register_value in 0..=maximal_multeplicity(precision, bits) { - assert_eq!( - 2.0_f64.powf(-(register_value as f64)), - f64::integer_exp2_minus(register_value as u8), - "Expected: 2^(-{}), Got: {}", - register_value, - f64::integer_exp2_minus(register_value as u8) - ); - assert_eq!( - f64::from_bits( - u64::max_value().wrapping_sub(u64::from(register_value as u64)) << 54 - >> 2 - ), - f64::integer_exp2_minus(register_value as u8), - "Expected: 2^(-{}), Got: {}", - register_value, - f64::integer_exp2_minus(register_value as u8) - ); - } + for bits in 1..=8 { + for register_value in 0..(1 << bits) { + assert_eq!( + 2.0_f64.powf(-(register_value as f64)), + f64::integer_exp2_minus(register_value as u8), + "Expected: 2^(-{}), Got: {}", + register_value, + f64::integer_exp2_minus(register_value as u8) + ); + assert_eq!( + f64::from_bits( + u64::max_value().wrapping_sub(u64::from(register_value as u64)) << 54 + >> 2 + ), + f64::integer_exp2_minus(register_value as u8), + "Expected: 2^(-{}), Got: {}", + register_value, + f64::integer_exp2_minus(register_value as u8) + ); } } } diff --git a/src/utils/random.rs b/src/utils/random.rs index 34ab3c7..b7dc7e5 100644 --- a/src/utils/random.rs +++ b/src/utils/random.rs @@ -1,5 +1,7 @@ //! Random number generators. +use super::{One, Zero, PositiveInteger, VariableWord}; + #[must_use] #[inline] /// `SplitMix64` is a pseudorandom number generator that is very fast and has a good quality of randomness. @@ -21,37 +23,72 @@ pub fn xorshift64(mut x: u64) -> u64 { } #[inline] +#[allow(unsafe_code)] /// Returns an iterator over random values. /// /// # Arguments +/// * `minimal_size` - The minimal size of the iterator. /// * `maximal_size` - The maximal size of the iterator. -/// * `maximal_value` - The maximal value of the iterator. +/// * `maximal_value` - The maximal value of the iterator, by default `V::MASK` (the maximal value of the variable). /// * `random_state` - The random state. /// /// # Panics -/// Panics if the maximal size is greater than `u64::MAX`. -pub fn iter_random_values( - maximal_size: usize, - maximal_value: Option, - mut random_state: u64, -) -> impl Iterator { - random_state = splitmix64(splitmix64(random_state)); - - let actual_maximal_size = if maximal_size > 0 { - random_state % u64::try_from(maximal_size).unwrap() - } else { - 0 - }; - - random_state = splitmix64(splitmix64(random_state)); - let actual_maximal_value = maximal_value.map_or(u64::MAX, |mv| xorshift64(random_state) % mv); - (0..actual_maximal_size).map(move |_| { - random_state = splitmix64(splitmix64(random_state)); - random_state = xorshift64(random_state); - if actual_maximal_value > 0 { - random_state % actual_maximal_value - } else { - 0 - } +/// * Panics if the maximal value provided is zero. +/// +/// # Safety +/// We employ unchecked conversion from `u64` to `V::Word` to avoid the overhead of checking +/// if the value is within the bounds of the variable. This is safe because we ensure that +/// the value is within the bounds of the variable by using the `V::MASK` to mask the value. +pub fn iter_var_len_random_values( + minimal_size: u64, + maximal_size: u64, + maximal_value: Option, + random_state: Option, +) -> impl Iterator { + assert!(minimal_size <= maximal_size, "The minimal size ({minimal_size}) must be less than or equal to the maximal size ({maximal_size})."); + assert!( + maximal_value.as_ref().map_or(true, |mv| !mv.is_zero()), + "The maximal value must be provided if the variable mask is zero." + ); + + let delta = maximal_size - minimal_size; + + let mut state = random_state.unwrap_or(12_834_791_235_231_473_875_u64); + + state = splitmix64(state); + + let size = minimal_size + if delta > 0 { state % delta } else { 0 }; + + state = splitmix64(state); + let actual_maximal_value: V::Word = maximal_value.map_or( + unsafe { V::Word::unchecked_from_u64(V::MASK) }, + |mv| unsafe { + V::Word::ONE + V::Word::unchecked_from_u64(xorshift64(state) & V::MASK) % mv + }, + ); + state = splitmix64(state); + + (0..size).map(move |_| { + state = xorshift64(state); + unsafe { V::Word::unchecked_from_u64(state & V::MASK) % actual_maximal_value } }) } + +#[inline] +/// Returns an iterator over random values. +/// +/// # Arguments +/// * `size` - The size of the iterator. +/// * `maximal_value` - The maximal value of the iterator. +/// * `random_state` - The random state. If None, a strong random state is used. +/// +/// # Panics +/// Panics if the maximal size is greater than `u64::MAX`. +/// Panics if the minimal size is greater than the maximal size. +pub fn iter_random_values( + size: u64, + maximal_value: Option, + random_state: Option, +) -> impl Iterator { + iter_var_len_random_values::(size, size, maximal_value, random_state) +} diff --git a/src/utils/variable_word.rs b/src/utils/variable_word.rs index 2c52b0c..7cf11f7 100644 --- a/src/utils/variable_word.rs +++ b/src/utils/variable_word.rs @@ -18,9 +18,14 @@ pub trait VariableWord: Send + Sync + Clone + Copy + Debug + Default { /// The mask for the word. const MASK: u64; /// The word type. - type Word: PositiveInteger + TryInto + TryInto + TryInto + TryInto; + type Word: PositiveInteger + TryInto + TryInto + TryInto; } +/// Virtual word with 24 bits. +#[allow(non_camel_case_types)] +#[derive(VariableWord)] +pub struct u24(u32); + /// Virtual word with 40 bits. #[allow(non_camel_case_types)] #[derive(VariableWord)] @@ -58,4 +63,4 @@ impl VariableWord for u64 { const NUMBER_OF_BITS: u8 = 64; type Word = u64; const MASK: u64 = 0xFFFF_FFFF_FFFF_FFFF; -} \ No newline at end of file +} diff --git a/src/utils/variable_words.rs b/src/utils/variable_words.rs index c1edfd3..bd45923 100644 --- a/src/utils/variable_words.rs +++ b/src/utils/variable_words.rs @@ -1,12 +1,12 @@ //! Submodule for words-arrays -use super::VariableWord; -use core::iter::Copied; +use super::{u24, u40, u48, u56, VariableWord}; +use core::iter::{Copied, Map}; use core::slice::Iter; /// Trait for arrays of words. pub trait VariableWords { /// The type of the iterator over the words. - type Iter<'words>: Iterator + type Iter<'words>: ExactSizeIterator where W: 'words, Self: 'words; @@ -27,14 +27,50 @@ pub trait VariableWords { } /// Trait for arrays of words. -pub trait Words: AsRef<[W::Word]> + AsMut<[W::Word]> {} -impl + AsMut<[u8]>> Words for T {} -impl + AsMut<[u16]>> Words for T {} -impl + AsMut<[u32]>> Words for T {} -impl + AsMut<[u64]>> Words for T {} +pub trait Words: + AsRef<[>::SliceType]> + AsMut<[>::SliceType]> +where + W::Word: From<>::SliceType>, + W::Word: Into<>::SliceType>, +{ + type SliceType: Ord + Copy; +} +impl + AsMut<[u8]>> Words for T { + type SliceType = u8; +} +impl + AsMut<[u16]>> Words for T { + type SliceType = u16; +} +impl + AsMut<[[u8; 3]]>> Words for T { + type SliceType = [u8; 3]; +} +impl + AsMut<[u32]>> Words for T { + type SliceType = u32; +} +impl + AsMut<[[u8; 5]]>> Words for T { + type SliceType = [u8; 5]; +} +impl + AsMut<[[u8; 6]]>> Words for T { + type SliceType = [u8; 6]; +} +impl + AsMut<[[u8; 7]]>> Words for T { + type SliceType = [u8; 7]; +} +impl + AsMut<[u64]>> Words for T { + type SliceType = u64; +} -impl, W: VariableWord> VariableWords for WS { - type Iter<'words> = Copied> where Self: 'words, W: 'words; +impl, W: VariableWord> VariableWords for WS +where + W::Word: From<>::SliceType>, + W::Word: Into<>::SliceType>, +{ + type Iter<'words> = Map< + Copied>::SliceType>>, + fn(>::SliceType) -> W::Word, + > where + W: 'words, + Self: 'words; fn number_of_words(&self) -> usize { self.as_ref().len() @@ -49,7 +85,8 @@ impl, W: VariableWord> VariableWords for WS { self.as_ref()[0..len].windows(2).all(|w| w[0] < w[1]), "The array must be strictly sorted, i.e. sorted with no duplicates." ); - self.as_ref()[0..len].binary_search(&value).is_ok() + let slice_type: >::SliceType = value.into(); + self.as_ref()[0..len].binary_search(&slice_type).is_ok() } fn sorted_insert_with_len(&mut self, value: W::Word, len: usize) -> bool { @@ -64,11 +101,12 @@ impl, W: VariableWord> VariableWords for WS { "The array must be strictly sorted, i.e. sorted with no duplicates." ); - match self.as_mut()[0..len].binary_search(&value) { + let slice_type: >::SliceType = value.into(); + match self.as_mut()[0..len].binary_search(&slice_type) { Ok(_) => false, Err(index) => { self.as_mut()[index..=len].rotate_right(1); - self.as_mut()[index] = value; + self.as_mut()[index] = slice_type; true } } @@ -78,7 +116,7 @@ impl, W: VariableWord> VariableWords for WS { where W: 'words, { - self.as_ref()[0..len].iter().copied() + self.as_ref()[0..len].iter().copied().map(W::Word::from) } } diff --git a/statistical_comparisons/benches/cardinality.rs b/statistical_comparisons/benches/cardinality.rs index 80b6401..4d8d53f 100644 --- a/statistical_comparisons/benches/cardinality.rs +++ b/statistical_comparisons/benches/cardinality.rs @@ -24,7 +24,7 @@ fn cardinality_bencher< .map(|_| { let mut counter = H::default(); random_state = splitmix64(random_state); - for value in iter_random_values(NUMBER_OF_ELEMENTS, None, random_state) { + for value in iter_var_len_random_values(NUMBER_OF_ELEMENTS, None, random_state) { counter.insert(&value); } counter diff --git a/statistical_comparisons/benches/insert.rs b/statistical_comparisons/benches/insert.rs index 8c5847e..f117775 100644 --- a/statistical_comparisons/benches/insert.rs +++ b/statistical_comparisons/benches/insert.rs @@ -18,7 +18,7 @@ fn insert_bencher< b.bench_function(format!("Insert {}", H::default().name()).as_str(), |b| { b.iter(|| { let mut hll: H = Default::default(); - for i in iter_random_values(NUMBER_OF_ELEMENTS, None, RANDOM_STATE) { + for i in iter_var_len_random_values(NUMBER_OF_ELEMENTS, None, RANDOM_STATE) { hll.insert(black_box(&i)); } }) diff --git a/statistical_comparisons/benches/union.rs b/statistical_comparisons/benches/union.rs index 06bfd9a..d55539c 100644 --- a/statistical_comparisons/benches/union.rs +++ b/statistical_comparisons/benches/union.rs @@ -26,7 +26,7 @@ fn union_bencher< let mut left = H::default(); let mut right = H::default(); random_state = splitmix64(random_state); - for value in iter_random_values(NUMBER_OF_ELEMENTS, None, random_state) { + for value in iter_var_len_random_values(NUMBER_OF_ELEMENTS, None, random_state) { if value % 2 == 0 { left.insert(&value); } diff --git a/statistical_comparisons/macro_test_utils/tests/test_derives.rs b/statistical_comparisons/macro_test_utils/tests/test_derives.rs index a75ac60..93ac32e 100644 --- a/statistical_comparisons/macro_test_utils/tests/test_derives.rs +++ b/statistical_comparisons/macro_test_utils/tests/test_derives.rs @@ -24,10 +24,6 @@ impl Estimator for TestNamedA { fn estimate_union_cardinality(&self, _other: &Self) -> f64 { 0.0 } - - fn is_union_estimate_non_deterministic(&self, _other: &Self) -> bool { - false - } } #[derive(Default)] @@ -53,10 +49,6 @@ impl Estimator for TestNamedB { fn estimate_union_cardinality(&self, _other: &Self) -> f64 { 0.0 } - - fn is_union_estimate_non_deterministic(&self, _other: &Self) -> bool { - false - } } #[test] diff --git a/statistical_comparisons/src/estimation_tests.rs b/statistical_comparisons/src/estimation_tests.rs index c18ee0d..6008416 100644 --- a/statistical_comparisons/src/estimation_tests.rs +++ b/statistical_comparisons/src/estimation_tests.rs @@ -80,7 +80,7 @@ pub(crate) fn cardinality_test< let mut current_sample_rate = minimum_sample_interval; - for (i, element) in iter_random_values(2_000_000, None, random_state).enumerate() { + for (i, element) in iter_var_len_random_values(2_000_000, None, random_state).enumerate() { estimator.insert(&element); if u64::try_from(i).unwrap() % current_sample_rate == 0 { @@ -144,8 +144,8 @@ pub(crate) fn union_test< right_random_state.wrapping_mul(thread_number + 1), )); - let mut left_iter = iter_random_values(2_000_000, Some(1_000_000), left_random_state); - let mut right_iter = iter_random_values(2_000_000, Some(1_000_000), right_random_state); + let mut left_iter = iter_var_len_random_values(2_000_000, Some(1_000_000), left_random_state); + let mut right_iter = iter_var_len_random_values(2_000_000, Some(1_000_000), right_random_state); let mut current_sample_rate = minimum_sample_interval; diff --git a/statistical_comparisons/src/proxy_implementations.rs b/statistical_comparisons/src/proxy_implementations.rs index 79fa5e1..94908b6 100644 --- a/statistical_comparisons/src/proxy_implementations.rs +++ b/statistical_comparisons/src/proxy_implementations.rs @@ -281,10 +281,6 @@ impl Estimator for SimpleHLL

{ copy.estimator.merge(&other.estimator); copy.estimator.count() as f64 } - - fn is_union_estimate_non_deterministic(&self, _other: &Self) -> bool { - false - } } impl Estimator for CloudFlareHLL { @@ -305,10 +301,6 @@ impl Estimator for CloudFlar copy.estimator.merge(&other.estimator); copy.estimator.estimate() as f64 } - - fn is_union_estimate_non_deterministic(&self, _other: &Self) -> bool { - true - } } impl Estimator for HyperTwoBits { @@ -329,10 +321,6 @@ impl Estimator for Hype copy.estimator.merge(other.estimator.clone()); copy.estimator.count() as f64 } - - fn is_union_estimate_non_deterministic(&self, _other: &Self) -> bool { - false - } } impl Estimator for HyperThreeBits { @@ -353,10 +341,6 @@ impl Estimator for Hype copy.estimator.merge(other.estimator.clone()); copy.estimator.count() as f64 } - - fn is_union_estimate_non_deterministic(&self, _other: &Self) -> bool { - false - } } impl Estimator for SourMash

{ @@ -375,10 +359,6 @@ impl Estimator for SourMash

{ fn estimate_union_cardinality(&self, other: &Self) -> f64 { self.estimator.union(&other.estimator) as f64 } - - fn is_union_estimate_non_deterministic(&self, _other: &Self) -> bool { - false - } } impl Estimator for RustHLL

{ @@ -391,10 +371,6 @@ impl Estimator for RustHLL

{ copy.estimator.merge(&other.estimator); copy.estimator.len() } - - fn is_union_estimate_non_deterministic(&self, _other: &Self) -> bool { - false - } } impl Estimator for TabacHLLPlusPlus

{ @@ -407,10 +383,6 @@ impl Estimator for TabacHLLPlusPlus

{ copy.estimator.merge(&other.estimator).unwrap(); copy.estimator.count() } - - fn is_union_estimate_non_deterministic(&self, _other: &Self) -> bool { - false - } } impl Estimator for TabacHLL

{ @@ -423,10 +395,6 @@ impl Estimator for TabacHLL

{ copy.estimator.merge(&self.estimator).unwrap(); copy.estimator.count() } - - fn is_union_estimate_non_deterministic(&self, _other: &Self) -> bool { - false - } } impl Estimator for AlecHLL

{ @@ -439,8 +407,4 @@ impl Estimator for AlecHLL

{ copy.estimator.union(&other.estimator); copy.estimator.len() } - - fn is_union_estimate_non_deterministic(&self, _other: &Self) -> bool { - false - } } diff --git a/tests/test_hll.rs b/tests/test_hll.rs index b9010c0..3c625a5 100644 --- a/tests/test_hll.rs +++ b/tests/test_hll.rs @@ -1,3 +1,4 @@ +use hyperloglog_derive::test_estimator; use hyperloglog_rs::prelude::*; use twox_hash::XxHash; use wyhash::WyHash; @@ -5,9 +6,7 @@ use wyhash::WyHash; /// Test the HyperLogLog implementation with the provided precision and bits pub fn test_approximated_counter_at_precision_and_bits< P: Precision, - B: Bits, H: ExtendableApproximatedSet + Estimator + Default, - Hasher: HasherType, >() { let number_of_elements = 200_000; let mut total_cardinality_error_rate = 0.0; @@ -36,8 +35,13 @@ pub fn test_approximated_counter_at_precision_and_bits< let mut cardinality_sampling_rate = starting_cardinality_sampling_rate; let mut union_sampling_rate = starting_union_sampling_rate; - for (i, element) in - iter_random_values(number_of_elements, Some(1_000_000), left_random_state).enumerate() + for (i, element) in iter_var_len_random_values::( + 0, + number_of_elements, + Some(1_000_000), + Some(left_random_state), + ) + .enumerate() { if i % 2 == 0 { left.insert(&element); @@ -50,7 +54,8 @@ pub fn test_approximated_counter_at_precision_and_bits< if i % cardinality_sampling_rate == 0 { if cardinality_sampling_rate < maximal_cardinality_sampling_rate { left_random_state = splitmix64(left_random_state); - cardinality_sampling_rate += left_random_state as usize % cardinality_sampling_rate; + cardinality_sampling_rate += + left_random_state as usize % cardinality_sampling_rate; } let estimated_cardinality = left.estimate_cardinality(); let exact_cardinality = exact_left.len() as f64; @@ -88,13 +93,12 @@ pub fn test_approximated_counter_at_precision_and_bits< assert!( mean_error_rate <= P::error_rate(), concat!( - "Cardinality error rate ({}) over {} samples is higher than expected ({}) for a precision of {} and bits {}.", + "Cardinality error rate ({}) over {} samples is higher than expected ({}) for a precision of {}.", ), mean_error_rate, total_cardinality_samples, P::error_rate(), P::EXPONENT, - B::NUMBER_OF_BITS ); let mean_union_error_rate = total_union_error_rate / total_union_samples as f64; @@ -102,126 +106,101 @@ pub fn test_approximated_counter_at_precision_and_bits< assert!( mean_union_error_rate <= P::error_rate(), concat!( - "Union error rate ({}) (cardinalty was: {}) over {} samples is higher than the expected error rate ({}) for a precision of {} and bits {}.", + "Union error rate ({}) (cardinalty was: {}) over {} samples is higher than the expected error rate ({}) for a precision of {}.", ), mean_union_error_rate, mean_error_rate, total_union_samples, P::error_rate(), P::EXPONENT, - B::NUMBER_OF_BITS ); } -/// Macro to generate a range of tests with the provided lists of precisions, bits and register types -macro_rules! test_hll_at_precision_and_bits_and_register { - ($precision:ty, $hasher:ty, $bits:ty, $($register:ty),*) => { - $( - paste::item! { - #[test] - #[cfg(feature = "plusplus")] - pub fn [< test_plusplus_at_ $precision:lower _and_ $bits:lower _bits_and_ $hasher:lower _and_ $register:lower>]() { - test_approximated_counter_at_precision_and_bits::<$precision, $bits, PlusPlus<$precision, $bits, $register, $hasher>, $hasher>(); - } - #[test] - #[cfg(feature = "beta")] - pub fn [< test_beta_at_ $precision:lower _and_ $bits:lower _bits_and_ $hasher:lower _and_ $register:lower>]() { - test_approximated_counter_at_precision_and_bits::<$precision, $bits, LogLogBeta<$precision, $bits, $register, $hasher>, $hasher>(); - } - #[test] - #[cfg(feature = "plusplus")] - pub fn [< test_hybrid_plusplus_at_ $precision:lower _and_ $bits:lower _bits_and_ $hasher:lower _and_ $register:lower>]() { - test_approximated_counter_at_precision_and_bits::<$precision, $bits, Hybrid>, $hasher>(); - } - #[test] - #[cfg(feature = "beta")] - pub fn [< test_hybrid_beta_at_ $precision:lower _and_ $bits:lower _bits_and_ $hasher:lower _and_ $register:lower>]() { - test_approximated_counter_at_precision_and_bits::<$precision, $bits, Hybrid>, $hasher>(); - } - #[test] - #[cfg(all(feature = "mle", feature = "plusplus"))] - pub fn [< test_mleplusplus_at_ $precision:lower _and_ $bits:lower _bits_and_ $hasher:lower _and_ $register:lower>]() { - test_approximated_counter_at_precision_and_bits::<$precision, $bits, MLE>, $hasher>(); - } - #[test] - #[cfg(all(feature = "mle", feature = "beta"))] - pub fn [< test_mlebeta_at_ $precision:lower _and_ $bits:lower _bits_and_ $hasher:lower _and_ $register:lower>]() { - test_approximated_counter_at_precision_and_bits::<$precision, $bits, MLE>, $hasher>(); - } - #[test] - #[cfg(all(feature = "mle", feature = "plusplus"))] - pub fn [< test_hybrid_mleplusplus_at_ $precision:lower _and_ $bits:lower _bits_and_ $hasher:lower _and_ $register:lower>]() { - test_approximated_counter_at_precision_and_bits::<$precision, $bits, Hybrid>>, $hasher>(); - } - #[test] - #[cfg(all(feature = "mle", feature = "beta"))] - pub fn [< test_hybrid_mlebeta_at_ $precision:lower _and_ $bits:lower _bits_and_ $hasher:lower _and_ $register:lower>]() { - test_approximated_counter_at_precision_and_bits::<$precision, $bits, Hybrid>>, $hasher>(); - } - } - )* - } +#[test_estimator] +fn test_plusplus, H: HasherType>() { + test_approximated_counter_at_precision_and_bits::>(); } -/// Macro to generate a range of tests with the provided lists of precisions and bits -macro_rules! test_hll_at_precision_and_bits { - ($precision:ty, $hasher:ty, $($bits:ty),*) => { - $( - paste::paste!{ - type [] = <$precision as ArrayRegister<$bits>>::Array; - type [] = <$precision as ArrayRegister<$bits>>::Packed; - test_hll_at_precision_and_bits_and_register!($precision, $hasher, $bits, [], []); - } - )* - }; +#[test_estimator] +fn test_beta, H: HasherType>() { + test_approximated_counter_at_precision_and_bits::>(); +} + +#[test_estimator] +#[cfg(feature = "mle")] +fn test_mle_plusplus, H: HasherType>() { + test_approximated_counter_at_precision_and_bits::>>(); } -/// Macro to generate a range of tests with the provided lists of precisions -macro_rules! test_hll_at_precision_and_hashers { - ($precision:ty, $($hasher:ty),*) => { - $( - test_hll_at_precision_and_bits!($precision, $hasher, Bits4, Bits5, Bits6, Bits7, Bits8); - )* - }; +#[test_estimator] +#[cfg(feature = "mle")] +fn test_mle_beta, H: HasherType>() { + test_approximated_counter_at_precision_and_bits::>>(); } -/// Macro to generate a range of tests with the provided lists of precisions -macro_rules! test_hll_at_precisions { - ($($precision:ty),*) => { - $( - test_hll_at_precision_and_hashers!($precision, XxHash); - test_hll_at_precision_and_hashers!($precision, WyHash); - )* - }; +#[test_estimator] +fn test_hybrid_plusplus< + P: Precision, + B: Bits, + R: Registers + + VariableWords + + VariableWords + + VariableWords + + VariableWords + + VariableWords, + H: HasherType, +>() { + test_approximated_counter_at_precision_and_bits::, u32>>(); + test_approximated_counter_at_precision_and_bits::, u40>>(); + test_approximated_counter_at_precision_and_bits::, u48>>(); + test_approximated_counter_at_precision_and_bits::, u56>>(); + test_approximated_counter_at_precision_and_bits::, u64>>(); +} + +#[test_estimator] +fn test_hybrid_beta< + P: Precision, + B: Bits, + R: Registers + + VariableWords + + VariableWords + + VariableWords + + VariableWords + + VariableWords, + H: HasherType, +>() { + test_approximated_counter_at_precision_and_bits::, u32>>(); + test_approximated_counter_at_precision_and_bits::, u40>>(); + test_approximated_counter_at_precision_and_bits::, u48>>(); + test_approximated_counter_at_precision_and_bits::, u56>>(); + test_approximated_counter_at_precision_and_bits::, u64>>(); } -#[cfg(feature = "precision_4")] -test_hll_at_precisions!(Precision4); -#[cfg(feature = "precision_5")] -test_hll_at_precisions!(Precision5); -#[cfg(feature = "precision_6")] -test_hll_at_precisions!(Precision6); -#[cfg(feature = "precision_7")] -test_hll_at_precisions!(Precision7); -#[cfg(feature = "precision_8")] -test_hll_at_precisions!(Precision8); -#[cfg(feature = "precision_9")] -test_hll_at_precisions!(Precision9); -#[cfg(feature = "precision_10")] -test_hll_at_precisions!(Precision10); -#[cfg(feature = "precision_11")] -test_hll_at_precisions!(Precision11); -#[cfg(feature = "precision_12")] -test_hll_at_precisions!(Precision12); -#[cfg(feature = "precision_13")] -test_hll_at_precisions!(Precision13); -#[cfg(feature = "precision_14")] -test_hll_at_precisions!(Precision14); -#[cfg(feature = "precision_15")] -test_hll_at_precisions!(Precision15); -#[cfg(feature = "precision_16")] -test_hll_at_precisions!(Precision16); -#[cfg(feature = "precision_17")] -test_hll_at_precisions!(Precision17); -#[cfg(feature = "precision_18")] -test_hll_at_precisions!(Precision18); +#[test] +#[cfg(feature = "plusplus")] +fn test_hybrid_plusplus_low_bits_hash() { + test_approximated_counter_at_precision_and_bits::< + Precision4, + Hybrid>::Array, XxHash>, u8>, + >(); + test_approximated_counter_at_precision_and_bits::< + Precision4, + Hybrid>::Array, XxHash>, u16>, + >(); + test_approximated_counter_at_precision_and_bits::< + Precision4, + Hybrid>::Array, XxHash>, u24>, + >(); + test_approximated_counter_at_precision_and_bits::< + Precision4, + Hybrid>::Packed, XxHash>, u8>, + >(); + test_approximated_counter_at_precision_and_bits::< + Precision4, + Hybrid>::Packed, XxHash>, u16>, + >(); + test_approximated_counter_at_precision_and_bits::< + Precision4, + Hybrid>::Packed, XxHash>, u24>, + >(); +} \ No newline at end of file