9 let idx_buf = BitSet::new_filled(i);
10 let elems: Vec<usize> = idx_buf.iter().collect();
11 let expected: Vec<usize> = (0..i).collect();
12 assert_eq!(elems, expected);
17 fn bitset_iter_works() {
18 let mut bitset: BitSet<usize> = BitSet::new_empty(100);
28 assert_eq!(bitset.iter().collect::<Vec<_>>(), [1, 10, 19, 62, 63, 64, 65, 66, 99]);
32 fn bitset_iter_works_2() {
33 let mut bitset: BitSet<usize> = BitSet::new_empty(320);
39 assert_eq!(bitset.iter().collect::<Vec<_>>(), [0, 127, 191, 255, 319]);
44 let mut set1: BitSet<usize> = BitSet::new_empty(65);
45 let mut set2: BitSet<usize> = BitSet::new_empty(65);
46 assert!(set1.insert(3));
47 assert!(!set1.insert(3));
48 assert!(set2.insert(5));
49 assert!(set2.insert(64));
50 assert!(set1.union(&set2));
51 assert!(!set1.union(&set2));
52 assert!(set1.contains(3));
53 assert!(!set1.contains(4));
54 assert!(set1.contains(5));
55 assert!(!set1.contains(63));
56 assert!(set1.contains(64));
61 let mut sparse038: HybridBitSet<usize> = HybridBitSet::new_empty(256);
62 assert!(sparse038.is_empty());
63 assert!(sparse038.insert(0));
64 assert!(sparse038.insert(1));
65 assert!(sparse038.insert(8));
66 assert!(sparse038.insert(3));
67 assert!(!sparse038.insert(3));
68 assert!(sparse038.remove(1));
69 assert!(!sparse038.is_empty());
70 assert_eq!(sparse038.iter().collect::<Vec<_>>(), [0, 3, 8]);
73 if i == 0 || i == 3 || i == 8 {
74 assert!(sparse038.contains(i));
76 assert!(!sparse038.contains(i));
80 let mut sparse01358 = sparse038.clone();
81 assert!(sparse01358.insert(1));
82 assert!(sparse01358.insert(5));
83 assert_eq!(sparse01358.iter().collect::<Vec<_>>(), [0, 1, 3, 5, 8]);
85 let mut dense10 = HybridBitSet::new_empty(256);
87 assert!(dense10.insert(i));
89 assert!(!dense10.is_empty());
90 assert_eq!(dense10.iter().collect::<Vec<_>>(), [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]);
92 let mut dense256 = HybridBitSet::new_empty(256);
93 assert!(dense256.is_empty());
94 dense256.insert_all();
95 assert!(!dense256.is_empty());
97 assert!(dense256.contains(i));
100 assert!(sparse038.superset(&sparse038)); // sparse + sparse (self)
101 assert!(sparse01358.superset(&sparse038)); // sparse + sparse
102 assert!(dense10.superset(&sparse038)); // dense + sparse
103 assert!(dense10.superset(&dense10)); // dense + dense (self)
104 assert!(dense256.superset(&dense10)); // dense + dense
106 let mut hybrid = sparse038;
107 assert!(!sparse01358.union(&hybrid)); // no change
108 assert!(hybrid.union(&sparse01358));
109 assert!(hybrid.superset(&sparse01358) && sparse01358.superset(&hybrid));
110 assert!(!dense10.union(&sparse01358));
111 assert!(!dense256.union(&dense10));
112 let mut dense = dense10;
113 assert!(dense.union(&dense256));
114 assert!(dense.superset(&dense256) && dense256.superset(&dense));
115 assert!(hybrid.union(&dense256));
116 assert!(hybrid.superset(&dense256) && dense256.superset(&hybrid));
118 assert_eq!(dense256.iter().count(), 256);
119 let mut dense0 = dense256;
121 assert!(dense0.remove(i));
123 assert!(!dense0.remove(0));
124 assert!(dense0.is_empty());
129 let mut set: GrowableBitSet<usize> = GrowableBitSet::with_capacity(65);
131 assert!(set.insert(index));
132 assert!(!set.insert(index));
136 // Check if the bits set before growing are still set
138 assert!(set.contains(index));
141 // Check if the new bits are all un-set
142 for index in 65..128 {
143 assert!(!set.contains(index));
146 // Check that we can set all new bits without running out of bounds
147 for index in 65..128 {
148 assert!(set.insert(index));
149 assert!(!set.insert(index));
154 fn matrix_intersection() {
155 let mut matrix: BitMatrix<usize, usize> = BitMatrix::new(200, 200);
157 // (*) Elements reachable from both 2 and 65.
161 matrix.insert(2, 10); // (*)
162 matrix.insert(2, 64); // (*)
163 matrix.insert(2, 65);
164 matrix.insert(2, 130);
165 matrix.insert(2, 160); // (*)
167 matrix.insert(64, 133);
169 matrix.insert(65, 2);
170 matrix.insert(65, 8);
171 matrix.insert(65, 10); // (*)
172 matrix.insert(65, 64); // (*)
173 matrix.insert(65, 68);
174 matrix.insert(65, 133);
175 matrix.insert(65, 160); // (*)
177 let intersection = matrix.intersect_rows(2, 64);
178 assert!(intersection.is_empty());
180 let intersection = matrix.intersect_rows(2, 65);
181 assert_eq!(intersection, &[10, 64, 160]);
186 let mut matrix: BitMatrix<usize, usize> = BitMatrix::new(64, 100);
187 matrix.insert(3, 22);
188 matrix.insert(3, 75);
189 matrix.insert(2, 99);
191 matrix.union_rows(3, 5);
192 matrix.insert_all_into_row(6);
195 let mut iter = expected.iter();
196 for i in matrix.iter(2) {
197 let j = *iter.next().unwrap();
200 assert!(iter.next().is_none());
202 let expected = [22, 75];
203 let mut iter = expected.iter();
204 assert_eq!(matrix.count(3), expected.len());
205 for i in matrix.iter(3) {
206 let j = *iter.next().unwrap();
209 assert!(iter.next().is_none());
212 let mut iter = expected.iter();
213 assert_eq!(matrix.count(4), expected.len());
214 for i in matrix.iter(4) {
215 let j = *iter.next().unwrap();
218 assert!(iter.next().is_none());
220 let expected = [22, 75];
221 let mut iter = expected.iter();
222 assert_eq!(matrix.count(5), expected.len());
223 for i in matrix.iter(5) {
224 let j = *iter.next().unwrap();
227 assert!(iter.next().is_none());
229 assert_eq!(matrix.count(6), 100);
231 for (idx, i) in matrix.iter(6).enumerate() {
235 assert_eq!(count, 100);
237 if let Some(i) = matrix.iter(7).next() {
238 panic!("expected no elements in row, but contains element {:?}", i);
243 fn sparse_matrix_iter() {
244 let mut matrix: SparseBitMatrix<usize, usize> = SparseBitMatrix::new(100);
245 matrix.insert(3, 22);
246 matrix.insert(3, 75);
247 matrix.insert(2, 99);
249 matrix.union_rows(3, 5);
252 let mut iter = expected.iter();
253 for i in matrix.iter(2) {
254 let j = *iter.next().unwrap();
257 assert!(iter.next().is_none());
259 let expected = [22, 75];
260 let mut iter = expected.iter();
261 for i in matrix.iter(3) {
262 let j = *iter.next().unwrap();
265 assert!(iter.next().is_none());
268 let mut iter = expected.iter();
269 for i in matrix.iter(4) {
270 let j = *iter.next().unwrap();
273 assert!(iter.next().is_none());
275 let expected = [22, 75];
276 let mut iter = expected.iter();
277 for i in matrix.iter(5) {
278 let j = *iter.next().unwrap();
281 assert!(iter.next().is_none());
284 /// Merge dense hybrid set into empty sparse hybrid set.
286 fn union_hybrid_sparse_empty_to_dense(b: &mut Bencher) {
287 let mut pre_dense: HybridBitSet<usize> = HybridBitSet::new_empty(256);
289 assert!(pre_dense.insert(i));
291 let pre_sparse: HybridBitSet<usize> = HybridBitSet::new_empty(256);
293 let dense = pre_dense.clone();
294 let mut sparse = pre_sparse.clone();
295 sparse.union(&dense);
299 /// Merge dense hybrid set into full hybrid set with same indices.
301 fn union_hybrid_sparse_full_to_dense(b: &mut Bencher) {
302 let mut pre_dense: HybridBitSet<usize> = HybridBitSet::new_empty(256);
304 assert!(pre_dense.insert(i));
306 let mut pre_sparse: HybridBitSet<usize> = HybridBitSet::new_empty(256);
307 for i in 0..SPARSE_MAX {
308 assert!(pre_sparse.insert(i));
311 let dense = pre_dense.clone();
312 let mut sparse = pre_sparse.clone();
313 sparse.union(&dense);
317 /// Merge dense hybrid set into full hybrid set with indices over the whole domain.
319 fn union_hybrid_sparse_domain_to_dense(b: &mut Bencher) {
320 let mut pre_dense: HybridBitSet<usize> = HybridBitSet::new_empty(SPARSE_MAX * 64);
322 assert!(pre_dense.insert(i));
324 let mut pre_sparse: HybridBitSet<usize> = HybridBitSet::new_empty(SPARSE_MAX * 64);
325 for i in 0..SPARSE_MAX {
326 assert!(pre_sparse.insert(i * 64));
329 let dense = pre_dense.clone();
330 let mut sparse = pre_sparse.clone();
331 sparse.union(&dense);
335 /// Merge dense hybrid set into empty hybrid set where the domain is very small.
337 fn union_hybrid_sparse_empty_small_domain(b: &mut Bencher) {
338 let mut pre_dense: HybridBitSet<usize> = HybridBitSet::new_empty(SPARSE_MAX);
339 for i in 0..SPARSE_MAX {
340 assert!(pre_dense.insert(i));
342 let pre_sparse: HybridBitSet<usize> = HybridBitSet::new_empty(SPARSE_MAX);
344 let dense = pre_dense.clone();
345 let mut sparse = pre_sparse.clone();
346 sparse.union(&dense);
350 /// Merge dense hybrid set into full hybrid set where the domain is very small.
352 fn union_hybrid_sparse_full_small_domain(b: &mut Bencher) {
353 let mut pre_dense: HybridBitSet<usize> = HybridBitSet::new_empty(SPARSE_MAX);
354 for i in 0..SPARSE_MAX {
355 assert!(pre_dense.insert(i));
357 let mut pre_sparse: HybridBitSet<usize> = HybridBitSet::new_empty(SPARSE_MAX);
358 for i in 0..SPARSE_MAX {
359 assert!(pre_sparse.insert(i));
362 let dense = pre_dense.clone();
363 let mut sparse = pre_sparse.clone();
364 sparse.union(&dense);