添加动态申请的bitmap (#532)

This commit is contained in:
LoGin 2024-02-19 19:50:03 +08:00 committed by GitHub
parent 0e2c2e8b48
commit b2ca6800f9
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 823 additions and 64 deletions

View File

@ -0,0 +1,109 @@
use alloc::vec::Vec;
use crate::{bitmap_core::BitMapCore, traits::BitMapOps};
pub struct AllocBitmap {
elements: usize,
data: Vec<usize>,
core: BitMapCore<usize>,
}
impl AllocBitmap {
pub fn new(elements: usize) -> Self {
let data = vec![0usize; (elements + usize::BITS as usize - 1) / (usize::BITS as usize)];
Self {
elements,
data,
core: BitMapCore::new(),
}
}
}
impl BitMapOps<usize> for AllocBitmap {
#[inline]
fn get(&self, index: usize) -> Option<bool> {
return self.core.get(self.elements, &self.data, index);
}
#[inline]
fn set(&mut self, index: usize, value: bool) -> Option<bool> {
return self.core.set(self.elements, &mut self.data, index, value);
}
#[inline]
fn len(&self) -> usize {
self.elements
}
#[inline]
fn size(&self) -> usize {
self.data.len() * core::mem::size_of::<usize>()
}
#[inline]
fn first_index(&self) -> Option<usize> {
self.core.first_index(&self.data)
}
#[inline]
fn first_false_index(&self) -> Option<usize> {
self.core.first_false_index(self.elements, &self.data)
}
#[inline]
fn last_index(&self) -> Option<usize> {
self.core.last_index(self.elements, &self.data)
}
#[inline]
fn last_false_index(&self) -> Option<usize> {
self.core.last_false_index(self.elements, &self.data)
}
#[inline]
fn next_index(&self, index: usize) -> Option<usize> {
self.core.next_index(self.elements, &self.data, index)
}
#[inline]
fn next_false_index(&self, index: usize) -> Option<usize> {
self.core.next_false_index(self.elements, &self.data, index)
}
#[inline]
fn prev_index(&self, index: usize) -> Option<usize> {
self.core.prev_index(self.elements, &self.data, index)
}
#[inline]
fn prev_false_index(&self, index: usize) -> Option<usize> {
self.core.prev_false_index(self.elements, &self.data, index)
}
#[inline]
fn invert(&mut self) {
self.core.invert(self.elements, &mut self.data);
}
#[inline]
fn is_full(&self) -> bool {
self.core.is_full(self.elements, &self.data)
}
#[inline]
fn is_empty(&self) -> bool {
self.core.is_empty(&self.data)
}
#[inline]
unsafe fn as_bytes(&self) -> &[u8] {
core::slice::from_raw_parts(
self.data.as_ptr() as *const u8,
core::mem::size_of::<Self>(),
)
}
fn set_all(&mut self, value: bool) {
self.core.set_all(self.elements, &mut self.data, value);
}
}

View File

@ -2,11 +2,11 @@ use core::{intrinsics::unlikely, marker::PhantomData};
use crate::traits::BitOps; use crate::traits::BitOps;
pub(crate) struct BitMapCore<T: BitOps, const N: usize> { pub(crate) struct BitMapCore<T: BitOps> {
phantom: PhantomData<T>, phantom: PhantomData<T>,
} }
impl<T: BitOps, const N: usize> BitMapCore<T, N> { impl<T: BitOps> BitMapCore<T> {
pub const fn new() -> Self { pub const fn new() -> Self {
Self { Self {
phantom: PhantomData, phantom: PhantomData,
@ -14,8 +14,8 @@ impl<T: BitOps, const N: usize> BitMapCore<T, N> {
} }
/// 获取位图中的某一位 /// 获取位图中的某一位
pub(crate) fn get(&self, data: &[T], index: usize) -> Option<bool> { pub(crate) fn get(&self, n: usize, data: &[T], index: usize) -> Option<bool> {
if unlikely(index >= N) { if unlikely(index >= n) {
return None; return None;
} }
@ -29,8 +29,8 @@ impl<T: BitOps, const N: usize> BitMapCore<T, N> {
} }
/// 设置位图中的某一位 /// 设置位图中的某一位
pub(crate) fn set(&self, data: &mut [T], index: usize, value: bool) -> Option<bool> { pub(crate) fn set(&self, n: usize, data: &mut [T], index: usize, value: bool) -> Option<bool> {
if unlikely(index >= N) { if unlikely(index >= n) {
return None; return None;
} }
let element_index = index / T::bit_size(); let element_index = index / T::bit_size();
@ -42,7 +42,7 @@ impl<T: BitOps, const N: usize> BitMapCore<T, N> {
Some(bit) Some(bit)
} }
pub(crate) fn set_all(&self, data: &mut [T], value: bool) { pub(crate) fn set_all(&self, n: usize, data: &mut [T], value: bool) {
let val = if value { T::max() } else { T::zero() }; let val = if value { T::max() } else { T::zero() };
for element in data.iter_mut() { for element in data.iter_mut() {
*element = val; *element = val;
@ -50,7 +50,7 @@ impl<T: BitOps, const N: usize> BitMapCore<T, N> {
// 特殊处理最后一个元素 // 特殊处理最后一个元素
let last_element = data.last_mut().unwrap(); let last_element = data.last_mut().unwrap();
let mask = T::make_mask(N % T::bit_size()); let mask = T::make_mask(n % T::bit_size());
if mask != T::zero() { if mask != T::zero() {
*last_element &= mask; *last_element &= mask;
} }
@ -69,10 +69,10 @@ impl<T: BitOps, const N: usize> BitMapCore<T, N> {
} }
/// 获取位图中第一个为0的位 /// 获取位图中第一个为0的位
pub(crate) fn first_false_index(&self, data: &[T]) -> Option<usize> { pub(crate) fn first_false_index(&self, n: usize, data: &[T]) -> Option<usize> {
for (i, element) in data.iter().enumerate() { for (i, element) in data.iter().enumerate() {
if let Some(bit) = <T as BitOps>::first_false_index(element) { if let Some(bit) = <T as BitOps>::first_false_index(element) {
return self.make_index(i * T::bit_size() + bit); return self.make_index(n, i * T::bit_size() + bit);
} }
} }
@ -80,10 +80,10 @@ impl<T: BitOps, const N: usize> BitMapCore<T, N> {
} }
/// 获取位图中最后一个为1的位 /// 获取位图中最后一个为1的位
pub(crate) fn last_index(&self, data: &[T]) -> Option<usize> { pub(crate) fn last_index(&self, n: usize, data: &[T]) -> Option<usize> {
for (i, element) in data.iter().enumerate().rev() { for (i, element) in data.iter().enumerate().rev() {
if let Some(bit) = <T as BitOps>::last_index(element) { if let Some(bit) = <T as BitOps>::last_index(element) {
return self.make_index(i * T::bit_size() + bit); return self.make_index(n, i * T::bit_size() + bit);
} }
} }
@ -96,12 +96,12 @@ impl<T: BitOps, const N: usize> BitMapCore<T, N> {
/// ///
/// - `data`:位图数据 /// - `data`:位图数据
/// - `n`:位图有效位数 /// - `n`:位图有效位数
pub(crate) fn last_false_index(&self, data: &[T]) -> Option<usize> { pub(crate) fn last_false_index(&self, n: usize, data: &[T]) -> Option<usize> {
let mut iter = data.iter().rev(); let mut iter = data.iter().rev();
let mut last_element = *iter.next()?; let mut last_element = *iter.next()?;
// 对最后一个元素进行特殊处理,因为最后一个元素可能不是满的 // 对最后一个元素进行特殊处理,因为最后一个元素可能不是满的
let mut mask = T::make_mask(N % T::bit_size()); let mut mask = T::make_mask(n % T::bit_size());
if mask != T::zero() { if mask != T::zero() {
<T as BitOps>::invert(&mut mask); <T as BitOps>::invert(&mut mask);
@ -109,12 +109,12 @@ impl<T: BitOps, const N: usize> BitMapCore<T, N> {
} }
if let Some(bit) = <T as BitOps>::last_false_index(&last_element) { if let Some(bit) = <T as BitOps>::last_false_index(&last_element) {
return self.make_index((data.len() - 1) * T::bit_size() + bit); return self.make_index(n, (data.len() - 1) * T::bit_size() + bit);
} }
for element in iter { for element in iter {
if let Some(bit) = <T as BitOps>::last_false_index(element) { if let Some(bit) = <T as BitOps>::last_false_index(element) {
return self.make_index((data.len() - 1) * T::bit_size() + bit); return self.make_index(n, (data.len() - 1) * T::bit_size() + bit);
} }
} }
@ -122,8 +122,8 @@ impl<T: BitOps, const N: usize> BitMapCore<T, N> {
} }
/// 获取位图中下一个为1的位 /// 获取位图中下一个为1的位
pub(crate) fn next_index(&self, data: &[T], index: usize) -> Option<usize> { pub(crate) fn next_index(&self, n: usize, data: &[T], index: usize) -> Option<usize> {
if unlikely(index >= N) { if unlikely(index >= n) {
return None; return None;
} }
@ -132,12 +132,12 @@ impl<T: BitOps, const N: usize> BitMapCore<T, N> {
let element = data.get(element_index)?; let element = data.get(element_index)?;
if let Some(bit) = <T as BitOps>::next_index(element, bit_index) { if let Some(bit) = <T as BitOps>::next_index(element, bit_index) {
return self.make_index(element_index * T::bit_size() + bit); return self.make_index(n, element_index * T::bit_size() + bit);
} }
for (i, element) in data.iter().enumerate().skip(element_index + 1) { for (i, element) in data.iter().enumerate().skip(element_index + 1) {
if let Some(bit) = <T as BitOps>::first_index(element) { if let Some(bit) = <T as BitOps>::first_index(element) {
return self.make_index(i * T::bit_size() + bit); return self.make_index(n, i * T::bit_size() + bit);
} }
} }
@ -145,8 +145,8 @@ impl<T: BitOps, const N: usize> BitMapCore<T, N> {
} }
/// 获取位图中下一个为0的位 /// 获取位图中下一个为0的位
pub(crate) fn next_false_index(&self, data: &[T], index: usize) -> Option<usize> { pub(crate) fn next_false_index(&self, n: usize, data: &[T], index: usize) -> Option<usize> {
if unlikely(index >= N) { if unlikely(index >= n) {
return None; return None;
} }
@ -155,12 +155,12 @@ impl<T: BitOps, const N: usize> BitMapCore<T, N> {
let element = data.get(element_index)?; let element = data.get(element_index)?;
if let Some(bit) = <T as BitOps>::next_false_index(element, bit_index) { if let Some(bit) = <T as BitOps>::next_false_index(element, bit_index) {
return self.make_index(element_index * T::bit_size() + bit); return self.make_index(n, element_index * T::bit_size() + bit);
} }
for (i, element) in data.iter().enumerate().skip(element_index + 1) { for (i, element) in data.iter().enumerate().skip(element_index + 1) {
if let Some(bit) = <T as BitOps>::first_false_index(element) { if let Some(bit) = <T as BitOps>::first_false_index(element) {
return self.make_index(i * T::bit_size() + bit); return self.make_index(n, i * T::bit_size() + bit);
} }
} }
@ -168,8 +168,8 @@ impl<T: BitOps, const N: usize> BitMapCore<T, N> {
} }
/// 获取位图中上一个为1的位 /// 获取位图中上一个为1的位
pub(crate) fn prev_index(&self, data: &[T], index: usize) -> Option<usize> { pub(crate) fn prev_index(&self, n: usize, data: &[T], index: usize) -> Option<usize> {
if unlikely(index >= N) { if unlikely(index >= n) {
return None; return None;
} }
let element_index = index / T::bit_size(); let element_index = index / T::bit_size();
@ -177,37 +177,37 @@ impl<T: BitOps, const N: usize> BitMapCore<T, N> {
let element = data.get(element_index)?; let element = data.get(element_index)?;
if let Some(bit) = <T as BitOps>::prev_index(element, bit_index) { if let Some(bit) = <T as BitOps>::prev_index(element, bit_index) {
return self.make_index(element_index * T::bit_size() + bit); return self.make_index(n, element_index * T::bit_size() + bit);
} }
for (i, element) in data.iter().enumerate().take(element_index).rev() { for (i, element) in data.iter().enumerate().take(element_index).rev() {
if let Some(bit) = <T as BitOps>::last_index(element) { if let Some(bit) = <T as BitOps>::last_index(element) {
return self.make_index(i * T::bit_size() + bit); return self.make_index(n, i * T::bit_size() + bit);
} }
} }
None None
} }
pub(crate) fn prev_false_index(&self, data: &[T], index: usize) -> Option<usize> { pub(crate) fn prev_false_index(&self, n: usize, data: &[T], index: usize) -> Option<usize> {
let element_index = index / T::bit_size(); let element_index = index / T::bit_size();
let bit_index = index % T::bit_size(); let bit_index = index % T::bit_size();
let element = data.get(element_index)?; let element = data.get(element_index)?;
if let Some(bit) = <T as BitOps>::prev_false_index(element, bit_index) { if let Some(bit) = <T as BitOps>::prev_false_index(element, bit_index) {
return self.make_index(element_index * T::bit_size() + bit); return self.make_index(n, element_index * T::bit_size() + bit);
} }
for (i, element) in data.iter().enumerate().take(element_index).rev() { for (i, element) in data.iter().enumerate().take(element_index).rev() {
if let Some(bit) = <T as BitOps>::last_false_index(element) { if let Some(bit) = <T as BitOps>::last_false_index(element) {
return self.make_index(i * T::bit_size() + bit); return self.make_index(n, i * T::bit_size() + bit);
} }
} }
None None
} }
pub(crate) fn invert(&self, data: &mut [T]) { pub(crate) fn invert(&self, n: usize, data: &mut [T]) {
for element in data.iter_mut() { for element in data.iter_mut() {
<T as BitOps>::invert(element); <T as BitOps>::invert(element);
} }
@ -215,19 +215,19 @@ impl<T: BitOps, const N: usize> BitMapCore<T, N> {
// 特殊处理最后一个元素 // 特殊处理最后一个元素
let last_element = data.last_mut().unwrap(); let last_element = data.last_mut().unwrap();
let mask = T::make_mask(N % T::bit_size()); let mask = T::make_mask(n % T::bit_size());
if mask != T::zero() { if mask != T::zero() {
*last_element &= mask; *last_element &= mask;
} }
} }
pub(crate) fn is_full(&self, data: &[T]) -> bool { pub(crate) fn is_full(&self, n: usize, data: &[T]) -> bool {
let mut iter = data.iter().peekable(); let mut iter = data.iter().peekable();
while let Some(element) = iter.next() { while let Some(element) = iter.next() {
if iter.peek().is_none() { if iter.peek().is_none() {
// 这是最后一个元素,进行特殊处理 // 这是最后一个元素,进行特殊处理
let mut element = *element; let mut element = *element;
let mut mask = T::make_mask(N % T::bit_size()); let mut mask = T::make_mask(n % T::bit_size());
if mask == T::zero() { if mask == T::zero() {
mask = T::max(); mask = T::max();
} }
@ -256,8 +256,8 @@ impl<T: BitOps, const N: usize> BitMapCore<T, N> {
return true; return true;
} }
fn make_index(&self, index: usize) -> Option<usize> { fn make_index(&self, n: usize, index: usize) -> Option<usize> {
if unlikely(index >= N) { if unlikely(index >= n) {
return None; return None;
} }

View File

@ -3,7 +3,12 @@
#![allow(incomplete_features)] // for const generics #![allow(incomplete_features)] // for const generics
#![feature(generic_const_exprs)] #![feature(generic_const_exprs)]
#[macro_use]
extern crate alloc;
mod alloc_bitmap;
mod bitmap_core; mod bitmap_core;
mod static_bitmap; mod static_bitmap;
pub mod traits; pub mod traits;
pub use alloc_bitmap::AllocBitmap;
pub use static_bitmap::StaticBitmap; pub use static_bitmap::StaticBitmap;

View File

@ -10,7 +10,7 @@ where
[(); (N + usize::BITS as usize - 1) / (usize::BITS as usize)]:, [(); (N + usize::BITS as usize - 1) / (usize::BITS as usize)]:,
{ {
pub data: [usize; (N + usize::BITS as usize - 1) / (usize::BITS as usize)], pub data: [usize; (N + usize::BITS as usize - 1) / (usize::BITS as usize)],
core: BitMapCore<usize, N>, core: BitMapCore<usize>,
} }
impl<const N: usize> StaticBitmap<N> impl<const N: usize> StaticBitmap<N>
@ -32,12 +32,12 @@ where
{ {
#[inline] #[inline]
fn get(&self, index: usize) -> Option<bool> { fn get(&self, index: usize) -> Option<bool> {
return self.core.get(&self.data, index); return self.core.get(N, &self.data, index);
} }
#[inline] #[inline]
fn set(&mut self, index: usize, value: bool) -> Option<bool> { fn set(&mut self, index: usize, value: bool) -> Option<bool> {
return self.core.set(&mut self.data, index, value); return self.core.set(N, &mut self.data, index, value);
} }
#[inline] #[inline]
@ -57,47 +57,47 @@ where
#[inline] #[inline]
fn first_false_index(&self) -> Option<usize> { fn first_false_index(&self) -> Option<usize> {
self.core.first_false_index(&self.data) self.core.first_false_index(N, &self.data)
} }
#[inline] #[inline]
fn last_index(&self) -> Option<usize> { fn last_index(&self) -> Option<usize> {
self.core.last_index(&self.data) self.core.last_index(N, &self.data)
} }
#[inline] #[inline]
fn last_false_index(&self) -> Option<usize> { fn last_false_index(&self) -> Option<usize> {
self.core.last_false_index(&self.data) self.core.last_false_index(N, &self.data)
} }
#[inline] #[inline]
fn next_index(&self, index: usize) -> Option<usize> { fn next_index(&self, index: usize) -> Option<usize> {
self.core.next_index(&self.data, index) self.core.next_index(N, &self.data, index)
} }
#[inline] #[inline]
fn next_false_index(&self, index: usize) -> Option<usize> { fn next_false_index(&self, index: usize) -> Option<usize> {
self.core.next_false_index(&self.data, index) self.core.next_false_index(N, &self.data, index)
} }
#[inline] #[inline]
fn prev_index(&self, index: usize) -> Option<usize> { fn prev_index(&self, index: usize) -> Option<usize> {
self.core.prev_index(&self.data, index) self.core.prev_index(N, &self.data, index)
} }
#[inline] #[inline]
fn prev_false_index(&self, index: usize) -> Option<usize> { fn prev_false_index(&self, index: usize) -> Option<usize> {
self.core.prev_false_index(&self.data, index) self.core.prev_false_index(N, &self.data, index)
} }
#[inline] #[inline]
fn invert(&mut self) { fn invert(&mut self) {
self.core.invert(&mut self.data); self.core.invert(N, &mut self.data);
} }
#[inline] #[inline]
fn is_full(&self) -> bool { fn is_full(&self) -> bool {
self.core.is_full(&self.data) self.core.is_full(N, &self.data)
} }
#[inline] #[inline]
@ -114,6 +114,6 @@ where
} }
fn set_all(&mut self, value: bool) { fn set_all(&mut self, value: bool) {
self.core.set_all(&mut self.data, value); self.core.set_all(N, &mut self.data, value);
} }
} }

View File

@ -0,0 +1,645 @@
//! 动态位图的集成测试
use bitmap::{traits::BitMapOps, AllocBitmap};
/// 测试空的位图
///
/// 这是一个测试空的位图的例子
///
/// 测试空的位图
#[test]
fn test_empty_bitmap_32() {
let mut bitmap = AllocBitmap::new(32);
assert_eq!(bitmap.len(), 32);
assert_eq!(bitmap.size(), 8);
assert_eq!(bitmap.first_index(), None);
assert_eq!(bitmap.first_false_index(), Some(0));
assert_eq!(bitmap.last_index(), None);
assert_eq!(bitmap.last_false_index(), Some(31));
assert_eq!(bitmap.next_index(0), None);
assert_eq!(bitmap.next_false_index(0), Some(1));
assert_eq!(bitmap.prev_index(0), None);
assert_eq!(bitmap.prev_false_index(0), None);
assert_eq!(bitmap.is_full(), false);
assert_eq!(bitmap.is_empty(), true);
bitmap.invert();
assert_eq!(bitmap.len(), 32);
assert_eq!(bitmap.size(), 8);
assert_eq!(bitmap.first_index(), Some(0));
assert_eq!(bitmap.first_false_index(), None);
assert_eq!(bitmap.last_index(), Some(31));
assert_eq!(bitmap.last_false_index(), None);
assert_eq!(bitmap.next_index(0), Some(1));
assert_eq!(bitmap.next_false_index(0), None);
assert_eq!(bitmap.prev_index(0), None);
assert_eq!(bitmap.prev_false_index(0), None);
assert_eq!(bitmap.is_full(), true);
assert_eq!(bitmap.is_empty(), false);
}
#[test]
fn test_empty_bitmap_64() {
let mut bitmap = AllocBitmap::new(64);
assert_eq!(bitmap.len(), 64);
assert_eq!(bitmap.size(), 8);
assert_eq!(bitmap.first_index(), None);
assert_eq!(bitmap.first_false_index(), Some(0));
assert_eq!(bitmap.last_index(), None);
assert_eq!(bitmap.last_false_index(), Some(63));
assert_eq!(bitmap.next_index(0), None);
assert_eq!(bitmap.next_false_index(0), Some(1));
assert_eq!(bitmap.prev_index(0), None);
assert_eq!(bitmap.prev_false_index(0), None);
assert_eq!(bitmap.is_full(), false);
assert_eq!(bitmap.is_empty(), true);
bitmap.invert();
assert_eq!(bitmap.len(), 64);
assert_eq!(bitmap.size(), 8);
assert_eq!(bitmap.first_index(), Some(0));
assert_eq!(bitmap.first_false_index(), None);
assert_eq!(bitmap.last_index(), Some(63));
assert_eq!(bitmap.last_false_index(), None);
assert_eq!(bitmap.next_index(0), Some(1));
assert_eq!(bitmap.next_false_index(0), None);
assert_eq!(bitmap.prev_index(0), None);
assert_eq!(bitmap.prev_false_index(0), None);
assert_eq!(bitmap.is_full(), true);
assert_eq!(bitmap.is_empty(), false);
}
/// 测试长度为32的bmp其中第一个元素为1
#[test]
fn test_alloc_bitmap_32_first_1() {
let mut bitmap = AllocBitmap::new(32);
bitmap.set(0, true);
assert_eq!(bitmap.len(), 32);
assert_eq!(bitmap.size(), 8);
assert_eq!(bitmap.first_index(), Some(0));
assert_eq!(bitmap.first_false_index(), Some(1));
assert_eq!(bitmap.last_index(), Some(0));
assert_eq!(bitmap.last_false_index(), Some(31));
assert_eq!(bitmap.next_index(0), None);
assert_eq!(bitmap.next_false_index(0), Some(1));
assert_eq!(bitmap.prev_index(0), None);
assert_eq!(bitmap.prev_false_index(0), None);
assert_eq!(bitmap.is_full(), false);
assert_eq!(bitmap.is_empty(), false);
assert_eq!(bitmap.prev_index(2), Some(0));
assert_eq!(bitmap.prev_false_index(2), Some(1));
assert_eq!(bitmap.next_index(2), None);
assert_eq!(bitmap.next_false_index(2), Some(3));
// 反转
bitmap.invert();
assert_eq!(bitmap.first_index(), Some(1));
assert_eq!(bitmap.first_false_index(), Some(0));
assert_eq!(bitmap.last_index(), Some(31));
assert_eq!(bitmap.last_false_index(), Some(0));
assert_eq!(bitmap.next_index(0), Some(1));
assert_eq!(bitmap.next_false_index(0), None);
assert_eq!(bitmap.prev_index(0), None);
assert_eq!(bitmap.prev_false_index(0), None);
assert_eq!(bitmap.is_full(), false);
assert_eq!(bitmap.is_empty(), false);
assert_eq!(bitmap.prev_index(2), Some(1));
assert_eq!(bitmap.prev_false_index(2), Some(0));
assert_eq!(bitmap.next_index(2), Some(3));
}
/// 测试长度为32的bmp其中中间某个元素为1
#[test]
fn test_alloc_bitmap_32_middle_1() {
let mut bitmap = AllocBitmap::new(32);
bitmap.set(15, true);
assert_eq!(bitmap.len(), 32);
assert_eq!(bitmap.size(), 8);
assert_eq!(bitmap.first_index(), Some(15));
assert_eq!(bitmap.first_false_index(), Some(0));
assert_eq!(bitmap.last_index(), Some(15));
assert_eq!(bitmap.last_false_index(), Some(31));
assert_eq!(bitmap.next_index(0), Some(15));
assert_eq!(bitmap.next_index(15), None);
assert_eq!(bitmap.next_false_index(15), Some(16));
assert_eq!(bitmap.prev_index(15), None);
assert_eq!(bitmap.prev_false_index(15), Some(14));
assert_eq!(bitmap.is_full(), false);
assert_eq!(bitmap.is_empty(), false);
assert_eq!(bitmap.prev_index(20), Some(15));
assert_eq!(bitmap.prev_false_index(20), Some(19));
assert_eq!(bitmap.next_index(2), Some(15));
assert_eq!(bitmap.next_false_index(2), Some(3));
// 反转
bitmap.invert();
assert_eq!(bitmap.first_index(), Some(0));
assert_eq!(bitmap.first_false_index(), Some(15));
assert_eq!(bitmap.last_index(), Some(31));
assert_eq!(bitmap.last_false_index(), Some(15));
assert_eq!(bitmap.next_index(0), Some(1));
assert_eq!(bitmap.next_false_index(1), Some(15));
assert_eq!(bitmap.prev_index(15), Some(14));
assert_eq!(bitmap.prev_false_index(15), None);
assert_eq!(bitmap.is_full(), false);
assert_eq!(bitmap.is_empty(), false);
assert_eq!(bitmap.prev_index(30), Some(29));
assert_eq!(bitmap.prev_false_index(30), Some(15));
assert_eq!(bitmap.next_index(2), Some(3));
}
/// 测试长度为32的bmp其中最后一个元素为1
#[test]
fn test_alloc_bitmap_32_last_1() {
let mut bitmap = AllocBitmap::new(32);
bitmap.set(31, true);
assert_eq!(bitmap.len(), 32);
assert_eq!(bitmap.size(), 8);
assert_eq!(bitmap.first_index(), Some(31));
assert_eq!(bitmap.first_false_index(), Some(0));
assert_eq!(bitmap.last_index(), Some(31));
assert_eq!(bitmap.last_false_index(), Some(30));
assert_eq!(bitmap.next_index(0), Some(31));
assert_eq!(bitmap.next_index(31), None);
assert_eq!(bitmap.next_false_index(0), Some(1));
assert_eq!(bitmap.prev_index(31), None);
assert_eq!(bitmap.prev_false_index(31), Some(30));
assert_eq!(bitmap.is_full(), false);
assert_eq!(bitmap.is_empty(), false);
assert_eq!(bitmap.prev_index(2), None);
assert_eq!(bitmap.prev_false_index(2), Some(1));
assert_eq!(bitmap.next_index(2), Some(31));
assert_eq!(bitmap.next_false_index(2), Some(3));
// 反转
bitmap.invert();
assert_eq!(bitmap.first_index(), Some(0));
assert_eq!(bitmap.first_false_index(), Some(31));
assert_eq!(bitmap.last_index(), Some(30));
assert_eq!(bitmap.last_false_index(), Some(31));
assert_eq!(bitmap.next_index(0), Some(1));
assert_eq!(bitmap.next_false_index(0), Some(31));
assert_eq!(bitmap.prev_index(31), Some(30));
assert_eq!(bitmap.prev_false_index(31), None);
assert_eq!(bitmap.is_full(), false);
assert_eq!(bitmap.is_empty(), false);
assert_eq!(bitmap.prev_index(2), Some(1));
assert_eq!(bitmap.prev_false_index(2), None);
assert_eq!(bitmap.next_index(2), Some(3));
}
/// 测试长度为64的bmp其中第一个元素为1
#[test]
fn test_alloc_bitmap_64_first_1() {
let mut bitmap = AllocBitmap::new(64);
bitmap.set(0, true);
assert_eq!(bitmap.len(), 64);
assert_eq!(bitmap.size(), 8);
assert_eq!(bitmap.first_index(), Some(0));
assert_eq!(bitmap.first_false_index(), Some(1));
assert_eq!(bitmap.last_index(), Some(0));
assert_eq!(bitmap.last_false_index(), Some(63));
assert_eq!(bitmap.next_index(0), None);
assert_eq!(bitmap.next_false_index(0), Some(1));
assert_eq!(bitmap.prev_index(0), None);
assert_eq!(bitmap.prev_false_index(0), None);
assert_eq!(bitmap.is_full(), false);
assert_eq!(bitmap.is_empty(), false);
assert_eq!(bitmap.prev_index(2), Some(0));
assert_eq!(bitmap.prev_false_index(2), Some(1));
assert_eq!(bitmap.next_index(2), None);
assert_eq!(bitmap.next_false_index(2), Some(3));
// 反转
bitmap.invert();
assert_eq!(bitmap.first_index(), Some(1));
assert_eq!(bitmap.first_false_index(), Some(0));
assert_eq!(bitmap.last_index(), Some(63));
assert_eq!(bitmap.last_false_index(), Some(0));
assert_eq!(bitmap.next_index(0), Some(1));
assert_eq!(bitmap.next_false_index(0), None);
assert_eq!(bitmap.prev_index(0), None);
assert_eq!(bitmap.prev_false_index(0), None);
assert_eq!(bitmap.is_full(), false);
assert_eq!(bitmap.is_empty(), false);
assert_eq!(bitmap.prev_index(2), Some(1));
assert_eq!(bitmap.prev_false_index(2), Some(0));
assert_eq!(bitmap.next_index(2), Some(3));
}
/// 测试长度为64的bmp其中中间某个元素为1
#[test]
fn test_alloc_bitmap_64_middle_1() {
let mut bitmap = AllocBitmap::new(64);
bitmap.set(15, true);
assert_eq!(bitmap.len(), 64);
assert_eq!(bitmap.size(), 8);
assert_eq!(bitmap.first_index(), Some(15));
assert_eq!(bitmap.first_false_index(), Some(0));
assert_eq!(bitmap.last_index(), Some(15));
assert_eq!(bitmap.last_false_index(), Some(63));
assert_eq!(bitmap.next_index(0), Some(15));
assert_eq!(bitmap.next_index(15), None);
assert_eq!(bitmap.next_false_index(15), Some(16));
assert_eq!(bitmap.prev_index(15), None);
assert_eq!(bitmap.prev_false_index(15), Some(14));
assert_eq!(bitmap.is_full(), false);
assert_eq!(bitmap.is_empty(), false);
assert_eq!(bitmap.prev_index(20), Some(15));
assert_eq!(bitmap.prev_false_index(20), Some(19));
assert_eq!(bitmap.next_index(2), Some(15));
assert_eq!(bitmap.next_false_index(2), Some(3));
// 反转
bitmap.invert();
assert_eq!(bitmap.first_index(), Some(0));
assert_eq!(bitmap.first_false_index(), Some(15));
assert_eq!(bitmap.last_index(), Some(63));
assert_eq!(bitmap.last_false_index(), Some(15));
assert_eq!(bitmap.next_index(0), Some(1));
assert_eq!(bitmap.next_false_index(1), Some(15));
assert_eq!(bitmap.prev_index(15), Some(14));
assert_eq!(bitmap.prev_false_index(15), None);
assert_eq!(bitmap.is_full(), false);
assert_eq!(bitmap.is_empty(), false);
assert_eq!(bitmap.prev_index(63), Some(62));
assert_eq!(bitmap.prev_false_index(62), Some(15));
assert_eq!(bitmap.next_index(2), Some(3));
}
/// 测试长度为64的bmp其中最后一个元素为1
#[test]
fn test_alloc_bitmap_64_last_1() {
let mut bitmap = AllocBitmap::new(64);
bitmap.set(63, true);
assert_eq!(bitmap.len(), 64);
assert_eq!(bitmap.size(), 8);
assert_eq!(bitmap.first_index(), Some(63));
assert_eq!(bitmap.first_false_index(), Some(0));
assert_eq!(bitmap.last_index(), Some(63));
assert_eq!(bitmap.last_false_index(), Some(62));
assert_eq!(bitmap.next_index(0), Some(63));
assert_eq!(bitmap.next_index(63), None);
assert_eq!(bitmap.next_false_index(0), Some(1));
assert_eq!(bitmap.prev_index(63), None);
assert_eq!(bitmap.prev_false_index(63), Some(62));
assert_eq!(bitmap.is_full(), false);
assert_eq!(bitmap.is_empty(), false);
assert_eq!(bitmap.prev_index(2), None);
assert_eq!(bitmap.prev_false_index(2), Some(1));
assert_eq!(bitmap.next_index(2), Some(63));
assert_eq!(bitmap.next_false_index(2), Some(3));
// 反转
bitmap.invert();
assert_eq!(bitmap.first_index(), Some(0));
assert_eq!(bitmap.first_false_index(), Some(63));
assert_eq!(bitmap.last_index(), Some(62));
assert_eq!(bitmap.last_false_index(), Some(63));
assert_eq!(bitmap.next_index(0), Some(1));
assert_eq!(bitmap.next_false_index(0), Some(63));
assert_eq!(bitmap.prev_index(63), Some(62));
assert_eq!(bitmap.prev_false_index(63), None);
assert_eq!(bitmap.is_full(), false);
assert_eq!(bitmap.is_empty(), false);
assert_eq!(bitmap.prev_index(2), Some(1));
assert_eq!(bitmap.prev_false_index(2), None);
assert_eq!(bitmap.next_index(2), Some(3));
}
/// 测试长度为64的bmp其中第一个和最后一个元素为1
#[test]
fn test_alloc_bitmap_64_two_1_first() {
let mut bitmap = AllocBitmap::new(64);
bitmap.set(0, true);
bitmap.set(63, true);
assert_eq!(bitmap.len(), 64);
assert_eq!(bitmap.size(), 8);
assert_eq!(bitmap.first_index(), Some(0));
assert_eq!(bitmap.first_false_index(), Some(1));
assert_eq!(bitmap.last_index(), Some(63));
assert_eq!(bitmap.last_false_index(), Some(62));
assert_eq!(bitmap.next_index(0), Some(63));
assert_eq!(bitmap.next_index(63), None);
assert_eq!(bitmap.next_false_index(0), Some(1));
assert_eq!(bitmap.prev_index(63), Some(0));
assert_eq!(bitmap.prev_false_index(63), Some(62));
assert_eq!(bitmap.is_full(), false);
assert_eq!(bitmap.is_empty(), false);
// 反转
bitmap.invert();
assert_eq!(bitmap.first_index(), Some(1));
assert_eq!(bitmap.first_false_index(), Some(0));
assert_eq!(bitmap.last_index(), Some(62));
assert_eq!(bitmap.last_false_index(), Some(63));
assert_eq!(bitmap.next_index(0), Some(1));
assert_eq!(bitmap.next_false_index(0), Some(63));
assert_eq!(bitmap.prev_index(63), Some(62));
assert_eq!(bitmap.prev_false_index(63), Some(0));
assert_eq!(bitmap.is_full(), false);
assert_eq!(bitmap.is_empty(), false);
assert_eq!(bitmap.prev_index(2), Some(1));
assert_eq!(bitmap.prev_false_index(2), Some(0));
assert_eq!(bitmap.next_index(2), Some(3));
assert_eq!(bitmap.next_false_index(2), Some(63));
}
/// 测试长度为64的bmp中间两个不相邻的元素为1
#[test]
fn test_alloc_bitmap_64_two_1_middle() {
let mut bitmap = AllocBitmap::new(64);
bitmap.set(15, true);
bitmap.set(63, true);
assert_eq!(bitmap.len(), 64);
assert_eq!(bitmap.size(), 8);
assert_eq!(bitmap.first_index(), Some(15));
assert_eq!(bitmap.first_false_index(), Some(0));
assert_eq!(bitmap.last_index(), Some(63));
assert_eq!(bitmap.last_false_index(), Some(62));
assert_eq!(bitmap.next_index(0), Some(15));
assert_eq!(bitmap.next_index(15), Some(63));
assert_eq!(bitmap.next_index(63), None);
assert_eq!(bitmap.next_false_index(0), Some(1));
assert_eq!(bitmap.prev_index(63), Some(15));
assert_eq!(bitmap.prev_false_index(63), Some(62));
assert_eq!(bitmap.is_full(), false);
assert_eq!(bitmap.is_empty(), false);
// 反转
bitmap.invert();
assert_eq!(bitmap.first_index(), Some(0));
assert_eq!(bitmap.first_false_index(), Some(15));
assert_eq!(bitmap.last_index(), Some(62));
assert_eq!(bitmap.last_false_index(), Some(63));
assert_eq!(bitmap.next_index(0), Some(1));
assert_eq!(bitmap.next_false_index(0), Some(15));
assert_eq!(bitmap.next_false_index(15), Some(63));
assert_eq!(bitmap.prev_index(63), Some(62));
assert_eq!(bitmap.prev_false_index(63), Some(15));
assert_eq!(bitmap.is_full(), false);
assert_eq!(bitmap.is_empty(), false);
assert_eq!(bitmap.prev_index(2), Some(1));
assert_eq!(bitmap.prev_false_index(2), None);
assert_eq!(bitmap.next_index(2), Some(3));
assert_eq!(bitmap.next_false_index(2), Some(15));
}
#[test]
fn test_alloc_bitmap_128_two_1_seperate_first() {
let mut bitmap = AllocBitmap::new(128);
bitmap.set(0, true);
bitmap.set(127, true);
assert_eq!(bitmap.len(), 128);
assert_eq!(bitmap.size(), 16);
assert_eq!(bitmap.first_index(), Some(0));
assert_eq!(bitmap.first_false_index(), Some(1));
assert_eq!(bitmap.last_index(), Some(127));
assert_eq!(bitmap.last_false_index(), Some(126));
assert_eq!(bitmap.next_index(0), Some(127));
assert_eq!(bitmap.next_index(127), None);
assert_eq!(bitmap.next_false_index(0), Some(1));
assert_eq!(bitmap.prev_index(127), Some(0));
assert_eq!(bitmap.prev_false_index(127), Some(126));
assert_eq!(bitmap.prev_index(64), Some(0));
assert_eq!(bitmap.is_full(), false);
assert_eq!(bitmap.is_empty(), false);
// 反转
bitmap.invert();
assert_eq!(bitmap.first_index(), Some(1));
assert_eq!(bitmap.first_false_index(), Some(0));
assert_eq!(bitmap.last_index(), Some(126));
assert_eq!(bitmap.last_false_index(), Some(127));
assert_eq!(bitmap.next_index(0), Some(1));
assert_eq!(bitmap.next_false_index(0), Some(127));
assert_eq!(bitmap.prev_index(127), Some(126));
assert_eq!(bitmap.prev_false_index(127), Some(0));
assert_eq!(bitmap.prev_false_index(64), Some(0));
assert_eq!(bitmap.is_empty(), false);
assert_eq!(bitmap.is_full(), false);
}
/// 长度128, 第63、64bit为1
#[test]
fn test_alloc_bitmap_128_two_1_nearby_middle() {
let mut bitmap = AllocBitmap::new(128);
bitmap.set(63, true);
bitmap.set(64, true);
assert_eq!(bitmap.len(), 128);
assert_eq!(bitmap.size(), 16);
assert_eq!(bitmap.first_index(), Some(63));
assert_eq!(bitmap.first_false_index(), Some(0));
assert_eq!(bitmap.last_index(), Some(64));
assert_eq!(bitmap.last_false_index(), Some(127));
assert_eq!(bitmap.next_index(0), Some(63));
assert_eq!(bitmap.next_index(63), Some(64));
assert_eq!(bitmap.next_index(64), None);
assert_eq!(bitmap.next_false_index(0), Some(1));
assert_eq!(bitmap.next_false_index(63), Some(65));
assert_eq!(bitmap.prev_index(64), Some(63));
assert_eq!(bitmap.prev_false_index(64), Some(62));
assert_eq!(bitmap.prev_index(63), None);
assert_eq!(bitmap.prev_false_index(63), Some(62));
assert_eq!(bitmap.prev_index(65), Some(64));
assert_eq!(bitmap.is_full(), false);
assert_eq!(bitmap.is_empty(), false);
// 反转
bitmap.invert();
assert_eq!(bitmap.first_index(), Some(0));
assert_eq!(bitmap.first_false_index(), Some(63));
assert_eq!(bitmap.last_index(), Some(127));
assert_eq!(bitmap.last_false_index(), Some(64));
assert_eq!(bitmap.next_index(0), Some(1));
assert_eq!(bitmap.next_false_index(0), Some(63));
assert_eq!(bitmap.next_false_index(63), Some(64));
assert_eq!(bitmap.next_index(63), Some(65));
assert_eq!(bitmap.prev_false_index(127), Some(64));
assert_eq!(bitmap.prev_index(127), Some(126));
assert_eq!(bitmap.prev_false_index(64), Some(63));
assert_eq!(bitmap.prev_index(64), Some(62));
assert_eq!(bitmap.prev_index(63), Some(62));
assert_eq!(bitmap.is_full(), false);
assert_eq!(bitmap.is_empty(), false);
}
#[test]
fn test_alloc_bitmap_full_32() {
let mut bitmap = AllocBitmap::new(32);
bitmap.set_all(true);
assert_eq!(bitmap.len(), 32);
assert_eq!(bitmap.size(), 8);
assert_eq!(bitmap.first_index(), Some(0));
assert_eq!(bitmap.first_false_index(), None);
assert_eq!(bitmap.last_index(), Some(31));
assert_eq!(bitmap.last_false_index(), None);
assert_eq!(bitmap.next_index(0), Some(1));
assert_eq!(bitmap.next_index(31), None);
assert_eq!(bitmap.next_false_index(0), None);
assert_eq!(bitmap.prev_index(31), Some(30));
assert_eq!(bitmap.prev_false_index(31), None);
assert_eq!(bitmap.prev_index(0), None);
assert_eq!(bitmap.is_full(), true);
assert_eq!(bitmap.is_empty(), false);
// 反转
bitmap.invert();
assert_eq!(bitmap.first_index(), None);
assert_eq!(bitmap.first_false_index(), Some(0));
assert_eq!(bitmap.last_index(), None);
assert_eq!(bitmap.last_false_index(), Some(31));
assert_eq!(bitmap.next_index(0), None);
assert_eq!(bitmap.next_false_index(0), Some(1));
assert_eq!(bitmap.prev_index(31), None);
assert_eq!(bitmap.prev_false_index(31), Some(30));
assert_eq!(bitmap.prev_index(0), None);
assert_eq!(bitmap.is_full(), false);
assert_eq!(bitmap.is_empty(), true);
}
#[test]
fn test_alloc_bitmap_full_64() {
let mut bitmap = AllocBitmap::new(64);
bitmap.set_all(true);
assert_eq!(bitmap.len(), 64);
assert_eq!(bitmap.size(), 8);
assert_eq!(bitmap.first_index(), Some(0));
assert_eq!(bitmap.first_false_index(), None);
assert_eq!(bitmap.last_index(), Some(63));
assert_eq!(bitmap.last_false_index(), None);
assert_eq!(bitmap.next_index(0), Some(1));
assert_eq!(bitmap.next_index(63), None);
assert_eq!(bitmap.next_false_index(0), None);
assert_eq!(bitmap.prev_index(63), Some(62));
assert_eq!(bitmap.prev_false_index(63), None);
assert_eq!(bitmap.prev_index(0), None);
assert_eq!(bitmap.is_full(), true);
assert_eq!(bitmap.is_empty(), false);
// 反转
bitmap.invert();
assert_eq!(bitmap.first_index(), None);
assert_eq!(bitmap.first_false_index(), Some(0));
assert_eq!(bitmap.last_index(), None);
assert_eq!(bitmap.last_false_index(), Some(63));
assert_eq!(bitmap.next_index(0), None);
assert_eq!(bitmap.next_false_index(0), Some(1));
assert_eq!(bitmap.prev_index(63), None);
assert_eq!(bitmap.prev_false_index(63), Some(62));
assert_eq!(bitmap.prev_index(0), None);
assert_eq!(bitmap.is_full(), false);
assert_eq!(bitmap.is_empty(), true);
}
#[test]
fn test_alloc_bitmap_full_100() {
let mut bitmap = AllocBitmap::new(100);
bitmap.set_all(true);
assert_eq!(bitmap.len(), 100);
assert_eq!(bitmap.size(), 16);
assert_eq!(bitmap.first_index(), Some(0));
assert_eq!(bitmap.first_false_index(), None);
assert_eq!(bitmap.last_index(), Some(99));
assert_eq!(bitmap.last_false_index(), None);
assert_eq!(bitmap.next_index(0), Some(1));
assert_eq!(bitmap.next_index(99), None);
assert_eq!(bitmap.next_false_index(0), None);
assert_eq!(bitmap.prev_index(99), Some(98));
assert_eq!(bitmap.prev_false_index(99), None);
assert_eq!(bitmap.prev_index(0), None);
assert_eq!(bitmap.is_full(), true);
assert_eq!(bitmap.is_empty(), false);
// 反转
bitmap.invert();
assert_eq!(bitmap.first_index(), None);
assert_eq!(bitmap.first_false_index(), Some(0));
assert_eq!(bitmap.last_index(), None);
assert_eq!(bitmap.last_false_index(), Some(99));
assert_eq!(bitmap.next_index(0), None);
assert_eq!(bitmap.next_false_index(0), Some(1));
assert_eq!(bitmap.prev_index(99), None);
assert_eq!(bitmap.prev_false_index(99), Some(98));
assert_eq!(bitmap.prev_index(0), None);
assert_eq!(bitmap.is_full(), false);
assert_eq!(bitmap.is_empty(), true);
}
#[test]
fn test_alloc_bitmap_full_128() {
let mut bitmap = AllocBitmap::new(128);
bitmap.set_all(true);
assert_eq!(bitmap.len(), 128);
assert_eq!(bitmap.size(), 16);
assert_eq!(bitmap.first_index(), Some(0));
assert_eq!(bitmap.first_false_index(), None);
assert_eq!(bitmap.last_index(), Some(127));
assert_eq!(bitmap.last_false_index(), None);
assert_eq!(bitmap.next_index(0), Some(1));
assert_eq!(bitmap.next_index(127), None);
assert_eq!(bitmap.next_false_index(0), None);
assert_eq!(bitmap.prev_index(127), Some(126));
assert_eq!(bitmap.prev_false_index(127), None);
assert_eq!(bitmap.prev_index(0), None);
assert_eq!(bitmap.is_full(), true);
assert_eq!(bitmap.is_empty(), false);
// 反转
bitmap.invert();
assert_eq!(bitmap.first_index(), None);
assert_eq!(bitmap.first_false_index(), Some(0));
assert_eq!(bitmap.last_index(), None);
assert_eq!(bitmap.last_false_index(), Some(127));
assert_eq!(bitmap.next_index(0), None);
assert_eq!(bitmap.next_false_index(0), Some(1));
assert_eq!(bitmap.prev_index(127), None);
assert_eq!(bitmap.prev_false_index(127), Some(126));
assert_eq!(bitmap.prev_index(0), None);
assert_eq!(bitmap.is_full(), false);
assert_eq!(bitmap.is_empty(), true);
}

View File

@ -70,7 +70,7 @@ fn test_empty_bitmap_64() {
/// 测试长度为32的bmp其中第一个元素为1 /// 测试长度为32的bmp其中第一个元素为1
#[test] #[test]
fn test_bitmap_32_first_1() { fn test_static_bitmap_32_first_1() {
let mut bitmap = StaticBitmap::<32>::new(); let mut bitmap = StaticBitmap::<32>::new();
bitmap.set(0, true); bitmap.set(0, true);
assert_eq!(bitmap.len(), 32); assert_eq!(bitmap.len(), 32);
@ -111,7 +111,7 @@ fn test_bitmap_32_first_1() {
/// 测试长度为32的bmp其中中间某个元素为1 /// 测试长度为32的bmp其中中间某个元素为1
#[test] #[test]
fn test_bitmap_32_middle_1() { fn test_static_bitmap_32_middle_1() {
let mut bitmap = StaticBitmap::<32>::new(); let mut bitmap = StaticBitmap::<32>::new();
bitmap.set(15, true); bitmap.set(15, true);
assert_eq!(bitmap.len(), 32); assert_eq!(bitmap.len(), 32);
@ -153,7 +153,7 @@ fn test_bitmap_32_middle_1() {
/// 测试长度为32的bmp其中最后一个元素为1 /// 测试长度为32的bmp其中最后一个元素为1
#[test] #[test]
fn test_bitmap_32_last_1() { fn test_static_bitmap_32_last_1() {
let mut bitmap = StaticBitmap::<32>::new(); let mut bitmap = StaticBitmap::<32>::new();
bitmap.set(31, true); bitmap.set(31, true);
assert_eq!(bitmap.len(), 32); assert_eq!(bitmap.len(), 32);
@ -195,7 +195,7 @@ fn test_bitmap_32_last_1() {
/// 测试长度为64的bmp其中第一个元素为1 /// 测试长度为64的bmp其中第一个元素为1
#[test] #[test]
fn test_bitmap_64_first_1() { fn test_static_bitmap_64_first_1() {
let mut bitmap = StaticBitmap::<64>::new(); let mut bitmap = StaticBitmap::<64>::new();
bitmap.set(0, true); bitmap.set(0, true);
assert_eq!(bitmap.len(), 64); assert_eq!(bitmap.len(), 64);
@ -236,7 +236,7 @@ fn test_bitmap_64_first_1() {
/// 测试长度为64的bmp其中中间某个元素为1 /// 测试长度为64的bmp其中中间某个元素为1
#[test] #[test]
fn test_bitmap_64_middle_1() { fn test_static_bitmap_64_middle_1() {
let mut bitmap = StaticBitmap::<64>::new(); let mut bitmap = StaticBitmap::<64>::new();
bitmap.set(15, true); bitmap.set(15, true);
assert_eq!(bitmap.len(), 64); assert_eq!(bitmap.len(), 64);
@ -278,7 +278,7 @@ fn test_bitmap_64_middle_1() {
/// 测试长度为64的bmp其中最后一个元素为1 /// 测试长度为64的bmp其中最后一个元素为1
#[test] #[test]
fn test_bitmap_64_last_1() { fn test_static_bitmap_64_last_1() {
let mut bitmap = StaticBitmap::<64>::new(); let mut bitmap = StaticBitmap::<64>::new();
bitmap.set(63, true); bitmap.set(63, true);
assert_eq!(bitmap.len(), 64); assert_eq!(bitmap.len(), 64);
@ -320,7 +320,7 @@ fn test_bitmap_64_last_1() {
/// 测试长度为64的bmp其中第一个和最后一个元素为1 /// 测试长度为64的bmp其中第一个和最后一个元素为1
#[test] #[test]
fn test_bitmap_64_two_1_first() { fn test_static_bitmap_64_two_1_first() {
let mut bitmap = StaticBitmap::<64>::new(); let mut bitmap = StaticBitmap::<64>::new();
bitmap.set(0, true); bitmap.set(0, true);
bitmap.set(63, true); bitmap.set(63, true);
@ -361,7 +361,7 @@ fn test_bitmap_64_two_1_first() {
/// 测试长度为64的bmp中间两个不相邻的元素为1 /// 测试长度为64的bmp中间两个不相邻的元素为1
#[test] #[test]
fn test_bitmap_64_two_1_middle() { fn test_static_bitmap_64_two_1_middle() {
let mut bitmap = StaticBitmap::<64>::new(); let mut bitmap = StaticBitmap::<64>::new();
bitmap.set(15, true); bitmap.set(15, true);
bitmap.set(63, true); bitmap.set(63, true);
@ -403,7 +403,7 @@ fn test_bitmap_64_two_1_middle() {
} }
#[test] #[test]
fn test_bitmap_128_two_1_seperate_first() { fn test_static_bitmap_128_two_1_seperate_first() {
let mut bitmap = StaticBitmap::<128>::new(); let mut bitmap = StaticBitmap::<128>::new();
bitmap.set(0, true); bitmap.set(0, true);
@ -443,7 +443,7 @@ fn test_bitmap_128_two_1_seperate_first() {
/// 长度128, 第63、64bit为1 /// 长度128, 第63、64bit为1
#[test] #[test]
fn test_bitmap_128_two_1_nearby_middle() { fn test_static_bitmap_128_two_1_nearby_middle() {
let mut bitmap = StaticBitmap::<128>::new(); let mut bitmap = StaticBitmap::<128>::new();
bitmap.set(63, true); bitmap.set(63, true);
@ -493,7 +493,7 @@ fn test_bitmap_128_two_1_nearby_middle() {
} }
#[test] #[test]
fn test_bitmap_full_32() { fn test_static_bitmap_full_32() {
let mut bitmap = StaticBitmap::<32>::new(); let mut bitmap = StaticBitmap::<32>::new();
bitmap.set_all(true); bitmap.set_all(true);
@ -531,7 +531,7 @@ fn test_bitmap_full_32() {
} }
#[test] #[test]
fn test_bitmap_full_64() { fn test_static_bitmap_full_64() {
let mut bitmap = StaticBitmap::<64>::new(); let mut bitmap = StaticBitmap::<64>::new();
bitmap.set_all(true); bitmap.set_all(true);
@ -569,7 +569,7 @@ fn test_bitmap_full_64() {
} }
#[test] #[test]
fn test_bitmap_full_100() { fn test_static_bitmap_full_100() {
let mut bitmap = StaticBitmap::<100>::new(); let mut bitmap = StaticBitmap::<100>::new();
bitmap.set_all(true); bitmap.set_all(true);
@ -607,7 +607,7 @@ fn test_bitmap_full_100() {
} }
#[test] #[test]
fn test_bitmap_full_128() { fn test_static_bitmap_full_128() {
let mut bitmap = StaticBitmap::<128>::new(); let mut bitmap = StaticBitmap::<128>::new();
bitmap.set_all(true); bitmap.set_all(true);