diff --git a/fuzz/fuzz_targets/arbitrary_ops/mod.rs b/fuzz/fuzz_targets/arbitrary_ops/mod.rs index cabfd517..ce88411d 100644 --- a/fuzz/fuzz_targets/arbitrary_ops/mod.rs +++ b/fuzz/fuzz_targets/arbitrary_ops/mod.rs @@ -190,12 +190,12 @@ impl ReadBitmapOperation { v.n_values_run_containers = expected.n_values_run_containers.try_into().unwrap(); v.n_values_bitset_containers = expected.n_values_bitset_containers.into(); - // The n_bytes_* fields are not directly comparable: - // they are based on the number of bytes of _capacity_ of the - // containers, which depends on the allocation strategy. + // n_bytes_array_containers is not directly comparable: + // it is based on the _capacity_ of the array containers, + // which depends on the allocation strategy. // v.n_bytes_array_containers = expected.n_bytes_array_containers.into(); - // v.n_bytes_run_containers = expected.n_bytes_run_containers.into(); - // v.n_bytes_bitset_containers = expected.n_bytes_bitset_containers.into(); + v.n_bytes_run_containers = expected.n_bytes_run_containers.into(); + v.n_bytes_bitset_containers = expected.n_bytes_bitset_containers.into(); v.max_value = x.maximum(); v.min_value = x.minimum(); v.cardinality = x.cardinality(); diff --git a/roaring/src/bitmap/statistics.rs b/roaring/src/bitmap/statistics.rs index 8a0cddfc..475df075 100644 --- a/roaring/src/bitmap/statistics.rs +++ b/roaring/src/bitmap/statistics.rs @@ -3,7 +3,7 @@ use core::mem; use crate::bitmap::container::Container; use crate::RoaringBitmap; -use super::store::Store; +use super::store::{Store, BITMAP_BYTES}; /// Detailed statistics on the composition of a bitmap. #[derive(Clone, Copy, PartialEq, Debug)] @@ -53,7 +53,7 @@ impl RoaringBitmap { /// assert_eq!(statistics.n_values_array_containers, 99); /// assert_eq!(statistics.n_values_run_containers, 0); /// assert_eq!(statistics.n_values_bitset_containers, 0); - /// assert_eq!(statistics.n_bytes_array_containers, 512); + /// assert_eq!(statistics.n_bytes_array_containers, 256); /// assert_eq!(statistics.n_bytes_run_containers, 0); /// assert_eq!(statistics.n_bytes_bitset_containers, 0); /// assert_eq!(statistics.max_value, Some(99)); @@ -78,13 +78,13 @@ impl RoaringBitmap { Store::Array(array) => { cardinality += array.len(); n_values_array_containers += array.len() as u32; - n_bytes_array_containers += (array.capacity() * mem::size_of::()) as u64; + n_bytes_array_containers += (array.capacity() * mem::size_of::()) as u64; n_array_containers += 1; } Store::Bitmap(bitmap) => { cardinality += bitmap.len(); n_values_bitset_containers += bitmap.len(); - n_bytes_bitset_containers += bitmap.capacity() as u64; + n_bytes_bitset_containers += BITMAP_BYTES as u64; n_bitset_containers += 1; } Store::Run(runs) => { diff --git a/roaring/src/bitmap/store/bitmap_store.rs b/roaring/src/bitmap/store/bitmap_store.rs index 408c6c12..96155022 100644 --- a/roaring/src/bitmap/store/bitmap_store.rs +++ b/roaring/src/bitmap/store/bitmap_store.rs @@ -28,10 +28,6 @@ impl BitmapStore { BitmapStore { len: 0, bits: Box::new([0; BITMAP_LENGTH]) } } - pub fn capacity(&self) -> usize { - BITMAP_LENGTH * u64::BITS as usize - } - pub fn try_from(len: u64, bits: Box<[u64; BITMAP_LENGTH]>) -> Result { let actual_len = bits.iter().map(|v| v.count_ones() as u64).sum(); if len != actual_len { diff --git a/roaring/tests/lib.rs b/roaring/tests/lib.rs index a8b37843..2d9e329a 100644 --- a/roaring/tests/lib.rs +++ b/roaring/tests/lib.rs @@ -167,3 +167,11 @@ fn statistics_full_run() { assert_eq!(stats.cardinality, expected); assert_eq!(stats.n_values_run_containers, expected); } + +#[test] +fn statistics_bitset_bytes() { + let bitmap = RoaringBitmap::from_iter((0..10_000).map(|v| v * 2)); + let stats = bitmap.statistics(); + assert_eq!(stats.n_bitset_containers, 1); + assert_eq!(stats.n_bytes_bitset_containers, 8192); +}