copied set implementations from MultiFlag JS
This commit is contained in:
62
node/tests/flagsets/array.test.ts
Normal file
62
node/tests/flagsets/array.test.ts
Normal file
@@ -0,0 +1,62 @@
|
||||
import { ArrayFlagSet } from '~'
|
||||
|
||||
describe(ArrayFlagSet, () => {
|
||||
test('none', () => {
|
||||
const flags = new ArrayFlagSet<string>()
|
||||
|
||||
expect(flags.none()).toEqual([])
|
||||
})
|
||||
|
||||
test('union', () => {
|
||||
const flags = new ArrayFlagSet<string>()
|
||||
|
||||
expect(flags.union([], [])).toEqual([])
|
||||
expect(flags.union(['A'], [])).toEqual(['A'])
|
||||
expect(flags.union([], ['B'])).toEqual(['B'])
|
||||
expect(flags.union(['A'], ['B'])).toEqual(['A', 'B'])
|
||||
expect(flags.union(['A', 'B'], ['B', 'C'])).toEqual(['A', 'B', 'C'])
|
||||
})
|
||||
|
||||
test('difference', () => {
|
||||
const flags = new ArrayFlagSet<string>()
|
||||
|
||||
expect(flags.difference([], [])).toEqual([])
|
||||
expect(flags.difference(['A'], [])).toEqual(['A'])
|
||||
expect(flags.difference(['A', 'B'], ['B', 'C'])).toEqual(['A'])
|
||||
expect(flags.difference(['B', 'C'], ['A', 'B'])).toEqual(['C'])
|
||||
expect(flags.difference(['D'], ['A', 'E'])).toEqual(['D'])
|
||||
})
|
||||
|
||||
test('intersection', () => {
|
||||
const flags = new ArrayFlagSet<string>()
|
||||
|
||||
expect(flags.intersection([], [])).toEqual([])
|
||||
expect(flags.intersection(['A'], [])).toEqual([])
|
||||
expect(flags.intersection(['A'], ['B'])).toEqual([])
|
||||
expect(flags.intersection(['A'], ['A', 'B'])).toEqual(['A'])
|
||||
expect(flags.intersection(['A', 'B', 'D'], ['A', 'C'])).toEqual(['A'])
|
||||
expect(flags.intersection(['A', 'B', 'D'], ['A', 'B', 'C'])).toEqual([
|
||||
'A',
|
||||
'B',
|
||||
])
|
||||
})
|
||||
|
||||
test('isSuperset', () => {
|
||||
const flags = new ArrayFlagSet<string>()
|
||||
|
||||
expect(flags.isSuperset([], [])).toBe(true)
|
||||
expect(flags.isSuperset(['A', 'B'], [])).toBe(true)
|
||||
expect(flags.isSuperset(['A', 'B'], ['A'])).toBe(true)
|
||||
expect(flags.isSuperset(['A', 'B'], ['A', 'B'])).toBe(true)
|
||||
expect(flags.isSuperset([], ['A', 'B'])).toBe(false)
|
||||
expect(flags.isSuperset(['C', 'D'], ['B'])).toBe(false)
|
||||
})
|
||||
|
||||
test('enumerate', () => {
|
||||
const flags = new ArrayFlagSet<string>()
|
||||
|
||||
expect([...flags.enumerate([])]).toEqual([])
|
||||
expect([...flags.enumerate(['A'])]).toEqual(['A'])
|
||||
expect([...flags.enumerate(['A', 'B', 'C'])]).toEqual(['A', 'B', 'C'])
|
||||
})
|
||||
})
|
||||
66
node/tests/flagsets/base64.test.ts
Normal file
66
node/tests/flagsets/base64.test.ts
Normal file
@@ -0,0 +1,66 @@
|
||||
import { Base64BitFlagSet } from '~'
|
||||
|
||||
describe(Base64BitFlagSet, () => {
|
||||
test('none', () => {
|
||||
const flags = new Base64BitFlagSet()
|
||||
|
||||
expect(flags.none()).toEqual('')
|
||||
})
|
||||
|
||||
test('union', () => {
|
||||
const flags = new Base64BitFlagSet()
|
||||
|
||||
expect(flags.union('', '')).toEqual('')
|
||||
expect(flags.union('A', 'A')).toEqual('')
|
||||
expect(flags.union('B', 'A')).toEqual('B')
|
||||
expect(flags.union('A', 'C')).toEqual('C')
|
||||
expect(flags.union('B', 'C')).toEqual('D')
|
||||
expect(flags.union('D', 'G')).toEqual('H')
|
||||
})
|
||||
|
||||
test('difference', () => {
|
||||
const flags = new Base64BitFlagSet()
|
||||
|
||||
expect(flags.difference('', '')).toEqual('')
|
||||
expect(flags.difference('A', 'A')).toEqual('')
|
||||
expect(flags.difference('B', 'A')).toEqual('B')
|
||||
expect(flags.difference('D', 'G')).toEqual('B')
|
||||
expect(flags.difference('G', 'D')).toEqual('E')
|
||||
expect(flags.difference('IB', 'R')).toEqual('IB')
|
||||
})
|
||||
|
||||
test('intersection', () => {
|
||||
const flags = new Base64BitFlagSet()
|
||||
|
||||
expect(flags.intersection('', '')).toEqual('')
|
||||
expect(flags.intersection('A', 'A')).toEqual('')
|
||||
expect(flags.intersection('B', 'A')).toEqual('')
|
||||
expect(flags.intersection('B', 'C')).toEqual('')
|
||||
expect(flags.intersection('B', 'D')).toEqual('B')
|
||||
expect(flags.intersection('L', 'F')).toEqual('B')
|
||||
expect(flags.intersection('L', 'H')).toEqual('D')
|
||||
})
|
||||
|
||||
test('isSuperset', () => {
|
||||
const flags = new Base64BitFlagSet()
|
||||
|
||||
expect(flags.isSuperset('A', 'A')).toBe(true)
|
||||
expect(flags.isSuperset('D', 'A')).toBe(true)
|
||||
expect(flags.isSuperset('D', 'B')).toBe(true)
|
||||
expect(flags.isSuperset('D', 'D')).toBe(true)
|
||||
expect(flags.isSuperset('A', 'D')).toBe(false)
|
||||
expect(flags.isSuperset('I', 'E')).toBe(false)
|
||||
})
|
||||
|
||||
test('enumerate', () => {
|
||||
const flags = new Base64BitFlagSet()
|
||||
|
||||
expect([...flags.enumerate('A')]).toEqual([])
|
||||
expect([...flags.enumerate('B')]).toEqual([1])
|
||||
expect([...flags.enumerate('C')]).toEqual([2])
|
||||
expect([...flags.enumerate('D')]).toEqual([1, 2])
|
||||
expect([...flags.enumerate('L')]).toEqual([1, 2, 4])
|
||||
expect([...flags.enumerate('kB')]).toEqual([3, 6, 7])
|
||||
expect([...flags.enumerate('AAB')]).toEqual([13])
|
||||
})
|
||||
})
|
||||
62
node/tests/flagsets/bigint.test.ts
Normal file
62
node/tests/flagsets/bigint.test.ts
Normal file
@@ -0,0 +1,62 @@
|
||||
import { BigBitFlagSet } from '~'
|
||||
|
||||
describe(BigBitFlagSet, () => {
|
||||
test('none', () => {
|
||||
const flags = new BigBitFlagSet()
|
||||
|
||||
expect(flags.none()).toEqual(0n)
|
||||
})
|
||||
|
||||
test('union', () => {
|
||||
const flags = new BigBitFlagSet()
|
||||
|
||||
expect(flags.union(0n, 0n)).toEqual(0n)
|
||||
expect(flags.union(1n, 0n)).toEqual(1n)
|
||||
expect(flags.union(0n, 2n)).toEqual(2n)
|
||||
expect(flags.union(1n, 2n)).toEqual(3n)
|
||||
expect(flags.union(3n, 6n)).toEqual(7n)
|
||||
})
|
||||
|
||||
test('difference', () => {
|
||||
const flags = new BigBitFlagSet()
|
||||
|
||||
expect(flags.difference(0n, 0n)).toEqual(0n)
|
||||
expect(flags.difference(1n, 0n)).toEqual(1n)
|
||||
expect(flags.difference(3n, 6n)).toEqual(1n)
|
||||
expect(flags.difference(6n, 3n)).toEqual(4n)
|
||||
expect(flags.difference(8n, 17n)).toEqual(8n)
|
||||
})
|
||||
|
||||
test('intersection', () => {
|
||||
const flags = new BigBitFlagSet()
|
||||
|
||||
expect(flags.intersection(0n, 0n)).toEqual(0n)
|
||||
expect(flags.intersection(1n, 0n)).toEqual(0n)
|
||||
expect(flags.intersection(1n, 2n)).toEqual(0n)
|
||||
expect(flags.intersection(1n, 3n)).toEqual(1n)
|
||||
expect(flags.intersection(11n, 5n)).toEqual(1n)
|
||||
expect(flags.intersection(11n, 7n)).toEqual(3n)
|
||||
})
|
||||
|
||||
test('isSuperset', () => {
|
||||
const flags = new BigBitFlagSet()
|
||||
|
||||
expect(flags.isSuperset(0n, 0n)).toBe(true)
|
||||
expect(flags.isSuperset(3n, 0n)).toBe(true)
|
||||
expect(flags.isSuperset(3n, 1n)).toBe(true)
|
||||
expect(flags.isSuperset(3n, 3n)).toBe(true)
|
||||
expect(flags.isSuperset(0n, 3n)).toBe(false)
|
||||
expect(flags.isSuperset(8n, 4n)).toBe(false)
|
||||
})
|
||||
|
||||
test('enumerate', () => {
|
||||
const flags = new BigBitFlagSet()
|
||||
|
||||
expect([...flags.enumerate(0n)]).toEqual([])
|
||||
expect([...flags.enumerate(1n)]).toEqual([1n])
|
||||
expect([...flags.enumerate(2n)]).toEqual([2n])
|
||||
expect([...flags.enumerate(3n)]).toEqual([1n, 2n])
|
||||
expect([...flags.enumerate(11n)]).toEqual([1n, 2n, 8n])
|
||||
expect([...flags.enumerate(100n)]).toEqual([4n, 32n, 64n])
|
||||
})
|
||||
})
|
||||
73
node/tests/flagsets/collection.test.ts
Normal file
73
node/tests/flagsets/collection.test.ts
Normal file
@@ -0,0 +1,73 @@
|
||||
import { CollectionFlagSet } from '~'
|
||||
|
||||
function set<T>(...values: T[]): Set<T> {
|
||||
return new Set<T>(values)
|
||||
}
|
||||
|
||||
describe(CollectionFlagSet, () => {
|
||||
test('none', () => {
|
||||
const flags = new CollectionFlagSet<string>()
|
||||
|
||||
expect(flags.none()).toEqual(set())
|
||||
})
|
||||
|
||||
test('union', () => {
|
||||
const flags = new CollectionFlagSet<string>()
|
||||
|
||||
expect(flags.union(set(), set())).toEqual(set())
|
||||
expect(flags.union(set('A'), set())).toEqual(set('A'))
|
||||
expect(flags.union(set(), set('B'))).toEqual(set('B'))
|
||||
expect(flags.union(set('A'), set('B'))).toEqual(set('A', 'B'))
|
||||
expect(flags.union(set('A', 'B'), set('B', 'C'))).toEqual(
|
||||
set('A', 'B', 'C')
|
||||
)
|
||||
})
|
||||
|
||||
test('difference', () => {
|
||||
const flags = new CollectionFlagSet<string>()
|
||||
|
||||
expect(flags.difference(set(), set())).toEqual(set())
|
||||
expect(flags.difference(set('A'), set())).toEqual(set('A'))
|
||||
expect(flags.difference(set('A', 'B'), set('B', 'C'))).toEqual(set('A'))
|
||||
expect(flags.difference(set('B', 'C'), set('A', 'B'))).toEqual(set('C'))
|
||||
expect(flags.difference(set('D'), set('A', 'E'))).toEqual(set('D'))
|
||||
})
|
||||
|
||||
test('intersection', () => {
|
||||
const flags = new CollectionFlagSet<string>()
|
||||
|
||||
expect(flags.intersection(set(), set())).toEqual(set())
|
||||
expect(flags.intersection(set('A'), set())).toEqual(set())
|
||||
expect(flags.intersection(set('A'), set('B'))).toEqual(set())
|
||||
expect(flags.intersection(set('A'), set('A', 'B'))).toEqual(set('A'))
|
||||
expect(flags.intersection(set('A', 'B', 'D'), set('A', 'C'))).toEqual(
|
||||
set('A')
|
||||
)
|
||||
expect(
|
||||
flags.intersection(set('A', 'B', 'D'), set('A', 'B', 'C'))
|
||||
).toEqual(set('A', 'B'))
|
||||
})
|
||||
|
||||
test('isSuperset', () => {
|
||||
const flags = new CollectionFlagSet<string>()
|
||||
|
||||
expect(flags.isSuperset(set(), set())).toBe(true)
|
||||
expect(flags.isSuperset(set('A', 'B'), set())).toBe(true)
|
||||
expect(flags.isSuperset(set('A', 'B'), set('A'))).toBe(true)
|
||||
expect(flags.isSuperset(set('A', 'B'), set('A', 'B'))).toBe(true)
|
||||
expect(flags.isSuperset(set(), set('A', 'B'))).toBe(false)
|
||||
expect(flags.isSuperset(set('C', 'D'), set('B'))).toBe(false)
|
||||
})
|
||||
|
||||
test('enumerate', () => {
|
||||
const flags = new CollectionFlagSet<string>()
|
||||
|
||||
expect([...flags.enumerate(set())]).toEqual([])
|
||||
expect([...flags.enumerate(set('A'))]).toEqual(['A'])
|
||||
expect([...flags.enumerate(set('A', 'B', 'C'))]).toEqual([
|
||||
'A',
|
||||
'B',
|
||||
'C',
|
||||
])
|
||||
})
|
||||
})
|
||||
62
node/tests/flagsets/number.test.ts
Normal file
62
node/tests/flagsets/number.test.ts
Normal file
@@ -0,0 +1,62 @@
|
||||
import { BitFlagSet } from '~'
|
||||
|
||||
describe(BitFlagSet, () => {
|
||||
test('none', () => {
|
||||
const flags = new BitFlagSet()
|
||||
|
||||
expect(flags.none()).toEqual(0)
|
||||
})
|
||||
|
||||
test('union', () => {
|
||||
const flags = new BitFlagSet()
|
||||
|
||||
expect(flags.union(0, 0)).toEqual(0)
|
||||
expect(flags.union(1, 0)).toEqual(1)
|
||||
expect(flags.union(0, 2)).toEqual(2)
|
||||
expect(flags.union(1, 2)).toEqual(3)
|
||||
expect(flags.union(3, 6)).toEqual(7)
|
||||
})
|
||||
|
||||
test('difference', () => {
|
||||
const flags = new BitFlagSet()
|
||||
|
||||
expect(flags.difference(0, 0)).toEqual(0)
|
||||
expect(flags.difference(1, 0)).toEqual(1)
|
||||
expect(flags.difference(3, 6)).toEqual(1)
|
||||
expect(flags.difference(6, 3)).toEqual(4)
|
||||
expect(flags.difference(8, 17)).toEqual(8)
|
||||
})
|
||||
|
||||
test('intersection', () => {
|
||||
const flags = new BitFlagSet()
|
||||
|
||||
expect(flags.intersection(0, 0)).toEqual(0)
|
||||
expect(flags.intersection(1, 0)).toEqual(0)
|
||||
expect(flags.intersection(1, 2)).toEqual(0)
|
||||
expect(flags.intersection(1, 3)).toEqual(1)
|
||||
expect(flags.intersection(11, 5)).toEqual(1)
|
||||
expect(flags.intersection(11, 7)).toEqual(3)
|
||||
})
|
||||
|
||||
test('isSuperset', () => {
|
||||
const flags = new BitFlagSet()
|
||||
|
||||
expect(flags.isSuperset(0, 0)).toBe(true)
|
||||
expect(flags.isSuperset(3, 0)).toBe(true)
|
||||
expect(flags.isSuperset(3, 1)).toBe(true)
|
||||
expect(flags.isSuperset(3, 3)).toBe(true)
|
||||
expect(flags.isSuperset(0, 3)).toBe(false)
|
||||
expect(flags.isSuperset(8, 4)).toBe(false)
|
||||
})
|
||||
|
||||
test('enumerate', () => {
|
||||
const flags = new BitFlagSet()
|
||||
|
||||
expect([...flags.enumerate(0)]).toEqual([])
|
||||
expect([...flags.enumerate(1)]).toEqual([1])
|
||||
expect([...flags.enumerate(2)]).toEqual([2])
|
||||
expect([...flags.enumerate(3)]).toEqual([1, 2])
|
||||
expect([...flags.enumerate(11)]).toEqual([1, 2, 8])
|
||||
expect([...flags.enumerate(100)]).toEqual([4, 32, 64])
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user