1 | var claire = require('claire');
|
2 |
|
3 | var forAll = claire.forAll,
|
4 | arb = claire.data,
|
5 | label = claire.label,
|
6 | choice = claire.choice,
|
7 | transform = claire.transform;
|
8 |
|
9 | var BitSet = require('../lib/bitset').BitSet;
|
10 | var PosInt = transform(Math.floor, arb.Positive);
|
11 |
|
12 | var EmptyBitSet = label('bitset', transform(
|
13 | function(size) {
|
14 | return new BitSet(size);
|
15 | },
|
16 | choice(arb.Nothing, PosInt)));
|
17 |
|
18 | suite('BitSet', function() {
|
19 |
|
20 | test('get bit', forAll(EmptyBitSet, PosInt)
|
21 | .satisfy(function(b, bit) {
|
22 | b.set(bit);
|
23 | return b.get(bit);
|
24 | }).asTest());
|
25 |
|
26 | test('clear bit', forAll(EmptyBitSet, PosInt)
|
27 | .satisfy(function(b, bit) {
|
28 | b.set(bit);
|
29 | b.clear(bit);
|
30 | return !b.get(bit);
|
31 | }).asTest());
|
32 |
|
33 | test('next set of empty', forAll(EmptyBitSet)
|
34 | .satisfy(function(b) {
|
35 | return b.nextSetBit(0) === -1;
|
36 | }).asTest());
|
37 |
|
38 | test('next set of one bit', forAll(EmptyBitSet, PosInt)
|
39 | .satisfy(function(b, bit) {
|
40 | b.set(bit);
|
41 | return b.nextSetBit(0) === bit;
|
42 | }).asTest());
|
43 |
|
44 | test('next set same bit', forAll(EmptyBitSet, PosInt)
|
45 | .satisfy(function(b, bit) {
|
46 | b.set(bit);
|
47 | return b.nextSetBit(bit) === bit;
|
48 | }).asTest());
|
49 |
|
50 | test('next set following bit', forAll(EmptyBitSet, PosInt)
|
51 | .satisfy(function(b, bit) {
|
52 | b.set(bit);
|
53 | return b.nextSetBit(bit+1) === -1;
|
54 | }).asTest());
|
55 |
|
56 | test('next clear of empty', forAll(EmptyBitSet, PosInt)
|
57 | .satisfy(function(b, bit) { return b.nextClearBit(bit) === bit; })
|
58 | .asTest());
|
59 |
|
60 | test('next clear of one set', forAll(EmptyBitSet, PosInt)
|
61 | .satisfy(function(b, bit) {
|
62 | b.set(bit);
|
63 | return b.nextClearBit(bit) === bit + 1;
|
64 | }).asTest());
|
65 |
|
66 | });
|