blob: e77e8d21ddf1bd32555504b71b4ff3e814439fa5 [file] [log] [blame] [edit]
import BitSet from "../src/antlr4/misc/BitSet.js";
describe('test BitSet', () => {
it("is empty", () => {
const bs = new BitSet();
expect(bs.length).toEqual(0);
})
it("sets 1 value", () => {
const bs = new BitSet();
bs.set(67);
expect(bs.length).toEqual(1);
expect(bs.get(67)).toBeTrue();
})
it("clears 1 value", () => {
const bs = new BitSet();
bs.set(67);
bs.clear(67)
expect(bs.length).toEqual(0);
expect(bs.get(67)).toBeFalse();
})
it("sets 2 consecutive values", () => {
const bs = new BitSet();
bs.set(67);
bs.set(68);
expect(bs.length).toEqual(2);
expect(bs.get(67)).toBeTrue();
expect(bs.get(68)).toBeTrue();
})
it("sets 2 close values", () => {
const bs = new BitSet();
bs.set(67);
bs.set(70);
expect(bs.length).toEqual(2);
expect(bs.get(67)).toBeTrue();
expect(bs.get(70)).toBeTrue();
})
it("sets 2 distant values", () => {
const bs = new BitSet();
bs.set(67);
bs.set(241);
expect(bs.length).toEqual(2);
expect(bs.get(67)).toBeTrue();
expect(bs.get(241)).toBeTrue();
})
it("combines 2 identical sets", () => {
const bs1 = new BitSet();
bs1.set(67);
const bs2 = new BitSet();
bs2.set(67);
bs1.or(bs2);
expect(bs1.length).toEqual(1);
expect(bs1.get(67)).toBeTrue();
})
it("combines 2 distinct sets", () => {
const bs1 = new BitSet();
bs1.set(67);
const bs2 = new BitSet();
bs2.set(69);
bs1.or(bs2);
expect(bs1.length).toEqual(2);
expect(bs1.get(67)).toBeTrue();
expect(bs1.get(69)).toBeTrue();
})
it("combines 2 overlapping sets", () => {
const bs1 = new BitSet();
bs1.set(67);
bs1.set(69);
const bs2 = new BitSet();
bs2.set(69);
bs2.set(71);
bs1.or(bs2);
expect(bs1.length).toEqual(3);
expect(bs1.get(67)).toBeTrue();
expect(bs1.get(69)).toBeTrue();
expect(bs1.get(71)).toBeTrue();
})
it("returns values", () => {
const bs = new BitSet();
bs.set(67);
bs.set(69);
const values = bs.values();
expect(values).toEqual([67, 69]);
})
it("counts bits", () => {
for(let i= 0; i <= 0xFF; i++) {
// count bits the slow but easy to understand way (Kernighan method)
let count1 = 0;
let value = i;
while(value) {
if(value & 1)
count1++;
value >>= 1;
}
// count bits the fast way
const count2 = BitSet._bitCount(i);
expect(count2).toEqual(count1);
}
})
})