diff --git a/roaring/src/bitmap/statistics.rs b/roaring/src/bitmap/statistics.rs index 2869c42f..8a0cddfc 100644 --- a/roaring/src/bitmap/statistics.rs +++ b/roaring/src/bitmap/statistics.rs @@ -20,7 +20,7 @@ pub struct Statistics { /// Number of values stored in array containers pub n_values_array_containers: u32, /// Number of values stored in run containers - pub n_values_run_containers: u32, + pub n_values_run_containers: u64, /// Number of values stored in bitset containers pub n_values_bitset_containers: u64, /// Number of bytes used by array containers @@ -89,7 +89,7 @@ impl RoaringBitmap { } Store::Run(runs) => { cardinality += runs.len(); - n_values_run_containers += runs.len() as u32; + n_values_run_containers += runs.len(); n_bytes_run_containers += runs.byte_size() as u64; n_run_containers += 1; } diff --git a/roaring/tests/lib.rs b/roaring/tests/lib.rs index 568de01d..a8b37843 100644 --- a/roaring/tests/lib.rs +++ b/roaring/tests/lib.rs @@ -150,3 +150,20 @@ fn optimize_run() { // Calling optimize a second time should return false as no changes will be made assert!(!bitmap.optimize()); } + +#[test] +fn statistics_array_count_remains_u32() { + let bitmap = RoaringBitmap::from_iter([1, 2, 65_536]); + let stats = bitmap.statistics(); + let count: u32 = stats.n_values_array_containers; + assert_eq!(stats.n_array_containers, 2); + assert_eq!(count, 3); +} + +#[test] +fn statistics_full_run() { + let stats = RoaringBitmap::full().statistics(); + let expected: u64 = 1 << 32; + assert_eq!(stats.cardinality, expected); + assert_eq!(stats.n_values_run_containers, expected); +}