test: make runww the cstage-only T1 behavioral gate
Per the tier+stage split (USER-approved): the routine wwstage-behavior run is redundant -- T2 byte-id (cstage.s vs wwstage.s, strictly more sensitive) plus T1's cstage run together cover both stages. Drop the wwstage path from runww; cstage==wwstage convergence moves to a separate pre-push byte-id tool (T2). Update the test-run target comment to match.
This commit is contained in:
4
Makefile
4
Makefile
@@ -3667,8 +3667,8 @@ test-unit: all sizelint peellint $(TESTS)
|
|||||||
|
|
||||||
# ---- test-run: ww-native behavior harness (fold 2) ---------------------
|
# ---- test-run: ww-native behavior harness (fold 2) ---------------------
|
||||||
# Drives test/runww.ww over every test/wcc/data/<name>/case.ww, building
|
# Drives test/runww.ww over every test/wcc/data/<name>/case.ww, building
|
||||||
# and running each case through BOTH compiler stages and checking its
|
# and running each case through the cstage `ww` driver (T1) and checking
|
||||||
# leading `//ww:` directive. The harness prints `runww: all ok` and exits
|
# its leading `//ww:` directive. The harness prints `runww: all ok` and exits
|
||||||
# 0 only if every case passes; the target propagates that exit code. NOT
|
# 0 only if every case passes; the target propagates that exit code. NOT
|
||||||
# yet wired into `make test` (fold 6). See test/runww.ww header.
|
# yet wired into `make test` (fold 6). See test/runww.ww header.
|
||||||
RUNWW_CASES = $(wildcard test/wcc/data/*/case.ww)
|
RUNWW_CASES = $(wildcard test/wcc/data/*/case.ww)
|
||||||
|
|||||||
@@ -1,10 +1,19 @@
|
|||||||
// runww — ww-native behavior-test harness, the analog of Go's
|
// runww — ww-native behavior-test harness, the analog of Go's
|
||||||
// test/run.go. Each case file under test/wcc/data/<name>/case.ww carries
|
// test/run.go. Each case file under test/wcc/data/<name>/case.ww carries
|
||||||
// a leading `//ww:` directive describing how to test it; runww builds (and
|
// a leading `//ww:` directive describing how to test it; runww builds (and
|
||||||
// optionally runs) the case through BOTH compiler stages and checks the
|
// optionally runs) the case through the cstage `ww` driver and checks the
|
||||||
// directive holds. This replaces the per-test C harnesses that embedded ww
|
// directive holds. This replaces the per-test C harnesses that embedded ww
|
||||||
// source as C string literals and duplicated fork/exec/grep boilerplate.
|
// source as C string literals and duplicated fork/exec/grep boilerplate.
|
||||||
//
|
//
|
||||||
|
// This is T1: the routine behavioral-correctness gate, cstage-only. The
|
||||||
|
// wwstage-behavior run is deliberately NOT here — per the rob/USER tier+stage
|
||||||
|
// split, a wwstage miscompile is already caught by T2 (cstage.s vs wwstage.s
|
||||||
|
// byte-id over the same case.ww corpus, strictly more sensitive than re-running
|
||||||
|
// behavior) or by T1's own cstage run (the both-wrong-identical blind spot is
|
||||||
|
// cstage being wrong, which only a behavioral check on cstage catches). So
|
||||||
|
// rule-10 stage-symmetry is enforced by T2 (a separate pre-push tool), not by
|
||||||
|
// runww; routine runs stay cstage-only.
|
||||||
|
//
|
||||||
// Directives (first `//ww:` line of the case):
|
// Directives (first `//ww:` line of the case):
|
||||||
// //ww:run compile + execute, expect exit 0
|
// //ww:run compile + execute, expect exit 0
|
||||||
// //ww:run-exit N compile + execute, expect exit N
|
// //ww:run-exit N compile + execute, expect exit N
|
||||||
@@ -248,8 +257,6 @@ export fn main() int = {
|
|||||||
case void => { };
|
case void => { };
|
||||||
};
|
};
|
||||||
let cdrv: str = joinp(bin, "/ww");
|
let cdrv: str = joinp(bin, "/ww");
|
||||||
let wdrv: str = joinp(bin, "/ww_ww");
|
|
||||||
let wwok: bool = os.access(wdrv, 1i32) == 0; // X_OK gate, mirrors C harness
|
|
||||||
|
|
||||||
// Fixed scratch paths: the pilot drives cases sequentially in one
|
// Fixed scratch paths: the pilot drives cases sequentially in one
|
||||||
// process, so reuse is safe; per-pid uniqueness for parallel invocation
|
// process, so reuse is safe; per-pid uniqueness for parallel invocation
|
||||||
@@ -289,16 +296,6 @@ export fn main() int = {
|
|||||||
fail += 1;
|
fail += 1;
|
||||||
};
|
};
|
||||||
|
|
||||||
if (wwok) {
|
|
||||||
total += 1;
|
|
||||||
if (runcase(wdrv, casepath, &d, errpath, tmpout)) {
|
|
||||||
pr("PASS wwstage "); pr(casepath); pr("\n");
|
|
||||||
} else {
|
|
||||||
pr("FAIL wwstage "); pr(casepath); pr("\n");
|
|
||||||
fail += 1;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
ci += 1;
|
ci += 1;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user