program main
  fn fixture_path() -> string
    string "slovo-exp10-host-io-result.txt"
  fn ok_text(value: string) -> (result string i32)
    ok string i32
      var value
  fn err_text(code: i32) -> (result string i32)
    err string i32
      var code
  fn result_text_or_error(value: (result string i32)) -> string
    match
      subject
        var value
      arm ok payload
        var payload
      arm err code
        call std.io.print_i32
          var code
        string "error"
  fn result_text_len_or_code(value: (result string i32)) -> i32
    match
      subject
        var value
      arm ok payload
        call std.string.len
          var payload
      arm err code
        var code
  fn write_fixture_result() -> (result i32 i32)
    call std.fs.write_text_result
      call fixture_path
      string "exp10 host io"
  fn read_fixture_result() -> (result string i32)
    call std.fs.write_text_result
      call fixture_path
      string "exp10 host io"
    call std.fs.read_text_result
      call fixture_path
  fn missing_env_result() -> (result string i32)
    call std.env.get_result
      string "SLOVO_EXP10_MISSING_ENV"
  fn first_arg_ok_score() -> i32
    if
      binary <
        int 0
        call std.process.argc
      if
        is_ok
          call std.process.arg_result
            int 0
        int 1
        int 0
      int 0
  fn read_unwrapped_text() -> string
    unwrap_ok
      call read_fixture_result
  fn missing_env_code() -> i32
    unwrap_err
      call missing_env_result
  fn main() -> i32
    call std.io.eprint
      string "exp-10 host io result"
    if
      is_ok
        call write_fixture_result
      unwrap_ok
        call write_fixture_result
      int 1
  test "string result constructor ok"
    binary =
      call result_text_or_error
        call ok_text
          string "constructed"
      string "constructed"
  test "string result constructor err"
    binary =
      call result_text_len_or_code
        call err_text
          int 1
      int 1
  test "missing env returns err 1"
    binary =
      call missing_env_code
      int 1
  test "arg result is ok when argc is positive"
    binary =
      call first_arg_ok_score
      if
        binary <
          int 0
          call std.process.argc
        int 1
        int 0
  test "write text result returns ok zero"
    binary =
      unwrap_ok
        call write_fixture_result
      int 0
  test "read text result returns written text"
    binary =
      call read_unwrapped_text
      string "exp10 host io"
  test "read text result match observes string payload"
    binary =
      call result_text_len_or_code
        call read_fixture_result
      int 13
