From 670b0d8a4669d939b09b4990be89173805831215 Mon Sep 17 00:00:00 2001 From: _ov4 Date: Fri, 16 Oct 2026 20:54:00 +0800 Subject: ci(compiler): gate platform packages on reproducible compiler tests Run all three suites on Linux, macOS and Windows with the push SHA as seed. Retain failure evidence and document the 12 existing failures, pending human review and remaining coverage gaps. Co-Authored-By: Claude Fable 5.1 --- tests/ii/arithmetic/notes.md | 2 ++ tests/ii/arithmetic/program.cps | 18 +++++++++++++++++- tests/ii/arithmetic/reference.cc | 5 ++++- tests/ii/generator-vectors.json | 9 +++++++++ 4 files changed, 32 insertions(+), 2 deletions(-) create mode 100644 tests/ii/generator-vectors.json (limited to 'tests/ii') diff --git a/tests/ii/arithmetic/notes.md b/tests/ii/arithmetic/notes.md index 947a3fa..d152e29 100644 --- a/tests/ii/arithmetic/notes.md +++ b/tests/ii/arithmetic/notes.md @@ -3,3 +3,5 @@ CIE pp. 15-16, project i64 and truncation-towards-zero DIV/MOD. Full-width extremes are used only in safe division/remainder and comparisons; addition, subtraction and multiplication use A MOD 1000001. B is nonzero, and INT64_MIN / -1 is never generated. Each record produces exactly one output line. Random records are preceded by fixed boundary records; every arithmetic intermediate is bounded. + +Nested IF classifies the sign; CASE tests an inclusive -10..10 range before an overlapping zero label, so zero must select the first range. The oracle computes these results without reproducing the pseudocode control flow. diff --git a/tests/ii/arithmetic/program.cps b/tests/ii/arithmetic/program.cps index 7c4bf52..e13381b 100644 --- a/tests/ii/arithmetic/program.cps +++ b/tests/ii/arithmetic/program.cps @@ -3,10 +3,26 @@ DECLARE Index : INTEGER DECLARE A : INTEGER DECLARE B : INTEGER DECLARE Small : INTEGER +DECLARE Sign : INTEGER +DECLARE Band : INTEGER INPUT Count FOR Index <- 1 TO Count INPUT A INPUT B Small <- A MOD 1000001 - OUTPUT A < B, ":", A DIV B, ":", A MOD B, ":", Small + B, ":", Small - B, ":", Small * B + IF A < 0 THEN + Sign <- -1 + ELSE + IF A = 0 THEN + Sign <- 0 + ELSE + Sign <- 1 + ENDIF + ENDIF + CASE OF Small + -10 TO 10 : Band <- 2 + 0 : Band <- 99 + OTHERWISE : Band <- 3 + ENDCASE + OUTPUT A < B, ":", A DIV B, ":", A MOD B, ":", Small + B, ":", Small - B, ":", Small * B, ":", Sign, ":", Band NEXT Index diff --git a/tests/ii/arithmetic/reference.cc b/tests/ii/arithmetic/reference.cc index 6d3d98f..3e0b27f 100644 --- a/tests/ii/arithmetic/reference.cc +++ b/tests/ii/arithmetic/reference.cc @@ -7,7 +7,10 @@ int main() { std::int64_t a, b; if (!(std::cin >> a >> b) || b == 0) return 1; auto small = a % 1000001; + int sign = (a > 0) - (a < 0); + int band = small >= -10 && small <= 10 ? 2 : 3; std::cout << (a < b ? "TRUE" : "FALSE") << ':' << a / b << ':' << a % b - << ':' << small + b << ':' << small - b << ':' << small * b << '\n'; + << ':' << small + b << ':' << small - b << ':' << small * b + << ':' << sign << ':' << band << '\n'; } } diff --git a/tests/ii/generator-vectors.json b/tests/ii/generator-vectors.json new file mode 100644 index 0000000..8d08da7 --- /dev/null +++ b/tests/ii/generator-vectors.json @@ -0,0 +1,9 @@ +{ + "arithmetic": "fa1b753544b05a783d1291aefea47a3288bbdf1339e912b55c6ed01e16b82588", + "arrays": "be2bad75adcf82776e7de77bb4992c31994b11984eac7b9cb3d225ca0fcf9e9d", + "calls": "1933d62e59a50ab51eca103b012ba69064651de0af06b62ff48a6235c47405ee", + "files": "0addc4652097fed574bdc5c0e9d59f237d49dcb7b92638dde146adde04bc6042", + "native-types": "649e978c2ccc0d4de66e2a69b8f98131015fb77c371ce4749d6278ffd84287f2", + "real": "8ffb0244589eff8a1d873ca6f1e1d66cc84944ab68d8bfafa118e941891ac518", + "strings": "c8b1aa74413d7e2a673baa27e495745b5fdf799ba423e0180620b8427cd1c42a" +} -- cgit v1.3.1-4-g156e