import { describe, expect, it } from 'vitest' import { World } from '../src/renderer/game/engine/runtime/World' import { WorldSim } from '../src/renderer/game/engine/sim/WorldSim' function mk(seed: string): World { return World.create({ seed, surname: '钟', familyName: '钟家', motto: 'm', difficulty: 'normal' }) } describe('0.1.30 矩阵:世界规则组合(30 参数 × 3 断言)', () => { it.each(Array.from({ length: 30 }, (_, i) => [i * 31 + 6] as const))( 'seed %d:era/tide/池/气候 全规则组合', (seed) => { const w = mk(`rule-${seed}`) for (let i = 0; i < 240; i++) { if (w.state.gameOver) break w.advanceMonth() while (w.state.pendingEvent) w.applyEventChoice(w.state.pendingEvent, 0) } const snap = new WorldSim(w).snapshot() expect(['盛世', '平世', '乱世', '末法']).toContain(snap.era) expect(snap.tide).toBeGreaterThan(0.5) expect(snap.tide).toBeLessThan(1.45) const poolVals = Object.values(snap.market) expect(poolVals.length).toBeGreaterThanOrEqual(3) }) it.each(Array.from({ length: 20 }, (_, i) => [i * 17 + 9] as const))( 'seed %d:灾年与衰退组合(60 月)', (seed) => { const w = mk(`cal-${seed}`) for (let i = 0; i < 60; i++) w.advanceMonth() const ws = w.state.worldSim as { calamity?: string; calamityLeft?: number } if (ws.calamity) expect(ws.calamityLeft ?? 0).toBeGreaterThan(0) expect(w.state.family.stones).toBeGreaterThanOrEqual(0) expect(typeof w.state.family.reputation).toBe('number') }) })