mirror of
https://github.com/VickScarlet/lifeRestart.git
synced 2026-08-27 16:56:48 +08:00
119 lines
3.7 KiB
TypeScript
119 lines
3.7 KiB
TypeScript
import { expect, test, describe } from 'bun:test'
|
|
import { check } from '.'
|
|
|
|
// 定义属性 mock 字典的类型契约
|
|
interface MockProperties {
|
|
[key: string]: number | number[]
|
|
}
|
|
|
|
/**
|
|
* 属性注入高阶函数:模拟角色属性管理类
|
|
*/
|
|
function withProp(prop: MockProperties) {
|
|
return (condition: string): boolean => check(prop, condition)
|
|
}
|
|
|
|
describe('condition', () => {
|
|
// 实例化一个带满各种脏数据(数字、数组、空数组)的强类型测试代理
|
|
const check = withProp({
|
|
n1: 0,
|
|
n2: -10,
|
|
n3: 10,
|
|
nl1: [1, 2, 3],
|
|
nl2: [0],
|
|
nl3: [],
|
|
})
|
|
|
|
test('gt(>)', () => {
|
|
expect(check('n3>11')).toBe(false)
|
|
expect(check('n3>10')).toBe(false)
|
|
expect(check('n3>9')).toBe(true)
|
|
})
|
|
|
|
test('gte(>=)', () => {
|
|
expect(check('n3>=11')).toBe(false)
|
|
expect(check('n3>=10')).toBe(true)
|
|
expect(check('n3>=9')).toBe(true)
|
|
})
|
|
|
|
test('lt(<)', () => {
|
|
expect(check('n3<9')).toBe(false)
|
|
expect(check('n3<10')).toBe(false)
|
|
expect(check('n3<11')).toBe(true)
|
|
})
|
|
|
|
test('lte(<=)', () => {
|
|
expect(check('n3<=9')).toBe(false)
|
|
expect(check('n3<=10')).toBe(true)
|
|
expect(check('n3<=11')).toBe(true)
|
|
})
|
|
|
|
test('eq(=)', () => {
|
|
expect(check('n3=9')).toBe(false)
|
|
expect(check('n3=10')).toBe(true)
|
|
expect(check('n3=11')).toBe(false)
|
|
expect(check('nl1=0')).toBe(false)
|
|
expect(check('nl1=1')).toBe(true)
|
|
expect(check('nl1=2')).toBe(true)
|
|
expect(check('nl1=3')).toBe(true)
|
|
})
|
|
|
|
test('ne(!=)', () => {
|
|
expect(check('n3!=9')).toBe(true)
|
|
expect(check('n3!=10')).toBe(false)
|
|
expect(check('n3!=11')).toBe(true)
|
|
expect(check('nl1!=0')).toBe(true)
|
|
expect(check('nl1!=1')).toBe(false)
|
|
expect(check('nl1!=2')).toBe(false)
|
|
expect(check('nl1!=3')).toBe(false)
|
|
})
|
|
|
|
test('in(?)', () => {
|
|
expect(check('n3?[1,2,3]')).toBe(false)
|
|
expect(check('n3?[10,11,12]')).toBe(true)
|
|
expect(check('nl1?[0,1]')).toBe(true)
|
|
expect(check('nl2?[1,2,3]')).toBe(false)
|
|
expect(check('nl3?[1,2,3]')).toBe(false)
|
|
expect(check('nl2?[]')).toBe(false)
|
|
expect(check('nl3?[]')).toBe(false)
|
|
})
|
|
|
|
test('notin(!)', () => {
|
|
expect(check('n3![1,2,3]')).toBe(true)
|
|
expect(check('n3![10,11,12]')).toBe(false)
|
|
expect(check('nl1![0,1]')).toBe(false)
|
|
expect(check('nl2![1,2,3]')).toBe(true)
|
|
expect(check('nl3![1,2,3]')).toBe(true)
|
|
expect(check('nl2![]')).toBe(true)
|
|
expect(check('nl3![]')).toBe(true)
|
|
})
|
|
|
|
test('and(&)', () => {
|
|
expect(check('n1>=0&n2<0')).toBe(true)
|
|
expect(check('n2>0&n3>0')).toBe(false)
|
|
expect(check('n2<0&n3<0')).toBe(false)
|
|
expect(check('n2<0&n3>0')).toBe(true)
|
|
expect(check('n1=0&n2<0&n3>0')).toBe(true)
|
|
expect(check('n1=0&n2>0&n3>0')).toBe(false)
|
|
})
|
|
|
|
test('or(|)', () => {
|
|
expect(check('n1>=0|n2<0')).toBe(true)
|
|
expect(check('n2>0|n3>0')).toBe(true)
|
|
expect(check('n2<0|n3<0')).toBe(true)
|
|
expect(check('n2<0|n3>0')).toBe(true)
|
|
expect(check('n2>0|n3<0')).toBe(false)
|
|
expect(check('n1=0|n2<0|n3>0')).toBe(true)
|
|
expect(check('n1=0|n2>0|n3>0')).toBe(true)
|
|
expect(check('n1!=0|n2>0|n3<0')).toBe(false)
|
|
})
|
|
|
|
test('mix', () => {
|
|
expect(check('(n1=0|n2<0|n3>0)&(n1=0|n2>0|n3>0)')).toBe(true)
|
|
expect(check('(n1=0|n2<0|n3>0)&(n1!=0|n2>0|n3<0)')).toBe(false)
|
|
expect(check('n1=0|n2<0|n3>0&n1!=0|n2>0|n3<0')).toBe(true)
|
|
expect(check('(n1>0|n1?[-10,0])&(n2>0|n3![0,1])')).toBe(true)
|
|
expect(check('(n1>0&n1?[-10,0])|(n2<0&n3![0,1])')).toBe(true)
|
|
})
|
|
})
|