-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathBitSet.spec.ts
83 lines (68 loc) · 2.14 KB
/
BitSet.spec.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
import { BitSet } from './BitSet';
describe('BitSet', () => {
it('can store a bunch of arbitrary items', () => {
const numItems = 5000;
const set = new BitSet(numItems);
expect(set.size()).toBe(numItems);
expectOn(set, 0);
expect(set.buffer).toBeTruthy();
const booleans: boolean[] = [];
let numTrue = 0;
for (let i = 0; i < numItems; i++) {
const val = i % 3 === 0 || i % 8 === 0;
booleans.push(val);
set.set(i, val);
if (val) numTrue++;
}
expect(numItems).toBeGreaterThan(0);
expect(numTrue).toBeGreaterThan(0);
expectOn(set, numTrue);
expect(set.size()).toBe(numItems);
for (let i = 0; i < numItems; i++) {
expect(booleans[i]).toBe(set.check(i), `val at place ${i} should match`);
}
});
it('can set the whole thing at once', () => {
const set = new BitSet(100);
expect(set.size()).toBe(100);
expectOn(set, 0);
expect(set.none()).toBe(true);
expect(set.any()).toBe(false);
expect(set.all()).toBe(false);
set.setAll(true);
expect(set.size()).toBe(100);
expectOn(set, 100);
expect(set.none()).toBe(false);
expect(set.any()).toBe(true);
expect(set.all()).toBe(true);
set.setAll(false);
expect(set.size()).toBe(100);
expectOn(set, 0);
});
it('can be resized', () => {
const set = new BitSet(10);
set.setAll(true);
expect(set.size()).toBe(10);
expectOn(set, 10);
set.setSize(100);
expect(set.size()).toBe(100);
expectOn(set, 10);
set.setSize(5);
expectOn(set, 5);
set.setSize(100);
expectOn(set, 5);
set.setSize(0);
expectOn(set, 0);
set.setSize(100);
expectOn(set, 0);
});
});
function expectOn(set: BitSet, numOn: number) {
let sum = 0;
for (let i = 0; i < set.size(); i++) {
if (set.check(i)) sum++;
}
expect(numOn).toBe(sum);
expect(set.numOn()).toBe(sum);
expect(set.numOff()).toBe(set.size() - sum);
}