program main
  fn parse_i64(text: string) -> (result i64 i32)
    call std.string.parse_i64_result : (result i64 i32)
      var text : string
  fn parsed_text(text: string) -> string
    call std.num.i64_to_string : string
      std.result.unwrap_ok : i64
        call parse_i64 : (result i64 i32)
          var text : string
  fn main() -> i32
    local let value : unit
      call parse_i64 : (result i64 i32)
        string "-7" : string
    if : i32
      std.result.is_ok : bool
        var value : (result i64 i32)
      if : i32
        binary = : bool
          call std.num.i64_to_string : string
            std.result.unwrap_ok : i64
              var value : (result i64 i32)
          string "-7" : string
        int 0 : i32
        int 1 : i32
      std.result.unwrap_err : i32
        var value : (result i64 i32)
  test "parse i64 zero ok"
    binary = : bool
      call parsed_text : string
        string "0" : string
      string "0" : string
  test "parse i64 negative ok"
    binary = : bool
      call parsed_text : string
        string "-7" : string
      string "-7" : string
  test "parse i64 low ok"
    binary = : bool
      call parsed_text : string
        string "-9223372036854775808" : string
      string "-9223372036854775808" : string
  test "parse i64 high ok"
    binary = : bool
      call parsed_text : string
        string "9223372036854775807" : string
      string "9223372036854775807" : string
  test "parse i64 empty err"
    local let value : unit
      call parse_i64 : (result i64 i32)
        string "" : string
    if : bool
      std.result.is_err : bool
        var value : (result i64 i32)
      binary = : bool
        std.result.unwrap_err : i32
          var value : (result i64 i32)
        int 1 : i32
      bool false : bool
  test "parse i64 plus err"
    local let value : unit
      call parse_i64 : (result i64 i32)
        string "+1" : string
    if : bool
      std.result.is_err : bool
        var value : (result i64 i32)
      binary = : bool
        std.result.unwrap_err : i32
          var value : (result i64 i32)
        int 1 : i32
      bool false : bool
  test "parse i64 above range err"
    local let value : unit
      call parse_i64 : (result i64 i32)
        string "9223372036854775808" : string
    if : bool
      std.result.is_err : bool
        var value : (result i64 i32)
      binary = : bool
        std.result.unwrap_err : i32
          var value : (result i64 i32)
        int 1 : i32
      bool false : bool
