summaryrefslogtreecommitdiff
path: root/src/LivingVillage.Desktop.Tests
diff options
context:
space:
mode:
authorHermes Leader <v@v>2026-09-22 08:41:14 +0800
committerHermes Leader <v@v>2026-09-22 08:41:14 +0800
commitaa3d749ed2a63f9409290c564649f9718756fd6e (patch)
tree864a7f3d8d750158513e71739091e72204d23da3 /src/LivingVillage.Desktop.Tests
parent1fb9f9de8f7a6e9124f9a650e44b2f27ed2cac7a (diff)
parent6afc9041e9aeb9f51a3b9ea73b5a6d493862ee1c (diff)
downloadliving-village-aa3d749ed2a63f9409290c564649f9718756fd6e.tar.gz
merge: P24 512x384 民居密度/村民可辨(writer hash 保留)
Diffstat (limited to 'src/LivingVillage.Desktop.Tests')
-rw-r--r--src/LivingVillage.Desktop.Tests/MapGenTests.fs32
1 files changed, 32 insertions, 0 deletions
diff --git a/src/LivingVillage.Desktop.Tests/MapGenTests.fs b/src/LivingVillage.Desktop.Tests/MapGenTests.fs
index 4d11dd1..4a09865 100644
--- a/src/LivingVillage.Desktop.Tests/MapGenTests.fs
+++ b/src/LivingVillage.Desktop.Tests/MapGenTests.fs
@@ -229,6 +229,38 @@ type MapGenTests () =
Assert.IsTrue(visited.[y * map.Width + x], sprintf "bridge tile (%d,%d) unreachable at 512x384" x y)
Assert.IsTrue(map.Buildings.Length >= map.Rivers.Length, "riverside building per band at 512x384")
+ // ---- P24:512x384 沿河民居加密(默认图不受影响) ----
+
+ [<TestMethod>]
+ member _.ExtraHouseDensityOnlyEnabledForLargeMaps () =
+ Assert.AreEqual<int>(0, (MapGen.paramsForSize 64 48 (uint64 1)).ExtraRiversideHouses)
+ Assert.AreEqual<int>(0, (MapGen.paramsForSize 256 192 (uint64 1)).ExtraRiversideHouses)
+ Assert.IsTrue((MapGen.paramsForSize 512 384 (uint64 1)).ExtraRiversideHouses > 0)
+
+ [<TestMethod>]
+ member _.LargeMapHasAtLeastTwelveHousesWithReachableDoors () =
+ let map = MapGen.generateWithSize 512 384 (uint64 4242)
+ Assert.IsTrue(map.Buildings.Length >= 12, sprintf "512x384 must place >=12 houses, saw %d" map.Buildings.Length)
+ let startX, startY = map.Spawns.Head
+ let visited = MapGen.floodFill map startX startY
+ for building in map.Buildings do
+ Assert.IsTrue(MapGen.isWalkable map building.DoorX building.DoorY, sprintf "door (%d,%d) must be walkable" building.DoorX building.DoorY)
+ Assert.IsTrue(visited.[building.DoorY * map.Width + building.DoorX], sprintf "door (%d,%d) unreachable" building.DoorX building.DoorY)
+ Assert.IsTrue(map.ReachabilityOk, "512x384 reachability must hold with extra houses")
+
+ [<TestMethod>]
+ member _.LargeMapHousePlacementIsDeterministic () =
+ let a = MapGen.generateWithSize 512 384 (uint64 4242)
+ let b = MapGen.generateWithSize 512 384 (uint64 4242)
+ Assert.AreEqual<int>(a.Buildings.Length, b.Buildings.Length)
+ Assert.IsTrue(a.Buildings = b.Buildings)
+ Assert.AreEqual<string>(MapGen.serialize a, MapGen.serialize b)
+
+ [<TestMethod>]
+ member _.DefaultSizeHouseCountUnchanged () =
+ Assert.AreEqual<int>(4, (MapGen.generateWithSize 64 48 (uint64 4242)).Buildings.Length)
+ Assert.AreEqual<int>(4, (MapGen.generateWithSize 256 192 (uint64 4242)).Buildings.Length)
+
/// 锁定当前默认尺寸的生成结果,防止 P23 参数适配无意改变 64x48 / 256x192。
[<TestMethod>]
member _.DefaultSizeChecksumsArePinned () =