#![allow(clippy::shadow_reuse)]
#![allow(clippy::shadow_same)]
#![allow(clippy::shadow_unrelated)]
use bit_set::BitSet;
use bit_vec::BitVec;
use std::cmp::Ordering::{Equal, Greater, Less};
use std::vec::Vec;
use std::{format, vec};
#[test]
fn test_bit_set_display() {
let mut s = BitSet::new();
s.insert(1);
s.insert(10);
s.insert(50);
s.insert(2);
assert_eq!("{1, 2, 10, 50}", format!("{}", s));
}
#[test]
fn test_bit_set_debug() {
let mut s = BitSet::new();
s.insert(1);
s.insert(10);
s.insert(50);
s.insert(2);
let expected = "BitSet { bit_vec: BitVec { storage: \
\"01100000001000000000000000000000 \
0000000000000000001\", nbits: 51 } }";
let actual = format!("{:?}", s);
assert_eq!(expected, actual);
}
#[test]
fn test_bit_set_from_usizes() {
let usizes = vec![0, 2, 2, 3];
let a: BitSet = usizes.into_iter().collect();
let mut b = BitSet::new();
b.insert(0);
b.insert(2);
b.insert(3);
assert_eq!(a, b);
}
#[test]
fn test_bit_set_iterator() {
let usizes = vec![0, 2, 2, 3];
let bit_vec: BitSet = usizes.into_iter().collect();
let idxs: Vec<_> = bit_vec.iter().collect();
assert_eq!(idxs, [0, 2, 3]);
assert_eq!(bit_vec.iter().count(), 3);
let long: BitSet = (0..10000).filter(|&n| n % 2 == 0).collect();
let real: Vec<_> = (0..10000 / 2).map(|x| x * 2).collect();
let idxs: Vec<_> = long.iter().collect();
assert_eq!(idxs, real);
assert_eq!(long.iter().count(), real.len());
}
#[test]
fn test_bit_set_frombit_vec_init() {
let bools = [true, false];
let lengths = [10, 64, 100];
for &b in &bools {
for &l in &lengths {
let bitset = BitSet::from_bit_vec(BitVec::from_elem(l, b));
assert_eq!(bitset.contains(1), b);
assert_eq!(bitset.contains(l - 1), b);
assert!(!bitset.contains(l));
}
}
}
#[test]
fn test_bit_vec_masking() {
let b = BitVec::from_elem(140, true);
let mut bs = BitSet::from_bit_vec(b);
assert!(bs.contains(139));
assert!(!bs.contains(140));
assert!(bs.insert(150));
assert!(!bs.contains(140));
assert!(!bs.contains(149));
assert!(bs.contains(150));
assert!(!bs.contains(151));
}
#[test]
fn test_bit_set_basic() {
let mut b = BitSet::new();
assert!(b.insert(3));
assert!(!b.insert(3));
assert!(b.contains(3));
assert!(b.insert(4));
assert!(!b.insert(4));
assert!(b.contains(3));
assert!(b.insert(400));
assert!(!b.insert(400));
assert!(b.contains(400));
assert_eq!(b.count(), 3);
}
#[test]
fn test_bit_set_intersection() {
let mut a = BitSet::new();
let mut b = BitSet::new();
assert!(a.insert(11));
assert!(a.insert(1));
assert!(a.insert(3));
assert!(a.insert(77));
assert!(a.insert(103));
assert!(a.insert(5));
assert!(b.insert(2));
assert!(b.insert(11));
assert!(b.insert(77));
assert!(b.insert(5));
assert!(b.insert(3));
let expected = [3, 5, 11, 77];
let actual: Vec<_> = a.intersection(&b).collect();
assert_eq!(actual, expected);
assert_eq!(a.intersection(&b).count(), expected.len());
}
#[test]
fn test_bit_set_difference() {
let mut a = BitSet::new();
let mut b = BitSet::new();
assert!(a.insert(1));
assert!(a.insert(3));
assert!(a.insert(5));
assert!(a.insert(200));
assert!(a.insert(500));
assert!(b.insert(3));
assert!(b.insert(200));
let expected = [1, 5, 500];
let actual: Vec<_> = a.difference(&b).collect();
assert_eq!(actual, expected);
assert_eq!(a.difference(&b).count(), expected.len());
}
#[test]
fn test_bit_set_symmetric_difference() {
let mut a = BitSet::new();
let mut b = BitSet::new();
assert!(a.insert(1));
assert!(a.insert(3));
assert!(a.insert(5));
assert!(a.insert(9));
assert!(a.insert(11));
assert!(b.insert(3));
assert!(b.insert(9));
assert!(b.insert(14));
assert!(b.insert(220));
let expected = [1, 5, 11, 14, 220];
let actual: Vec<_> = a.symmetric_difference(&b).collect();
assert_eq!(actual, expected);
assert_eq!(a.symmetric_difference(&b).count(), expected.len());
}
#[test]
fn test_bit_set_union() {
let mut a = BitSet::new();
let mut b = BitSet::new();
assert!(a.insert(1));
assert!(a.insert(3));
assert!(a.insert(5));
assert!(a.insert(9));
assert!(a.insert(11));
assert!(a.insert(160));
assert!(a.insert(19));
assert!(a.insert(24));
assert!(a.insert(200));
assert!(b.insert(1));
assert!(b.insert(5));
assert!(b.insert(9));
assert!(b.insert(13));
assert!(b.insert(19));
let expected = [1, 3, 5, 9, 11, 13, 19, 24, 160, 200];
let actual: Vec<_> = a.union(&b).collect();
assert_eq!(actual, expected);
assert_eq!(a.union(&b).count(), expected.len());
}
#[test]
fn test_bit_set_subset() {
let mut set1 = BitSet::new();
let mut set2 = BitSet::new();
assert!(set1.is_subset(&set2)); set2.insert(100);
assert!(set1.is_subset(&set2)); set2.insert(200);
assert!(set1.is_subset(&set2)); set1.insert(200);
assert!(set1.is_subset(&set2)); set1.insert(300);
assert!(!set1.is_subset(&set2)); set2.insert(300);
assert!(set1.is_subset(&set2)); set2.insert(400);
assert!(set1.is_subset(&set2)); set2.remove(100);
assert!(set1.is_subset(&set2)); set2.remove(300);
assert!(!set1.is_subset(&set2)); set1.remove(300);
assert!(set1.is_subset(&set2)); }
#[test]
fn test_bit_set_is_disjoint() {
let a = BitSet::from_bytes(&[0b10100010]);
let b = BitSet::from_bytes(&[0b01000000]);
let c = BitSet::new();
let d = BitSet::from_bytes(&[0b00110000]);
assert!(!a.is_disjoint(&d));
assert!(!d.is_disjoint(&a));
assert!(a.is_disjoint(&b));
assert!(a.is_disjoint(&c));
assert!(b.is_disjoint(&a));
assert!(b.is_disjoint(&c));
assert!(c.is_disjoint(&a));
assert!(c.is_disjoint(&b));
}
#[test]
fn test_bit_set_union_with() {
let mut a = BitSet::new();
a.insert(0);
let mut b = BitSet::new();
b.insert(5);
let expected = BitSet::from_bytes(&[0b10000100]);
a.union_with(&b);
assert_eq!(a, expected);
let mut a = BitSet::from_bytes(&[0b10100010]);
let mut b = BitSet::from_bytes(&[0b01100010]);
let c = a.clone();
a.union_with(&b);
b.union_with(&c);
assert_eq!(a.count(), 4);
assert_eq!(b.count(), 4);
}
#[test]
fn test_bit_set_intersect_with() {
let mut a = BitSet::from_bytes(&[0b10100010]);
let mut b = BitSet::from_bytes(&[0b00000000]);
let c = a.clone();
a.intersect_with(&b);
b.intersect_with(&c);
assert!(a.is_empty());
assert!(b.is_empty());
let mut a = BitSet::from_bytes(&[0b10100010]);
let mut b = BitSet::new();
let c = a.clone();
a.intersect_with(&b);
b.intersect_with(&c);
assert!(a.is_empty());
assert!(b.is_empty());
let mut a = BitSet::from_bytes(&[0b10100010]);
let mut b = BitSet::from_bytes(&[0b01100010]);
let c = a.clone();
a.intersect_with(&b);
b.intersect_with(&c);
assert_eq!(a.count(), 2);
assert_eq!(b.count(), 2);
}
#[test]
fn test_bit_set_difference_with() {
let mut a = BitSet::from_bytes(&[0b00000000]);
let b = BitSet::from_bytes(&[0b10100010]);
a.difference_with(&b);
assert!(a.is_empty());
let mut a = BitSet::new();
let b = BitSet::from_bytes(&[0b11111111]);
a.difference_with(&b);
assert!(a.is_empty());
let mut a = BitSet::from_bytes(&[0b10100010]);
let mut b = BitSet::from_bytes(&[0b01100010]);
let c = a.clone();
a.difference_with(&b);
b.difference_with(&c);
assert_eq!(a.count(), 1);
assert_eq!(b.count(), 1);
}
#[test]
fn test_bit_set_symmetric_difference_with() {
let mut a = BitSet::new();
a.insert(0);
a.insert(1);
let mut b = BitSet::new();
b.insert(1);
b.insert(5);
let expected = BitSet::from_bytes(&[0b10000100]);
a.symmetric_difference_with(&b);
assert_eq!(a, expected);
let mut a = BitSet::from_bytes(&[0b10100010]);
let b = BitSet::new();
let c = a.clone();
a.symmetric_difference_with(&b);
assert_eq!(a, c);
let mut a = BitSet::from_bytes(&[0b11100010]);
let mut b = BitSet::from_bytes(&[0b01101010]);
let c = a.clone();
a.symmetric_difference_with(&b);
b.symmetric_difference_with(&c);
assert_eq!(a.count(), 2);
assert_eq!(b.count(), 2);
}
#[test]
fn test_bit_set_eq() {
let a = BitSet::from_bytes(&[0b10100010]);
let b = BitSet::from_bytes(&[0b00000000]);
let c = BitSet::new();
assert!(a == a);
assert!(a != b);
assert!(a != c);
assert!(b == b);
assert!(b == c);
assert!(c == c);
}
#[test]
fn test_bit_set_cmp() {
let a = BitSet::from_bytes(&[0b10100010]);
let b = BitSet::from_bytes(&[0b00000000]);
let c = BitSet::new();
assert_eq!(a.cmp(&b), Greater);
assert_eq!(a.cmp(&c), Greater);
assert_eq!(b.cmp(&a), Less);
assert_eq!(b.cmp(&c), Equal);
assert_eq!(c.cmp(&a), Less);
assert_eq!(c.cmp(&b), Equal);
}
#[test]
fn test_bit_set_shrink_to_fit_new() {
let mut a = BitSet::new();
assert_eq!(a.count(), 0);
assert_eq!(a.capacity(), 0);
a.shrink_to_fit();
assert_eq!(a.count(), 0);
assert_eq!(a.capacity(), 0);
assert!(!a.contains(1));
a.insert(3);
assert!(a.contains(3));
assert_eq!(a.count(), 1);
assert!(a.capacity() > 0);
a.shrink_to_fit();
assert!(a.contains(3));
assert_eq!(a.count(), 1);
assert!(a.capacity() > 0);
}
#[test]
fn test_bit_set_shrink_to_fit() {
let mut a = BitSet::new();
assert_eq!(a.count(), 0);
assert_eq!(a.capacity(), 0);
a.insert(259);
a.insert(98);
a.insert(3);
assert_eq!(a.count(), 3);
assert!(a.capacity() > 0);
assert!(!a.contains(1));
assert!(a.contains(259));
assert!(a.contains(98));
assert!(a.contains(3));
a.shrink_to_fit();
assert!(!a.contains(1));
assert!(a.contains(259));
assert!(a.contains(98));
assert!(a.contains(3));
assert_eq!(a.count(), 3);
assert!(a.capacity() > 0);
let old_cap = a.capacity();
assert!(a.remove(259));
a.shrink_to_fit();
assert!(a.capacity() < old_cap, "{} {}", a.capacity(), old_cap);
assert!(!a.contains(1));
assert!(!a.contains(259));
assert!(a.contains(98));
assert!(a.contains(3));
assert_eq!(a.count(), 2);
let old_cap2 = a.capacity();
a.make_empty();
assert_eq!(a.capacity(), old_cap2);
assert_eq!(a.count(), 0);
assert!(!a.contains(1));
assert!(!a.contains(259));
assert!(!a.contains(98));
assert!(!a.contains(3));
a.insert(512);
assert!(a.capacity() > 0);
assert_eq!(a.count(), 1);
assert!(a.contains(512));
assert!(!a.contains(1));
assert!(!a.contains(259));
assert!(!a.contains(98));
assert!(!a.contains(3));
a.remove(512);
a.shrink_to_fit();
assert_eq!(a.capacity(), 0);
assert_eq!(a.count(), 0);
assert!(!a.contains(512));
assert!(!a.contains(1));
assert!(!a.contains(259));
assert!(!a.contains(98));
assert!(!a.contains(3));
assert!(!a.contains(0));
}
#[test]
fn test_bit_vec_remove() {
let mut a = BitSet::new();
assert!(a.insert(1));
assert!(a.remove(1));
assert!(a.insert(100));
assert!(a.remove(100));
assert!(a.insert(1000));
assert!(a.remove(1000));
a.shrink_to_fit();
}
#[test]
fn test_bit_vec_clone() {
let mut a = BitSet::new();
assert!(a.insert(1));
assert!(a.insert(100));
assert!(a.insert(1000));
let mut b = a.clone();
assert!(a == b);
assert!(b.remove(1));
assert!(a.contains(1));
assert!(a.remove(1000));
assert!(b.contains(1000));
}
#[test]
fn test_truncate() {
let bytes = [0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF];
let mut s = BitSet::from_bytes(&bytes);
s.truncate(5 * 8);
assert_eq!(s, BitSet::from_bytes(&bytes[..5]));
assert_eq!(s.count(), 5 * 8);
s.truncate(4 * 8);
assert_eq!(s, BitSet::from_bytes(&bytes[..4]));
assert_eq!(s.count(), 4 * 8);
s.truncate(5 * 8);
assert_eq!(s, BitSet::from_bytes(&bytes[..4]));
assert_eq!(s.count(), 4 * 8);
s.truncate(8);
assert_eq!(s, BitSet::from_bytes(&bytes[..1]));
assert_eq!(s.count(), 8);
s.truncate(0);
assert_eq!(s, BitSet::from_bytes(&[]));
assert_eq!(s.count(), 0);
}