ocaml: phase 5.1 frequency.ml baseline + Format module alias (+2 tests, 498 total)
Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 27s
Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 27s
frequency.ml exercises the recently-added Hashtbl.iter / fold + Hashtbl.find_opt + s.[i] indexing + for-loop together: build a char-count table for 'abracadabra' then take the max via Hashtbl.fold. Expected = 5 (a x 5). Total 25 baseline programs. Format module added as a thin alias of Printf — sprintf, printf, and asprintf all delegate to Printf.sprintf. The dynamic runtime doesn't distinguish boxes/breaks, so format strings work the same as in Printf and most Format-using OCaml programs now compile.
This commit is contained in:
@@ -8,6 +8,7 @@
|
||||
"exception_handle.ml": 4,
|
||||
"expr_eval.ml": 16,
|
||||
"factorial.ml": 3628800,
|
||||
"frequency.ml": 5,
|
||||
"fizzbuzz.ml": 57,
|
||||
"list_ops.ml": 30,
|
||||
"lambda_calc.ml": 7,
|
||||
|
||||
18
lib/ocaml/baseline/frequency.ml
Normal file
18
lib/ocaml/baseline/frequency.ml
Normal file
@@ -0,0 +1,18 @@
|
||||
let count_chars s =
|
||||
let t = Hashtbl.create 8 in
|
||||
for i = 0 to String.length s - 1 do
|
||||
let c = s.[i] in
|
||||
let n = match Hashtbl.find_opt t c with
|
||||
| Some v -> v + 1
|
||||
| None -> 1
|
||||
in
|
||||
Hashtbl.replace t c n
|
||||
done;
|
||||
t
|
||||
|
||||
let max_count t =
|
||||
Hashtbl.fold (fun _ v acc -> if v > acc then v else acc) t 0
|
||||
|
||||
;;
|
||||
|
||||
max_count (count_chars "abracadabra")
|
||||
@@ -455,6 +455,15 @@
|
||||
let printf fmt = sprintf fmt
|
||||
end ;;
|
||||
|
||||
module Format = struct
|
||||
(* Thin alias of Printf for pretty-printing parity. The dynamic
|
||||
runtime doesn't distinguish boxes/breaks — fmt strings work
|
||||
the same as in Printf. *)
|
||||
let sprintf fmt = Printf.sprintf fmt
|
||||
let printf fmt = Printf.sprintf fmt
|
||||
let asprintf fmt = Printf.sprintf fmt
|
||||
end ;;
|
||||
|
||||
module Lazy = struct
|
||||
let force lz = _lazy_force lz
|
||||
end ;;
|
||||
|
||||
@@ -1234,6 +1234,12 @@ cat > "$TMPFILE" << 'EPOCHS'
|
||||
(epoch 4961)
|
||||
(eval "(ocaml-run \"let counter = ref 0 in let lz = lazy (counter := !counter + 1; 42) in let a = Lazy.force lz in let b = Lazy.force lz in (a + b) * 100 + !counter\")")
|
||||
|
||||
;; ── Format alias of Printf ────────────────────────────────────
|
||||
(epoch 4970)
|
||||
(eval "(ocaml-run \"Format.sprintf \\\"%d\\\" 99\")")
|
||||
(epoch 4971)
|
||||
(eval "(ocaml-run \"Format.asprintf \\\"%s=%d\\\" \\\"n\\\" 7\")")
|
||||
|
||||
EPOCHS
|
||||
|
||||
OUTPUT=$(timeout 360 "$SX_SERVER" < "$TMPFILE" 2>/dev/null)
|
||||
@@ -1958,6 +1964,10 @@ check 4951 "Hashtbl.iter ref accum 10+20" '30'
|
||||
check 4960 "lazy 1+2 force" '3'
|
||||
check 4961 "lazy memoization counter=1" '8401'
|
||||
|
||||
# ── Format alias ─────────────────────────────────────────────────
|
||||
check 4970 "Format.sprintf %d" '"99"'
|
||||
check 4971 "Format.asprintf %s=%d" '"n=7"'
|
||||
|
||||
TOTAL=$((PASS + FAIL))
|
||||
if [ $FAIL -eq 0 ]; then
|
||||
echo "ok $PASS/$TOTAL OCaml-on-SX tests passed"
|
||||
|
||||
Reference in New Issue
Block a user