animate/webGl/my-threejs-test/node_modules/@parcel/graph/test/BitSet.test.js

111 lines
2.1 KiB
JavaScript

// @flow strict-local
import assert from 'assert';
import {BitSet} from '../src/BitSet';
function assertValues(set: BitSet, values: Array<number>) {
let setValues = [];
set.forEach(bit => {
setValues.push(bit);
});
for (let value of values) {
assert(set.has(value), 'Set.has returned false');
assert(
setValues.some(v => v === value),
'Set values is missing value',
);
}
assert(
setValues.length === values.length,
`Expected ${values.length} values but got ${setValues.length}`,
);
}
describe('BitSet', () => {
it('clone should return a set with the same values', () => {
let set1 = new BitSet(5);
set1.add(1);
set1.add(3);
let set2 = set1.clone();
assertValues(set2, [1, 3]);
});
it('clear should remove all values from the set', () => {
let set1 = new BitSet(5);
set1.add(1);
set1.add(3);
set1.clear();
assertValues(set1, []);
});
it('delete should remove values from the set', () => {
let set1 = new BitSet(5);
set1.add(1);
set1.add(3);
set1.add(5);
set1.delete(3);
assertValues(set1, [1, 5]);
});
it('empty should check if there are no values set', () => {
let set1 = new BitSet(5);
assert(set1.empty());
set1.add(3);
assert(!set1.empty());
set1.delete(3);
assert(set1.empty());
});
it('should intersect with another BitSet', () => {
let set1 = new BitSet(5);
set1.add(1);
set1.add(3);
let set2 = new BitSet(5);
set2.add(3);
set2.add(5);
set1.intersect(set2);
assertValues(set1, [3]);
});
it('should union with another BitSet', () => {
let set1 = new BitSet(5);
set1.add(1);
set1.add(3);
let set2 = new BitSet(5);
set2.add(3);
set2.add(5);
set1.union(set2);
assertValues(set1, [1, 3, 5]);
});
it('BitSet.union should create a new BitSet with the union', () => {
let set1 = new BitSet(5);
set1.add(1);
set1.add(3);
let set2 = new BitSet(5);
set2.add(3);
set2.add(5);
let set3 = BitSet.union(set1, set2);
assertValues(set1, [1, 3]);
assertValues(set2, [3, 5]);
assertValues(set3, [1, 3, 5]);
});
});