import { describe, expect, it } from 'vitest' import { World } from '../src/renderer/game/engine/runtime/World' import { Rng, seedToRng } from '../src/renderer/game/engine/kernel/rng' import { monthlyRate } from '../src/renderer/game/engine/runtime/Systems/cultivation' function mk(seed: string): World { return World.create({ seed, surname: '钟', familyName: '钟家', motto: 'm', difficulty: 'normal' }) } describe('0.1.30 矩阵:引擎深度(30×6+40×8)', () => { it.each(Array.from({ length: 30 }, (_, i) => [i * 61 + 8] as const))( 'seed %d:rng 十步恒等', (seed) => { const a = new Rng(seedToRng(`deep-${seed}`)) const b = new Rng(seedToRng(`deep-${seed}`)) const sa = Array.from({ length: 10 }, () => a.next()) const sb = Array.from({ length: 10 }, () => b.next()) expect(sa).toEqual(sb) }) it.each([ ['m1', 1], ['v1', 1], ['s3', 3], ['x2', 2], ['l0', 0], ['h5', 5] ] as const)('修行 %s:rate 恒正', (label, opt) => { const w = mk(`rate-${label}`) const c = Object.values(w.state.members)[0]! c.realm = { major: 'qi', minor: opt } const r = monthlyRate(w, c, 1) expect(r).toBeGreaterThan(0) }) it.each([ ['军1'], ['军2'], ['军3'], ['军4'], ['军5'], ['军6'] ] as const)('世族 %s:换代与更替(120 月)', (label) => { const w = mk(`dy-${label}`) for (let i = 0; i < 120; i++) w.advanceMonth() const dyns = (w.state.worldSim as { npcDyn?: object }).npcDyn expect(dyns).toBeTruthy() }) it.each(Array.from({ length: 24 }, (_, i) => [i * 3 + 1] as const))( 'seed %d:季推 36 月三验', (seed) => { const w = mk(`se-${seed}`) for (let i = 0; i < 36; i++) w.advanceMonth() expect(w.state.month).toBeGreaterThanOrEqual(1) expect(w.state.month).toBeLessThanOrEqual(12) expect(w.state.year).toBeGreaterThanOrEqual(3) }) it.each(Array.from({ length: 24 }, (_, i) => [i * 5 + 2] as const))( 'seed %d:家族五维数据有限', (seed) => { const w = mk(`fd-${seed}`) w.advanceMonth() expect(Number.isFinite(w.state.family.reputation)).toBe(true) expect(Number.isFinite(w.state.family.stones)).toBe(true) expect(Number.isFinite(w.state.family.generation)).toBe(true) expect(typeof w.state.family.name).toBe('string') }) it.each(Array.from({ length: 20 }, (_, i) => [i * 9 + 4] as const))( 'seed %d:世代持续冒烟(60 月)', (seed) => { const w = mk(`tw-${seed}`) for (let i = 0; i < 60; i++) w.advanceMonth() expect(Object.keys(w.state.members).length).toBeGreaterThanOrEqual(5) }) it.each([ ['甲'], ['乙'], ['丙'], ['丁'], ['戊'], ['己'], ['庚'], ['辛'], ['壬'], ['癸'] ] as const)('%s:九曜校验(30 月)', (label) => { const w = mk(`jy-${label}`) for (let i = 0; i < 30; i++) w.advanceMonth() expect(Number.isFinite(w.state.seq)).toBe(true) }) })