program main
  fn i32_ok() -> (result i32 i32)
    ok i32 i32
      int 42
  fn i32_err() -> (result i32 i32)
    err i32 i32
      int 7
  fn text_ok() -> (result string i32)
    ok string i32
      string "value"
  fn text_err() -> (result string i32)
    err string i32
      int 9
  fn observe_i32_ok() -> bool
    std.result.is_ok
      call i32_ok
  fn observe_i32_err() -> bool
    std.result.is_err
      call i32_err
  fn unwrap_i32_ok() -> i32
    std.result.unwrap_ok
      call i32_ok
  fn unwrap_i32_err() -> i32
    std.result.unwrap_err
      call i32_err
  fn observe_text_ok() -> bool
    std.result.is_ok
      call text_ok
  fn observe_text_err() -> bool
    std.result.is_err
      call text_err
  fn unwrap_text_ok() -> string
    std.result.unwrap_ok
      call text_ok
  fn unwrap_text_err() -> i32
    std.result.unwrap_err
      call text_err
  fn legacy_i32_ok() -> bool
    is_ok
      call i32_ok
  fn legacy_text_err() -> i32
    unwrap_err
      call text_err
  fn main() -> i32
    if
      std.result.is_ok
        call i32_ok
      std.result.unwrap_ok
        call i32_ok
      std.result.unwrap_err
        call i32_err
  test "std result i32 observers"
    if
      std.result.is_ok
        call i32_ok
      std.result.is_err
        call i32_err
      bool false
  test "std result i32 unwraps"
    binary =
      binary +
        std.result.unwrap_ok
          call i32_ok
        std.result.unwrap_err
          call i32_err
      int 49
  test "std result string observers"
    if
      std.result.is_ok
        call text_ok
      std.result.is_err
        call text_err
      bool false
  test "std result string unwraps"
    if
      binary =
        std.result.unwrap_ok
          call text_ok
        string "value"
      binary =
        std.result.unwrap_err
          call text_err
        int 9
      bool false
  test "legacy result helpers still work"
    if
      is_ok
        call i32_ok
      binary =
        unwrap_err
          call text_err
        int 9
      bool false
