46 lines
1.2 KiB
Plaintext
46 lines
1.2 KiB
Plaintext
(module main)
|
|
|
|
(fn parse_u64 ((text string)) -> (result u64 i32)
|
|
(std.string.parse_u64_result text))
|
|
|
|
(fn parsed_text ((text string)) -> string
|
|
(std.num.u64_to_string (std.result.unwrap_ok (parse_u64 text))))
|
|
|
|
(test "parse u64 zero ok"
|
|
(= (parsed_text "0") "0"))
|
|
|
|
(test "parse u64 high ok"
|
|
(= (parsed_text "18446744073709551615") "18446744073709551615"))
|
|
|
|
(test "parse u64 empty err"
|
|
(let value (result u64 i32) (parse_u64 ""))
|
|
(if (std.result.is_err value)
|
|
(= (std.result.unwrap_err value) 1)
|
|
false))
|
|
|
|
(test "parse u64 plus err"
|
|
(let value (result u64 i32) (parse_u64 "+1"))
|
|
(if (std.result.is_err value)
|
|
(= (std.result.unwrap_err value) 1)
|
|
false))
|
|
|
|
(test "parse u64 negative err"
|
|
(let value (result u64 i32) (parse_u64 "-1"))
|
|
(if (std.result.is_err value)
|
|
(= (std.result.unwrap_err value) 1)
|
|
false))
|
|
|
|
(test "parse u64 above range err"
|
|
(let value (result u64 i32) (parse_u64 "18446744073709551616"))
|
|
(if (std.result.is_err value)
|
|
(= (std.result.unwrap_err value) 1)
|
|
false))
|
|
|
|
(fn main () -> i32
|
|
(let value (result u64 i32) (parse_u64 "42"))
|
|
(if (std.result.is_ok value)
|
|
(if (= (std.num.u64_to_string (std.result.unwrap_ok value)) "42")
|
|
0
|
|
1)
|
|
(std.result.unwrap_err value)))
|