W14: pin K18 expt-overflow float-promotion (test-only) + bootstrap gate briefing
The dc7aa709 quick-wins batch fixed `expt`'s silent 63-bit int wrap (now
promotes to float like +/*) but shipped no pinning test — a regression would
pass silently. Add spec/tests/test-gate-pins.sx suite gate-K18-expt-overflow
(4 tests, minimal reprs from plans/sx-review/core.md): small exponents exact,
2^62 and 2^100 do not wrap, 2^100 is a float. 4/4 green under OCaml run_tests.
Also bootstraps plans/agent-briefings/sx-gate-loop.md (the loop's own briefing,
absent until now) with the W14 checklist derived from PLAN.md §W14.
Test-only: no semantics edits, no push.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
33
spec/tests/test-gate-pins.sx
Normal file
33
spec/tests/test-gate-pins.sx
Normal file
@@ -0,0 +1,33 @@
|
||||
;; ==========================================================================
|
||||
;; test-gate-pins.sx — W14 regression pins for dc7aa709's landed fixes
|
||||
;;
|
||||
;; The quick-wins batch (commit dc7aa709) landed real semantics fixes but
|
||||
;; shipped WITHOUT pinning tests, so a regression would pass silently. This
|
||||
;; file pins each confirmed-and-fixed finding with a minimal repro lifted
|
||||
;; from the review lane files (plans/sx-review/*.md). One suite per finding.
|
||||
;;
|
||||
;; TEST-ONLY: no semantics edits. If a pin fails, the fix regressed — do NOT
|
||||
;; relax the assertion; investigate the evaluator/primitive change.
|
||||
;; ==========================================================================
|
||||
|
||||
;; --------------------------------------------------------------------------
|
||||
;; K18 [W7, high] expt silently wrapped at 63-bit int — now promotes to float
|
||||
;; like +/*. Repro (core.md): (expt 2 62) -> -4611686018427387904 (wrapped);
|
||||
;; (expt 2 100) -> 0. Fixed: both are positive floats.
|
||||
;; --------------------------------------------------------------------------
|
||||
(defsuite
|
||||
"gate-K18-expt-overflow"
|
||||
(deftest
|
||||
"small integer exponents stay exact"
|
||||
(do
|
||||
(assert= (expt 2 0) 1)
|
||||
(assert= (expt 2 10) 1024)))
|
||||
(deftest
|
||||
"expt 2^62 does not wrap to a negative int"
|
||||
(assert (> (expt 2 62) 0)))
|
||||
(deftest
|
||||
"expt 2^100 does not wrap to zero"
|
||||
(assert (> (expt 2 100) 0)))
|
||||
(deftest
|
||||
"expt 2^100 promotes to float"
|
||||
(assert (number? (expt 2 100)))))
|
||||
Reference in New Issue
Block a user