use smol_bitmap::SmolBitmap;
#[test]
fn test_resize_expand() {
let mut bitmap = SmolBitmap::new();
bitmap.insert(50);
bitmap.insert(100);
bitmap.resize(120);
assert_eq!(bitmap.capacity(), 127); assert!(bitmap.get(50));
assert!(bitmap.get(100));
assert!(!bitmap.get(110)); assert!(!bitmap.is_spilled());
bitmap.resize(200);
assert!(bitmap.is_spilled());
assert!(bitmap.capacity() >= 200);
assert!(bitmap.get(50));
assert!(bitmap.get(100));
assert!(!bitmap.get(150)); }
#[test]
fn test_resize_shrink() {
let mut bitmap = SmolBitmap::new();
bitmap.insert(50);
bitmap.insert(100);
bitmap.insert(150);
bitmap.insert(200);
assert!(bitmap.is_spilled());
bitmap.resize(120);
assert!(bitmap.get(50));
assert!(bitmap.get(100));
assert!(!bitmap.get(150)); assert!(!bitmap.get(200));
bitmap.resize(100);
assert!(bitmap.get(50));
assert!(!bitmap.get(100)); bitmap.shrink_to_fit();
assert!(!bitmap.is_spilled()); }
#[test]
fn test_resize_no_op() {
let mut bitmap = SmolBitmap::new();
bitmap.insert(50);
let initial_capacity = bitmap.capacity();
bitmap.resize(initial_capacity);
assert_eq!(bitmap.capacity(), initial_capacity);
assert!(bitmap.get(50));
}
#[test]
fn test_truncate_basic() {
let mut bitmap = SmolBitmap::new();
bitmap.insert(50);
bitmap.insert(100);
bitmap.insert(150);
bitmap.truncate(120);
assert!(bitmap.get(50));
assert!(bitmap.get(100));
assert!(!bitmap.get(150));
bitmap.truncate(60);
assert!(bitmap.get(50));
assert!(!bitmap.get(100)); }
#[test]
fn test_truncate_to_zero() {
let mut bitmap = SmolBitmap::new();
bitmap.insert(50);
bitmap.insert(100);
bitmap.truncate(0);
assert!(bitmap.is_empty());
assert!(!bitmap.get(50));
assert!(!bitmap.get(100));
}
#[test]
fn test_truncate_partial_word() {
let mut bitmap = SmolBitmap::new();
for i in 60..70 {
bitmap.insert(i);
}
bitmap.truncate(65);
for i in 60..65 {
assert!(bitmap.get(i), "Bit {i} should be set");
}
for i in 65..70 {
assert!(!bitmap.get(i), "Bit {i} should be cleared");
}
}
#[test]
fn test_truncate_shrink_to_inline() {
let mut bitmap = SmolBitmap::new();
bitmap.insert(200);
bitmap.insert(50);
assert!(bitmap.is_spilled());
bitmap.truncate(100);
bitmap.shrink_to_fit();
assert!(!bitmap.is_spilled()); assert!(bitmap.get(50));
assert!(!bitmap.get(200));
}
#[test]
fn test_resize_preserves_bits() {
let mut bitmap = SmolBitmap::new();
for i in (0..100).step_by(3) {
bitmap.insert(i);
}
bitmap.resize(150);
for i in 0..100 {
assert_eq!(bitmap.get(i), i.is_multiple_of(3));
}
for i in 100..150 {
assert!(!bitmap.get(i));
}
bitmap.resize(50);
for i in 0..50 {
assert_eq!(bitmap.get(i), i.is_multiple_of(3));
}
}
#[test]
fn test_truncate_bit_127() {
let mut bitmap = SmolBitmap::new();
bitmap.insert(127);
assert!(bitmap.is_spilled());
bitmap.truncate(127);
bitmap.shrink_to_fit();
assert!(!bitmap.get(127)); assert!(!bitmap.is_spilled()); }
#[test]
fn test_resize_then_set() {
let mut bitmap = SmolBitmap::new();
bitmap.resize(100);
bitmap.insert(99);
assert!(bitmap.get(99));
bitmap.insert(150);
assert!(bitmap.get(150));
}