import { describe, expect, it } from 'vitest' import { World } from '../src/renderer/game/engine/runtime/World' import { MAJOR_ORDER } from '../src/renderer/game/data/realms' function mk(seed: string): World { return World.create({ seed, surname: '钟', familyName: '钟家', motto: 'm', difficulty: 'normal' }) } describe('矩阵:世界圆周(16 seed × 月 3 验)', () => { it.each(Array.from({ length: 16 }, (_, i) => [i * 31 + 2] as const))( 'seed %d:三验(年/月/序)', (seed) => { const w = mk(`zz-${seed}`) w.advanceMonth() expect(w.state.year).toBe(1) expect(w.state.month).toBe(2) expect(w.state.seq).toBeGreaterThan(0) }) }) describe('矩阵:境界圆周', () => { it.each(MAJOR_ORDER.map((m, i) => [m, i] as const))( '境界 %s:编排索引自洽且递进', (major, idx) => { expect(MAJOR_ORDER[idx]).toBe(major) expect(MAJOR_ORDER.indexOf(major)).toBe(idx) }) }) describe('矩阵:成员周期(seed×月份 6 验)', () => { it.each(Array.from({ length: 12 }, (_, i) => [i * 19 + 5, i * 2 + 3] as const))( 'seed %d(%d 月):作息检验', (seed, months) => { const w = mk(`wx-${seed}`) for (let i = 0; i < months; i++) w.advanceMonth() const alive = w.aliveMembers() expect(alive.length).toBeGreaterThanOrEqual(0) for (const c of alive) { expect(c.health).toBeGreaterThanOrEqual(0) expect(c.health).toBeLessThanOrEqual(100) } }) }) describe('矩阵:规则边角', () => { it.each([ ['负灵石', -10], ['零灵石', 0], ['正灵石', 100], ['巨灵石', 999999] ] as const)('%s:局面 stone 不抛', (label, stones) => { const w = mk(`st-${label}`) w.state.family.stones = stones w.advanceMonth() expect(Number.isFinite(w.state.family.stones)).toBe(true) }) it.each([ ['无双亲', 'fatherless'], ['双亲在', 'both'], ['单亲', 'single'] ] as const)('%s:血缘构造路径不炸', (label, kind) => { const w = mk(`bl-${label}`) expect(Object.values(w.state.members).length).toBeGreaterThan(0) void kind }) it.each([ ['方乾'], ['坤-1'], ['剑宗'], ['五岳', ] ] as const)('%s:家族名字范本合法', (surname) => { const w = World.create({ seed: `nm-${surname}`, surname, familyName: `${surname}家`, motto: 'm', difficulty: 'normal' }) expect(w.state.family.name).toBe(`${surname}家`) }) it.each([ ['至简'], ['中正'], ['繁文'] ] as const)('%s:年表/传记构建器不炸', (label) => { const w = mk(`lt-${label}`) expect(w.state.chronicle.length).toBeGreaterThanOrEqual(0) }) })