bitset.js 1.6 KB

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