copied set implementations from MultiFlag JS
This commit is contained in:
81
node/tests/_archive/array.test.ts
Normal file
81
node/tests/_archive/array.test.ts
Normal file
@@ -0,0 +1,81 @@
|
||||
import { ArrayFlagSet } from '@module'
|
||||
|
||||
|
||||
test('Normalise to minimum', () => {
|
||||
const flags = new ArrayFlagSet<string>()
|
||||
const flagA = flags.flag('A')
|
||||
const flagB = flags.flag('B', flagA)
|
||||
const flagC = flags.flag('C', flagA)
|
||||
const flagD = flags.flag('D', flagC)
|
||||
|
||||
expect(flags.minimum([])).toEqual([])
|
||||
expect(flags.minimum(['A'])).toEqual(['A'])
|
||||
expect(flags.minimum(['B'])).toEqual([])
|
||||
expect(flags.minimum(['A', 'B'])).toEqual(['A', 'B'])
|
||||
expect(flags.minimum(['A', 'B', 'D'])).toEqual(['A', 'B'])
|
||||
expect(flags.minimum(['A', 'C', 'D'])).toEqual(['A', 'C', 'D'])
|
||||
expect(flags.minimum(['A', 'E'])).toEqual(['A'])
|
||||
})
|
||||
|
||||
test('Normalise to maximum', () => {
|
||||
const flags = new ArrayFlagSet<string>()
|
||||
const flagA = flags.flag('A')
|
||||
const flagB = flags.flag('B', flagA)
|
||||
const flagC = flags.flag('C', flagA)
|
||||
const flagD = flags.flag('D', flagC)
|
||||
|
||||
expect(flags.maximum([])).toEqual([])
|
||||
expect(flags.maximum(['A'])).toEqual(['A'])
|
||||
expect(flags.maximum(['B'])).toEqual(['B', 'A'])
|
||||
expect(flags.maximum(['A', 'B'])).toEqual(['A', 'B'])
|
||||
expect(flags.maximum(['A', 'B', 'D'])).toEqual(['A', 'B', 'D', 'C'])
|
||||
expect(flags.maximum(['A', 'C', 'D'])).toEqual(['A', 'C', 'D'])
|
||||
expect(flags.maximum(['A', 'E'])).toEqual(['A'])
|
||||
})
|
||||
|
||||
test('Add to array', () => {
|
||||
const flags = new ArrayFlagSet<string>()
|
||||
const flagB = flags.flag('B')
|
||||
const flagC = flags.flag('C')
|
||||
const flagsBAndC = flags.flag(flagB, flagC)
|
||||
|
||||
expect(flagB.addTo(['A'])).toEqual(['A', 'B'])
|
||||
expect(flagC.addTo(['A'])).toEqual(['A', 'C'])
|
||||
expect(flagsBAndC.addTo(['A'])).toEqual(['A', 'B', 'C'])
|
||||
})
|
||||
|
||||
test('Remove from array', () => {
|
||||
const flags = new ArrayFlagSet<string>()
|
||||
const flagA = flags.flag('A')
|
||||
const flagB = flags.flag('B')
|
||||
const flagC = flags.flag('C', flagA)
|
||||
|
||||
expect(flagA.removeFrom(['A', 'B', 'C'])).toEqual(['B'])
|
||||
expect(flagB.removeFrom(['A', 'B', 'C'])).toEqual(['A', 'C'])
|
||||
expect(flagC.removeFrom(['A', 'B', 'C'])).toEqual(['A', 'B'])
|
||||
})
|
||||
|
||||
test('Is in array', () => {
|
||||
const flags = new ArrayFlagSet<string>()
|
||||
const flagA = flags.flag('A')
|
||||
const flagB = flags.flag('B')
|
||||
const flagC = flags.flag('C', flagA)
|
||||
|
||||
expect(flagA.isIn(['A'])).toBe(true)
|
||||
expect(flagB.isIn(['A', 'B'])).toBe(true)
|
||||
expect(flagC.isIn(['C'])).toBe(false)
|
||||
expect(flagC.isIn(['A', 'C'])).toBe(true)
|
||||
})
|
||||
|
||||
test('Is abstract', () => {
|
||||
const flags = new ArrayFlagSet<string>()
|
||||
const flagA = flags.flag('A')
|
||||
const flagB = flags.flag('B')
|
||||
const flagsAAndB = flags.flag(flagA, flagB)
|
||||
const flagC = flags.flag('C', flagsAAndB)
|
||||
|
||||
expect(flagA.isAbstract).toBe(false)
|
||||
expect(flagB.isAbstract).toBe(false)
|
||||
expect(flagsAAndB.isAbstract).toBe(true)
|
||||
expect(flagC.isAbstract).toBe(false)
|
||||
})
|
||||
Reference in New Issue
Block a user