66 lines
1.8 KiB
Plaintext
66 lines
1.8 KiB
Plaintext
; Benchmark scaffold fixture for local-machine string-equality timing comparisons only.
|
|
; Keep LOOP_COUNT and EXPECTED_CHECKSUM aligned with the C/Rust/Python fixtures.
|
|
; The runner supplies the target through argv and the loop count through stdin
|
|
; or argv so the equality path stays runtime-configured.
|
|
|
|
(module main)
|
|
|
|
(fn loop_count () -> i32
|
|
1000000)
|
|
|
|
(fn expected_checksum () -> i32
|
|
4600001)
|
|
|
|
(fn parse_stdin_loop_count () -> (result i32 i32)
|
|
(let input (result string i32) (std.io.read_stdin_result))
|
|
(match input
|
|
((ok text)
|
|
(std.string.parse_i32_result text))
|
|
((err code)
|
|
(err i32 i32 code))))
|
|
|
|
(fn parse_arg_loop_count () -> (result i32 i32)
|
|
(std.string.parse_i32_result (std.process.arg 2)))
|
|
|
|
(fn configured_stdin_loop_count () -> i32
|
|
(let parsed_stdin (result i32 i32) (parse_stdin_loop_count))
|
|
(if (is_ok parsed_stdin)
|
|
(unwrap_ok parsed_stdin)
|
|
(loop_count)))
|
|
|
|
(fn configured_loop_count () -> i32
|
|
(let parsed_arg (result i32 i32) (parse_arg_loop_count))
|
|
(if (is_ok parsed_arg)
|
|
(unwrap_ok parsed_arg)
|
|
(configured_stdin_loop_count)))
|
|
|
|
(fn target_text () -> string
|
|
(std.process.arg 1))
|
|
|
|
(fn words () -> (array string 5)
|
|
(array string "alpha" "omega" "delta" "omega" "sigma"))
|
|
|
|
(fn string_eq_loop ((limit i32) (target string)) -> i32
|
|
(let values (array string 5) (words))
|
|
(var i i32 0)
|
|
(var acc i32 1)
|
|
(while (< i limit)
|
|
(set acc (if (= (index values (% i 5)) target)
|
|
(+ acc 7)
|
|
(+ acc 3)))
|
|
(set acc (if (> acc 1000000000)
|
|
(- acc 1000000000)
|
|
acc))
|
|
(set i (+ i 1)))
|
|
acc)
|
|
|
|
(fn main () -> i32
|
|
(let result i32 (string_eq_loop (configured_loop_count) (target_text)))
|
|
(std.io.print_i32 result)
|
|
(if (= result (expected_checksum))
|
|
0
|
|
1))
|
|
|
|
(test "string equality loop checksum is deterministic"
|
|
(= (string_eq_loop (loop_count) "omega") (expected_checksum)))
|