71 lines
1.5 KiB
Plaintext
71 lines
1.5 KiB
Plaintext
program main
|
|
fn parse_text(text: string) -> (result i32 i32)
|
|
call std.string.parse_i32_result
|
|
var text
|
|
fn parse_stdin_text() -> (result i32 i32)
|
|
local let input: (result string i32)
|
|
call std.io.read_stdin_result
|
|
match
|
|
subject
|
|
var input
|
|
arm ok text
|
|
call std.string.parse_i32_result
|
|
var text
|
|
arm err code
|
|
err i32 i32
|
|
var code
|
|
fn main() -> i32
|
|
local let value: (result i32 i32)
|
|
call parse_stdin_text
|
|
if
|
|
is_ok
|
|
var value
|
|
unwrap_ok
|
|
var value
|
|
unwrap_err
|
|
var value
|
|
test "parse 42 ok"
|
|
binary =
|
|
unwrap_ok
|
|
call parse_text
|
|
string "42"
|
|
int 42
|
|
test "parse negative 7 ok"
|
|
binary =
|
|
unwrap_ok
|
|
call parse_text
|
|
string "-7"
|
|
int -7
|
|
test "parse empty err"
|
|
binary =
|
|
unwrap_err
|
|
call parse_text
|
|
string ""
|
|
int 1
|
|
test "parse trailing byte err"
|
|
binary =
|
|
unwrap_err
|
|
call parse_text
|
|
string "12x"
|
|
int 1
|
|
test "parse overflow err"
|
|
binary =
|
|
unwrap_err
|
|
call parse_text
|
|
string "2147483648"
|
|
int 1
|
|
test "parse stdin text structurally"
|
|
local let value: (result i32 i32)
|
|
call parse_stdin_text
|
|
match
|
|
subject
|
|
var value
|
|
arm ok parsed
|
|
binary =
|
|
var parsed
|
|
var parsed
|
|
arm err code
|
|
binary =
|
|
var code
|
|
int 1
|