diff options
| author | Somhairle H. Marisol <[email protected]> | 2026-09-28 21:12:05 +0800 |
|---|---|---|
| committer | Somhairle H. Marisol <[email protected]> | 2026-09-28 21:12:05 +0800 |
| commit | 0e98c0a6376c8fc846976dc1425bf672fb1a50f2 (patch) | |
| tree | de1e8340dc98e7b197425065e7eb631313275d64 /src/LivingVillage.Desktop.Tests | |
| parent | 09b798361ec48a8be3f0a6a375e8acc5473c07fd (diff) | |
| download | living-village-0e98c0a6376c8fc846976dc1425bf672fb1a50f2.tar.gz | |
p48: 512×384 生成 digest 验证条目(同seed一致/异seed发散/跨尺寸发散/钉值) + overnight-status
Diffstat (limited to 'src/LivingVillage.Desktop.Tests')
| -rw-r--r-- | src/LivingVillage.Desktop.Tests/LivingVillage.Desktop.Tests.fsproj | 1 | ||||
| -rw-r--r-- | src/LivingVillage.Desktop.Tests/P48MapDigestTests.fs | 62 |
2 files changed, 63 insertions, 0 deletions
diff --git a/src/LivingVillage.Desktop.Tests/LivingVillage.Desktop.Tests.fsproj b/src/LivingVillage.Desktop.Tests/LivingVillage.Desktop.Tests.fsproj index 045c1dc..2f698f0 100644 --- a/src/LivingVillage.Desktop.Tests/LivingVillage.Desktop.Tests.fsproj +++ b/src/LivingVillage.Desktop.Tests/LivingVillage.Desktop.Tests.fsproj @@ -27,6 +27,7 @@ <Compile Include="P45CharacterAnimTests.fs" /> <Compile Include="P46MenuAmbienceTests.fs" /> <Compile Include="P47SceneDetailTests.fs" /> + <Compile Include="P48MapDigestTests.fs" /> <Compile Include="SampleTests.fs" /> </ItemGroup> diff --git a/src/LivingVillage.Desktop.Tests/P48MapDigestTests.fs b/src/LivingVillage.Desktop.Tests/P48MapDigestTests.fs new file mode 100644 index 0000000..b8b084c --- /dev/null +++ b/src/LivingVillage.Desktop.Tests/P48MapDigestTests.fs @@ -0,0 +1,62 @@ +namespace LivingVillage.Desktop.Tests + +open System +open System.Security.Cryptography +open System.Text +open Microsoft.VisualStudio.TestTools.UnitTesting +open LivingVillage.Desktop + +/// P48:512×384 地图生成的独立可验收小步(既有参数化生成器已完整,故只补 digest 验证条目)。 +/// +/// 以 `SHA-256(MapGen.serialize map)` 作为生成结果 digest,锁定: +/// * 同 seed 两次生成 digest 一致(跨调用稳定、纯函数); +/// * 不同 seed digest 发散; +/// * 同 seed 不同尺寸 digest 不同(尺寸确被参数化纳入生成); +/// * 512×384 / seed 4242 的具体 digest 钉住,作为回归护栏。 +[<TestClass>] +type P48MapDigestTests () = + + let digestOf (map: MapGen.Result) : string = + use sha = SHA256.Create() + MapGen.serialize map + |> Encoding.UTF8.GetBytes + |> sha.ComputeHash + |> Convert.ToHexString + + [<TestMethod>] + member _.SameSeed512DigestIsStableAcrossRuns () = + let a = MapGen.generateWithSize 512 384 (uint64 4242) + let b = MapGen.generateWithSize 512 384 (uint64 4242) + let da = digestOf a + let db = digestOf b + Assert.AreEqual<int>(64, da.Length) + Assert.IsTrue((da = db), "same seed must yield an identical digest") + Assert.IsTrue((da = digestOf a), "digest must be a pure function of the map") + + [<TestMethod>] + member _.DifferentSeeds512DigestDiverge () = + let seeds = [ 1UL; 2UL; 7UL; 4242UL; 99991UL ] + let digests = seeds |> List.map (fun s -> digestOf (MapGen.generateWithSize 512 384 s)) + for (s, d) in List.zip seeds digests do + printfn "P48 digest 512x384 seed=%d = %s" s d + Assert.IsTrue((digests |> List.distinct |> List.length = seeds.Length), + "every seed must yield a distinct digest") + + [<TestMethod>] + member _.SameSeedDigestDiffersAcrossMapSizes () = + let d64 = digestOf (MapGen.generateWithSize 64 48 (uint64 4242)) + let d256 = digestOf (MapGen.generateWithSize 256 192 (uint64 4242)) + let d512 = digestOf (MapGen.generateWithSize 512 384 (uint64 4242)) + printfn "P48 digest 64x48 seed=4242 = %s" d64 + printfn "P48 digest 256x192 seed=4242 = %s" d256 + printfn "P48 digest 512x384 seed=4242 = %s" d512 + Assert.IsTrue((d64 <> d256), "64x48 and 256x192 digests must differ") + Assert.IsTrue((d256 <> d512), "256x192 and 512x384 digests must differ") + Assert.IsTrue((d64 <> d512), "64x48 and 512x384 digests must differ") + + [<TestMethod>] + member _.Pinned512DigestLocksGeneratorOutput () = + let digest = digestOf (MapGen.generateWithSize 512 384 (uint64 4242)) + printfn "P48 digest 512x384 seed=4242 = %s" digest + Assert.IsTrue((digest = "904A20148C0BA385E95A1EF53B0E7ECCB08653A557D4FD49F0EED6B57857DAD0"), + sprintf "512x384 seed=4242 digest pinned, was %s" digest) |
