use super::*;
use crate::perf_and_test_utils::{gen_strictly_increasing_sequence, negate_vector};
#[test]
fn test_is_empty() {
let bv = BitVectorMut::default();
assert!(bv.is_empty());
}
fn build_alternate(n: usize) -> BitVectorMut {
let mut bv = BitVectorMut::with_capacity(n);
for i in 0..n {
bv.push(i % 2 == 0);
}
bv
}
#[test]
fn test_from_packed_data() {
let n = 1024;
let v1: BitVector = build_alternate(n).into();
let v2 = BitVectorMut::from_packed_data(v1.words(), v1.len());
assert_eq!(v1, v2.into());
let partial = BitVectorMut::from_packed_data(v1.words(), 64);
assert_eq!(partial, build_alternate(64));
let empty = BitVectorMut::from_packed_data(&[], 0);
assert_eq!(empty, BitVectorMut::new());
}
#[test]
fn test_get() {
let n = 1024 + 13;
let bv = build_alternate(n);
for i in 0..n {
assert_eq!(bv.get(i).unwrap(), i % 2 == 0);
}
}
#[test]
fn test_iter() {
let n = 1024 + 13;
let bv: BitVector = build_alternate(n).into();
for (i, bit) in bv.into_iter().enumerate() {
assert_eq!(bit, i % 2 == 0);
}
}
#[test]
fn test_get_set_bits() {
let n = 1024 + 13;
let mut bv = BitVectorMut::new();
bv.extend_with_zeros(n);
assert_eq!(bv.get_bits(61, 35).unwrap(), 0);
assert_eq!(bv.get_bits(0, 42).unwrap(), 0);
assert_eq!(bv.get_bits(n - 42 - 1, 42).unwrap(), 0);
assert_eq!(bv.get_bits(n - 42, 42), None);
bv.set_bits(0, 6, 42);
assert_eq!(bv.get_bits(0, 6).unwrap(), 42);
bv.set_bits(n - 61 - 1, 61, 42);
assert_eq!(bv.get_bits(n - 61 - 1, 61).unwrap(), 42);
bv.set_bits(n - 67 - 1, 33, 42);
assert_eq!(bv.get_bits(n - 67 - 1, 33).unwrap(), 42);
}
#[test]
fn test_from_iter() {
let n = 1024 + 13;
let bv = build_alternate(n);
let bv2: BitVectorMut = (0..n).map(|x| x % 2 == 0).collect();
assert_eq!(bv, bv2);
let bv2: BitVectorMut = (0..n).filter(|x| x % 2 == 0).collect();
assert_eq!(bv, bv2);
}
#[test]
fn test_iter_zeros() {
let bv = BitVector::default();
let v: Vec<usize> = bv.zeros().collect();
assert!(v.is_empty());
let vv: Vec<usize> = vec![0, 63, 128, 129, 254, 1026];
let bv: BitVector = vv.iter().copied().collect();
let v: Vec<usize> = bv.zeros().collect();
assert_eq!(v, negate_vector(&vv));
let v: Vec<usize> = bv.zeros_with_pos(63).collect();
assert_eq!(v[0], 64);
assert_eq!(*v.last().unwrap(), 1025);
}
#[test]
fn test_iter_ones() {
let bv = BitVector::default();
let v: Vec<usize> = bv.ones().collect();
assert!(v.is_empty());
let vv: Vec<usize> = vec![0, 63, 128, 129, 254, 1026];
let bv: BitVector = vv.iter().copied().collect();
let v: Vec<usize> = bv.ones().collect();
assert_eq!(v, vv);
let v: Vec<usize> = bv.ones_with_pos(127).collect();
assert_eq!(v, vec![128, 129, 254, 1026]);
let v: Vec<usize> = bv.ones_with_pos(129).collect();
assert_eq!(v, vec![129, 254, 1026]);
let v: Vec<usize> = bv.ones_with_pos(130).collect();
assert_eq!(v, vec![254, 1026]);
let v: Vec<usize> = bv.ones_with_pos(1027).collect();
assert_eq!(v, vec![]);
let vv: Vec<usize> = (0..1024).collect();
let bv: BitVector = vv.iter().copied().collect();
let v: Vec<usize> = bv.ones().collect();
assert_eq!(v, vv);
let vv = gen_strictly_increasing_sequence(1024 * 4, 1 << 20);
let bv: BitVector = vv.iter().copied().collect();
let v: Vec<usize> = bv.ones().collect();
assert_eq!(v, vv);
}
#[test]
fn test_set_symbol() {
let mut dl = DataLine::default();
let i = 333;
dl.set_symbol(1, i);
println!("{:?}", dl);
println!("got bit: {:?}", dl.get(i));
}