js-on-sx: expanded Math + Number globals

Math gains sqrt/pow/trunc/sign/cbrt/hypot plus LN2/LN10/LOG2E/
LOG10E/SQRT2/SQRT1_2 constants and full-precision PI/E.

Number global: isFinite/isNaN/isInteger/isSafeInteger plus
MAX_VALUE/MIN_VALUE/MAX_SAFE_INTEGER/MIN_SAFE_INTEGER/EPSILON/
POSITIVE_INFINITY/NEGATIVE_INFINITY/NaN.

Global isFinite, isNaN, Infinity, NaN. Wired into js-global.

329/331 unit (+21), 148/148 slice unchanged.
This commit is contained in:
2026-04-23 20:42:57 +00:00
parent ce46420c2e
commit 608a5088a4
3 changed files with 153 additions and 2 deletions

View File

@@ -829,6 +829,52 @@ cat > "$TMPFILE" << 'EPOCHS'
(epoch 1061)
(eval "(js-eval \"/zzz/.test('hello')\")")
;; ── Phase 11.math: expanded constants + functions ────────────────
(epoch 1100)
(eval "(js-eval \"Math.sqrt(16)\")")
(epoch 1101)
(eval "(js-eval \"Math.pow(2, 10)\")")
(epoch 1102)
(eval "(js-eval \"Math.trunc(3.7)\")")
(epoch 1103)
(eval "(js-eval \"Math.trunc(-3.7)\")")
(epoch 1104)
(eval "(js-eval \"Math.sign(5)\")")
(epoch 1105)
(eval "(js-eval \"Math.sign(-5)\")")
(epoch 1106)
(eval "(js-eval \"Math.sign(0)\")")
(epoch 1107)
(eval "(js-eval \"Math.hypot(3, 4)\")")
(epoch 1108)
(eval "(js-eval \"Math.cbrt(27)\")")
(epoch 1109)
(eval "(js-eval \"Math.PI > 3.14\")")
(epoch 1110)
(eval "(js-eval \"Math.E > 2.7\")")
(epoch 1111)
(eval "(js-eval \"Math.SQRT2 > 1.41\")")
;; ── Phase 11.number: Number builtin ─────────────────────────────
(epoch 1200)
(eval "(js-eval \"Number.isInteger(5)\")")
(epoch 1201)
(eval "(js-eval \"Number.isInteger(5.5)\")")
(epoch 1202)
(eval "(js-eval \"Number.isFinite(5)\")")
(epoch 1203)
(eval "(js-eval \"Number.isFinite(1/0)\")")
(epoch 1204)
(eval "(js-eval \"Number.isSafeInteger(1)\")")
(epoch 1205)
(eval "(js-eval \"Number.MAX_SAFE_INTEGER\")")
(epoch 1206)
(eval "(js-eval \"Number.EPSILON > 0\")")
(epoch 1207)
(eval "(js-eval \"isFinite(1)\")")
(epoch 1208)
(eval "(js-eval \"isFinite(1/0)\")")
EPOCHS
OUTPUT=$(timeout 180 "$SX_SERVER" < "$TMPFILE" 2>/dev/null)
@@ -1270,6 +1316,30 @@ check 1053 "literal .ignoreCase" 'true'
check 1060 "test match" 'true'
check 1061 "test no match" 'false'
# ── Phase 11.math: expanded Math ────────────────────────────────
check 1100 "Math.sqrt(16)" '4'
check 1101 "Math.pow(2,10)" '1024'
check 1102 "Math.trunc(3.7)" '3'
check 1103 "Math.trunc(-3.7)" '-3'
check 1104 "Math.sign(5)" '1'
check 1105 "Math.sign(-5)" '-1'
check 1106 "Math.sign(0)" '0'
check 1107 "Math.hypot(3,4)" '5'
check 1108 "Math.cbrt(27)" '3'
check 1109 "Math.PI" 'true'
check 1110 "Math.E" 'true'
check 1111 "Math.SQRT2" 'true'
check 1200 "Number.isInteger(5)" 'true'
check 1201 "Number.isInteger(5.5)" 'false'
check 1202 "Number.isFinite(5)" 'true'
check 1203 "Number.isFinite(Inf)" 'false'
check 1204 "Number.isSafeInteger(1)" 'true'
check 1205 "Number.MAX_SAFE_INTEGER" '9007199254740991'
check 1206 "Number.EPSILON > 0" 'true'
check 1207 "isFinite(1)" 'true'
check 1208 "isFinite(Inf)" 'false'
TOTAL=$((PASS + FAIL))
if [ $FAIL -eq 0 ]; then
echo "$PASS/$TOTAL JS-on-SX tests passed"