bitset.js
1.68 KB
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
'use strict';
var claire = require('claire');
var forAll = claire.forAll,
arb = claire.data,
label = claire.label,
choice = claire.choice,
transform = claire.transform;
var BitSet = require('../lib/bitset').BitSet;
var PosInt = transform(Math.floor, arb.Positive);
var EmptyBitSet = label('bitset', transform(
function(size) {
return new BitSet(size);
},
choice(arb.Nothing, PosInt)));
suite('BitSet', function() {
test('get bit', forAll(EmptyBitSet, PosInt)
.satisfy(function(b, bit) {
b.set(bit);
return b.get(bit);
}).asTest());
test('clear bit', forAll(EmptyBitSet, PosInt)
.satisfy(function(b, bit) {
b.set(bit);
b.clear(bit);
return !b.get(bit);
}).asTest());
test('next set of empty', forAll(EmptyBitSet)
.satisfy(function(b) {
return b.nextSetBit(0) === -1;
}).asTest());
test('next set of one bit', forAll(EmptyBitSet, PosInt)
.satisfy(function(b, bit) {
b.set(bit);
return b.nextSetBit(0) === bit;
}).asTest());
test('next set same bit', forAll(EmptyBitSet, PosInt)
.satisfy(function(b, bit) {
b.set(bit);
return b.nextSetBit(bit) === bit;
}).asTest());
test('next set following bit', forAll(EmptyBitSet, PosInt)
.satisfy(function(b, bit) {
b.set(bit);
return b.nextSetBit(bit+1) === -1;
}).asTest());
test('next clear of empty', forAll(EmptyBitSet, PosInt)
.satisfy(function(b, bit) { return b.nextClearBit(bit) === bit; })
.asTest());
test('next clear of one set', forAll(EmptyBitSet, PosInt)
.satisfy(function(b, bit) {
b.set(bit);
return b.nextClearBit(bit) === bit + 1;
}).asTest());
});