slovo/examples/string-parse-i32-result.slo
2026-05-22 08:38:43 +02:00

42 lines
988 B
Plaintext

(module main)
(fn parse_text ((text string)) -> (result i32 i32)
(std.string.parse_i32_result text))
(fn parse_stdin_text () -> (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))))
(test "parse 42 ok"
(= (unwrap_ok (parse_text "42")) 42))
(test "parse negative 7 ok"
(= (unwrap_ok (parse_text "-7")) -7))
(test "parse empty err"
(= (unwrap_err (parse_text "")) 1))
(test "parse trailing byte err"
(= (unwrap_err (parse_text "12x")) 1))
(test "parse overflow err"
(= (unwrap_err (parse_text "2147483648")) 1))
(test "parse stdin text structurally"
(let value (result i32 i32) (parse_stdin_text))
(match value
((ok parsed)
(= parsed parsed))
((err code)
(= code 1))))
(fn main () -> i32
(let value (result i32 i32) (parse_stdin_text))
(if (is_ok value)
(unwrap_ok value)
(unwrap_err value)))