diff options
Diffstat (limited to 'src/LivingVillage.Kernel.Tests')
| -rw-r--r-- | src/LivingVillage.Kernel.Tests/M6aTests.fs | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/src/LivingVillage.Kernel.Tests/M6aTests.fs b/src/LivingVillage.Kernel.Tests/M6aTests.fs index fc8cc3a..9348b0f 100644 --- a/src/LivingVillage.Kernel.Tests/M6aTests.fs +++ b/src/LivingVillage.Kernel.Tests/M6aTests.fs @@ -292,3 +292,25 @@ type M6aTests () = Assert.AreEqual<string>("渔夫", Occupation.nameOf Occupation.Fisher) Assert.AreEqual<string>("货郎", Occupation.nameOf Occupation.Peddler) Assert.AreEqual<string>("书生", Occupation.nameOf Occupation.Scholar) + + /// P20:存档 v2 的边界字段在非默认尺寸下必须 round-trip,读回后 + /// mapWidthTiles/mapHeightTiles 恢复且再次保存与原文逐字节一致。 + /// 旧 64x48 存档的 Round-trip 保持不变由既有 v1/v2 用例覆盖。 + [<TestMethod>] + member _.SaveRoundTripsParameterizedMapBounds () = + let path = "p20-bounds-v2.save" + try + Sim.configureBounds 256 192 + let world = Sim.initialWorld (uint64 4242) + WorldSave.saveToFile path world + let text = File.ReadAllText path + Assert.IsTrue(text.StartsWith("LV_WORLD_SAVE_V2"), "bounds save must stay v2") + match WorldSave.loadFromFile path with + | Error failure -> Assert.Fail(sprintf "bounds save should load: %s" failure) + | Ok restored -> + Assert.AreEqual<int>(256, Sim.mapWidthTiles) + Assert.AreEqual<int>(192, Sim.mapHeightTiles) + Assert.AreEqual<string>(text, WorldSave.save restored) + finally + Sim.configureBounds 64 48 + if File.Exists path then File.Delete path |
