diff options
| author | Somhairle H. Marisol <[email protected]> | 2026-09-22 04:37:51 +0800 |
|---|---|---|
| committer | Somhairle H. Marisol <[email protected]> | 2026-09-22 04:37:51 +0800 |
| commit | 8654557d9ba1c98208b67f5909f7dd7917e10d50 (patch) | |
| tree | 7cc64ad5f533f45b72dd7223b274327cce6493f6 /src/LivingVillage.Kernel.Tests/M6aTests.fs | |
| parent | 9b31590d6ad5f83505dc665e02b8ff477f26cc1a (diff) | |
| download | living-village-8654557d9ba1c98208b67f5909f7dd7917e10d50.tar.gz | |
test(kernel): 512x384 参数化边界存档 round-trip 与 NPC 边界回归(P23)
- Sim.configureBounds 512 384 下 v2 存档 round-trip 且同 world 两次保存逐字节一致,
读回再保存仍与原文一致;v1 的 64x48 兼容由既有用例覆盖。
- DriverHarness 长跑 20000 tick 断言 avatar 与全部 NPC 有限且留在 [0,max] 内。
- Kernel 测试 90 -> 92。
Diffstat (limited to 'src/LivingVillage.Kernel.Tests/M6aTests.fs')
| -rw-r--r-- | src/LivingVillage.Kernel.Tests/M6aTests.fs | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/src/LivingVillage.Kernel.Tests/M6aTests.fs b/src/LivingVillage.Kernel.Tests/M6aTests.fs index 9348b0f..94341a1 100644 --- a/src/LivingVillage.Kernel.Tests/M6aTests.fs +++ b/src/LivingVillage.Kernel.Tests/M6aTests.fs @@ -314,3 +314,29 @@ type M6aTests () = finally Sim.configureBounds 64 48 if File.Exists path then File.Delete path + + /// P23:512x384 参数化边界在存档 v2 中 round-trip;同 world 两次保存逐字节一致, + /// 读回后再次保存仍与原文一致(v1 的 64x48 兼容由 SaveV1LegacyStillReadable 覆盖)。 + [<TestMethod>] + member _.SaveRoundTrips512x384BoundsAndIsByteStable () = + let path = "p23-bounds-512-v2.save" + let path2 = path + ".2" + try + Sim.configureBounds 512 384 + let world = Sim.initialWorld (uint64 4242) + WorldSave.saveToFile path world + WorldSave.saveToFile path2 world + let text = File.ReadAllText path + Assert.IsTrue(text.StartsWith("LV_WORLD_SAVE_V2"), "bounds save must stay v2") + Assert.AreEqual<string>(text, File.ReadAllText path2) + Sim.configureBounds 64 48 + match WorldSave.loadFromFile path with + | Error failure -> Assert.Fail(sprintf "512x384 bounds save should load: %s" failure) + | Ok restored -> + Assert.AreEqual<int>(512, Sim.mapWidthTiles) + Assert.AreEqual<int>(384, Sim.mapHeightTiles) + Assert.AreEqual<string>(text, WorldSave.save restored) + finally + Sim.configureBounds 64 48 + if File.Exists path then File.Delete path + if File.Exists path2 then File.Delete path2 |
