Files
settled-reach/tooling/test_planet_oasis_rings.py
T
jpmschweitzerandClaude Opus 5.5 668772075c refactor(tooling): T-1288 — planet-gen becomes reach atlas planet
The 30-file tree moves under atlas as its third rung (D-243), ten verbs
fronting it. Each verb restates its module's options so `--help` describes
something; tooling/test_planet_router.py hands every declared option to the
module's own argparse and fails on drift, and now runs in make test-tooling.

The 2026-09-02 half of this move had converted the top-level imports and the
repo roots. Finishing it found what the half-move left:

- Lazy in-function imports, and all of sol_data/, still named siblings bare.
  They resolved only through sys.path.insert hacks, so under reach the first
  globe render in generate, batch or sol-import would have raised
  ModuleNotFoundError. Qualified; the hacks are gone.
- 247 print() calls and a stdout progress writer that fired once per 8 KB
  block. Report verbs (audit, quality) write through console.out, progress
  through console.event, and download progress is throttled to 10% steps
  so a job log is not tens of thousands of lines.
- Every error exit raises ReachError with a fix.

Two checks that could not fail:

- batch --verify-determinism printed a warning and exited 0 on a mismatch.
- import-provinces exited 0 with errors > 0.

Both now raise. The 271-body bake is only safe to re-run because the first
one holds.

sol-import --body is action="append" in the module but the router took one
value, so --body GJ0d --body GJ0e kept one. Now repeatable, and _flags repeats
list options.

test_conformance walked one level, so a nested group was reported as a verb
missing @command and its ten verbs were never checked. It recurses now;
proven by stripping @command from `planet quality` and watching it fail.

Stray PNGs from the 2026-09-03 runaway router-test run are parked in
.cache/t1288-stray-pngs/, not committed. Their reliefmaps differ from HEAD
while the heightmap regenerated byte-identical — filed as T-1291.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-23 16:08:02 +02:00

55 lines
2.3 KiB
Python

#!/usr/bin/env python3
"""
Unit tests for `planet_simulation.oasis_ring_iterations` (T-964, PR #210
review — hoshe).
GRID_W is ALREADY 1024 in production (not a future value) — this pins the
`binary_dilation` iteration counts the oasis-vegetation-ring code actually
uses TODAY (4/8), not just the historical 512-baseline values (2/4) the
original authored constants were tuned at. See the module docstring on
`oasis_ring_iterations` in `planet_simulation.py` for the scaling rationale.
Pure arithmetic (no numpy/scipy dependency) — stdlib `unittest` only. Run
directly or via `make test-tooling`:
.venv/bin/python tooling/test_planet_oasis_rings.py
"""
import sys
import unittest
from pathlib import Path
sys.path.insert(0, str(Path(__file__).resolve().parent.parent))
from tooling.domains.atlas.planet.planet_simulation import GRID_W, oasis_ring_iterations # noqa: E402
class OasisRingScalingTests(unittest.TestCase):
def test_historical_512_baseline_yields_authored_2_and_4(self):
# The values the oasis-ring code was originally authored/tuned at.
self.assertEqual(oasis_ring_iterations(512), (2, 4))
def test_current_production_1024_doubles_to_4_and_8(self):
# GRID_W is 1024 in production TODAY (T-964 finding, PR #210 review) —
# this is the LIVE behavior every planet generation run exercises now,
# not a future/hypothetical value.
self.assertEqual(oasis_ring_iterations(1024), (4, 8))
def test_matches_the_actual_module_global_grid_w(self):
# Fixture sanity: whatever GRID_W the module currently declares must
# be the value this test suite is pinning against — if GRID_W ever
# changes again, this test (not just the two explicit-value tests
# above) will fail, forcing the new value to be pinned deliberately.
self.assertEqual(GRID_W, 1024)
def test_minimum_one_iteration_guard_at_a_small_grid_width(self):
# A degenerate small grid_w must never round down to 0 iterations
# (binary_dilation(iterations=0) is a no-op, silently disabling the
# vegetation ring rather than erroring).
ring1, ring2 = oasis_ring_iterations(1)
self.assertGreaterEqual(ring1, 1)
self.assertGreaterEqual(ring2, 1)
if __name__ == "__main__":
unittest.main(verbosity=2)