3.3 KiB
3.3 KiB
E2E Test Infra: Wilderness Map Generation Parity (Issue #455)
Test Philosophy
- Opaque-box, requirement-driven. Derived from D2MOO v1.13c ground truth binary (
d2moo_mapgen) and user requirements R1–R6. - Methodology: Category-Partition + Boundary Value Analysis + Benchmark Seed Workload Testing across outdoor levels (Level 2 Blood Moor, Level 3 Cold Plains, Level 4 Stony Field).
Feature Inventory & Test Coverage Goals
| # | Feature | Requirement | Tier 1 (Smoke & Sizing) | Tier 2 (Boundaries & Edge Cases) | Tier 3 (Cross-Feature Combinations) | Tier 4 (Full Parity vs D2MOO) |
|---|---|---|---|---|---|---|
| 1 | Dynamic Sizing (R1) | 96×56 horizontal vs 56×96 vertical | 5 | 5 | ✓ | ✓ |
| 2 | Level Flags (R1) | OUTDOOR_SOUTHWEST, NORTHWEST, BRIDGE, RIVER | 5 | 5 | ✓ | ✓ |
| 3 | Outer River (R2) | x = nGridWidth - 2, dual column URiverC/LRiverC |
5 | 5 | ✓ | ✓ |
| 4 | River Bridges (R2) | BridgeU / BridgeL crossing & border suppression | 5 | 5 | ✓ | ✓ |
| 5 | Secondary Borders (R3) | 4 passes: BorderCliffs, Middle, Corner, Border | 5 | 5 | ✓ | ✓ |
| 6 | 2×3 Forest Closures (R3) | Bord9..Bord12 interior enclosures | 5 | 5 | ✓ | ✓ |
| 7 | Town Transition (R4) | 56×8 TownSTrans aligned to river edge | 5 | 5 | ✓ | ✓ |
| 8 | Landmark Presets (R4) | DenEnt, Pond1, Cott1, Circle, Clover | 5 | 5 | ✓ | ✓ |
| 9 | FarAway Metric (R4) | Den of Evil maximum distance from town | 5 | 5 | ✓ | ✓ |
| 10 | Orthogonal Roads (R5) | Polyline vertex graph linking exits | 5 | 5 | ✓ | ✓ |
| 11 | Road LUT 256-Byte (R5) | Width-2 Bresenham + byte_6FDCF958 styles | 5 | 5 | ✓ | ✓ |
| 12 | 0x40002 Base Floor (R6) | Uniform Style 0 Seq 0 grass initialization | 5 | 5 | ✓ | ✓ |
| 13 | LvlSub Cluster (R6) | SubType 6 Pud, Trees, Stone, Swamp trials | 5 | 5 | ✓ | ✓ |
Test Architecture
- Test Runner:
npx vitest run tests/wilderness-d2moo-parity.test.ts - Ground Truth Binary:
/usr/local/google/home/taodao/tmp/d2moo_runner/d2moo_mapgen <levelId> <seed> <difficulty> <outJsonPath> - Golden Fixtures Directory:
tests/fixtures/d2moo/level2_seed_1.json(Blood Moor Vertical 56×96, no river)level2_seed_42.json(Blood Moor Vertical 56×96)level2_seed_12345.json(Blood Moor Horizontal 96×56, river @ column 10/11)level2_seed_0x12345678.json(Blood Moor Horizontal 96×56, river @ column 10/11)level3_seed_1.json(Cold Plains 80×80)level3_seed_0x12345678.json(Cold Plains 80×80)level4_seed_1.json(Stony Field 80×80)level4_seed_0x12345678.json(Stony Field 80×80)
Pass/Fail Semantics
- Grid dimensions match D2MOO output exactly (width, height, room grid width/height).
- Outer river columns match exactly when river flags are present (
x = nGridWidth - 2andnGridWidth - 1). - TownSTrans is placed at
bx = 0orbx = nGridWidth - 7with exact size 7×1 blocks (56×8 tiles). - All required landmark presets (DenEnt, Pond1, Cott1, Circle, Clover) are present with valid coordinates.
- Secondary border tiles and 2×3 interior closures (
Bord9..Bord12) are formed. - Dirt path connects town exit to den and wilderness exit without spline deviations.
- TypeScript typecheck passes with 0 errors.