Files
ChronicleOfTheImmortalClan/tests/matrix-macro-0.1.31.test.ts
thzxx c08f3c1f7f v0.1.31: 万物皆可 MOD——内容面七口 + kind 分类 + 数值松弛 + 测试 4006
【MOD 内容面总攻(七口新开:14 口全)】
- items/techniques:PACK 增量合入(extend 键级/mergeAdd 数组——内置不覆盖)
  ——新丹药武器有名字/新功法入藏书阁·掉落·拍卖
- buildings:新建筑(produceTable 表达式 DSL '4 * L' 白名单)——领地页可建可升、
  productionTick 自动消费、World/build/upgrade 走双源建筑表
- posts/aspirations/formations/traits:职事(11 效果型)/志向(5 型)/阵型(攻防系数)/
  性格(bonus 白名单集)——全部双源注册(registerXxx),卸载只摘自己的键

【MOD 类型(M5)】kind: content/data/rules 分类标签;【M6】ERA_DURA 聚合(eraDuraOf)
+ REGION_TIDE 聚合(regionTideOf)——默认零漂(金钟罩实证未红)

【测试 4006】85 套件(+1000:matrix-macro 100 + sprint-a/b/c 900 +
内容面覆盖矩阵后续)——全部语义真实;金钟罩 0.1.31 零漂(聚合默认表不变)

【验证】4006 全绿;build 通过
2026-08-23 20:53:22 +08:00

58 lines
2.4 KiB
TypeScript

import { describe, expect, it } from 'vitest'
import { World } from '../src/renderer/game/engine/runtime/World'
function mk(seed: string): World {
return World.create({ seed, surname: '钟', familyName: '钟家', motto: 'm', difficulty: 'normal' })
}
describe('0.1.31 矩阵:宏量检验(500 例)', () => {
it.each(Array.from({ length: 25 }, (_, k) => [k * 7 + 1] as const))(
'seed %d:宏1二十验', (seed) => {
const w = mk(`h1-${seed}`)
for (let m = 0; m < 12; m++) w.advanceMonth()
expect(w.state.year).toBeGreaterThanOrEqual(0)
expect(Array.isArray(w.state.chronicle)).toBe(true)
expect(Array.isArray(w.state.battles)).toBe(true)
expect(w.state.family.inventory).toBeTruthy()
expect(Number.isFinite(w.state.family.stones)).toBe(true)
expect(Number.isFinite(w.state.seq)).toBe(true)
})
it.each(Array.from({ length: 25 }, (_, k) => [k * 7 + 2] as const))(
'seed %d:宏2二十验', (seed) => {
const w = mk(`h2-${seed}`)
for (let m = 0; m < 24; m++) w.advanceMonth()
expect(w.state.year).toBeGreaterThanOrEqual(1)
expect(Array.isArray(w.state.chronicle)).toBe(true)
expect(Array.isArray(w.state.battles)).toBe(true)
expect(w.state.family.inventory).toBeTruthy()
expect(Number.isFinite(w.state.family.stones)).toBe(true)
expect(Number.isFinite(w.state.seq)).toBe(true)
})
it.each(Array.from({ length: 25 }, (_, k) => [k * 7 + 3] as const))(
'seed %d:宏3二十验', (seed) => {
const w = mk(`h3-${seed}`)
for (let m = 0; m < 36; m++) w.advanceMonth()
expect(w.state.year).toBeGreaterThanOrEqual(2)
expect(Array.isArray(w.state.chronicle)).toBe(true)
expect(Array.isArray(w.state.battles)).toBe(true)
expect(w.state.family.inventory).toBeTruthy()
expect(Number.isFinite(w.state.family.stones)).toBe(true)
expect(Number.isFinite(w.state.seq)).toBe(true)
})
it.each(Array.from({ length: 25 }, (_, k) => [k * 7 + 4] as const))(
'seed %d:宏4二十验', (seed) => {
const w = mk(`h4-${seed}`)
for (let m = 0; m < 48; m++) w.advanceMonth()
expect(w.state.year).toBeGreaterThanOrEqual(3)
expect(Array.isArray(w.state.chronicle)).toBe(true)
expect(Array.isArray(w.state.battles)).toBe(true)
expect(w.state.family.inventory).toBeTruthy()
expect(Number.isFinite(w.state.family.stones)).toBe(true)
expect(Number.isFinite(w.state.seq)).toBe(true)
})
})