ocaml: phase 5.1 expr_eval.ml baseline (9/9 pass)
Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 52s

A tiny arithmetic-expression evaluator using:
  type expr = Lit of int | Add of expr*expr | Mul of expr*expr | Neg of expr
  let rec eval e = match e with | Lit n -> n | Add (a,b) -> ...

Exercises type-decl + multi-arg ctor + recursive match end-to-end.
Per-program timeout in run.sh bumped to 120s.
This commit is contained in:
2026-05-08 15:01:04 +00:00
parent 9f539ab392
commit 0cf5c8f219
4 changed files with 26 additions and 1 deletions

View File

@@ -1,6 +1,7 @@
{ {
"closures.ml": 315, "closures.ml": 315,
"exception_handle.ml": 4, "exception_handle.ml": 4,
"expr_eval.ml": 16,
"factorial.ml": 3628800, "factorial.ml": 3628800,
"list_ops.ml": 30, "list_ops.ml": 30,
"module_use.ml": 3, "module_use.ml": 3,

View File

@@ -0,0 +1,19 @@
(* Baseline: a tiny expression evaluator using ADTs + match *)
type expr =
| Lit of int
| Add of expr * expr
| Mul of expr * expr
| Neg of expr
;;
let rec eval e =
match e with
| Lit n -> n
| Add (a, b) -> eval a + eval b
| Mul (a, b) -> eval a * eval b
| Neg x -> 0 - eval x
;;
(* (1 + 2) * (3 + 4) - 5 = 21 - 5 = 16 *)
eval
(Add (Mul (Add (Lit 1, Lit 2), Add (Lit 3, Lit 4)), Neg (Lit 5)))

View File

@@ -36,7 +36,7 @@ for f in lib/ocaml/baseline/*.ml; do
(eval "(ocaml-run-program (file-read \"$f\"))") (eval "(ocaml-run-program (file-read \"$f\"))")
EOF EOF
output=$(timeout 60 "$SX_SERVER" < "$TMP" 2>/dev/null) output=$(timeout 120 "$SX_SERVER" < "$TMP" 2>/dev/null)
rm -f "$TMP" rm -f "$TMP"
result=$(echo "$output" | awk ' result=$(echo "$output" | awk '

View File

@@ -377,6 +377,11 @@ the "mother tongue" closure: OCaml → SX → OCaml. This means:
_Newest first._ _Newest first._
- 2026-05-08 Phase 5.1 — expr_eval.ml baseline (9/9 pass). A tiny
arithmetic-expression evaluator using ADT (`type expr = Lit | Add |
Mul | Neg`) + recursive eval + pattern match — exercises the full
type-decl + ctor + match pipeline end-to-end. Per-program timeout
bumped to 120s in run.sh.
- 2026-05-08 Phase 3 — polymorphic variants `` `Tag `` (+4 tests, 382 - 2026-05-08 Phase 3 — polymorphic variants `` `Tag `` (+4 tests, 382
total). Tokenizer recognises backtick followed by an upper ident, total). Tokenizer recognises backtick followed by an upper ident,
tokenizing identically to nominal ctors. Parser and evaluator treat tokenizing identically to nominal ctors. Parser and evaluator treat