program main
  fn parse_f64(text: string) -> (result f64 i32)
    call std.string.parse_f64_result : (result f64 i32)
      var text : string
  fn main() -> i32
    local let value : unit
      call parse_f64 : (result f64 i32)
        string "-0.25" : string
    if : i32
      std.result.is_ok : bool
        var value : (result f64 i32)
      if : i32
        binary = : bool
          std.result.unwrap_ok : f64
            var value : (result f64 i32)
          binary - : f64
            float 0 : f64
            float 0.25 : f64
        int 0 : i32
        int 1 : i32
      std.result.unwrap_err : i32
        var value : (result f64 i32)
  test "parse f64 decimal ok"
    local let value : unit
      call parse_f64 : (result f64 i32)
        string "12.5" : string
    if : bool
      std.result.is_ok : bool
        var value : (result f64 i32)
      binary = : bool
        std.result.unwrap_ok : f64
          var value : (result f64 i32)
        float 12.5 : f64
      bool false : bool
  test "parse f64 negative decimal ok"
    local let value : unit
      call parse_f64 : (result f64 i32)
        string "-0.25" : string
    if : bool
      std.result.is_ok : bool
        var value : (result f64 i32)
      binary = : bool
        std.result.unwrap_ok : f64
          var value : (result f64 i32)
        binary - : f64
          float 0 : f64
          float 0.25 : f64
      bool false : bool
  test "parse f64 text err"
    local let value : unit
      call parse_f64 : (result f64 i32)
        string "abc" : string
    if : bool
      std.result.is_err : bool
        var value : (result f64 i32)
      binary = : bool
        std.result.unwrap_err : i32
          var value : (result f64 i32)
        int 1 : i32
      bool false : bool
  test "parse f64 nan err"
    local let value : unit
      call parse_f64 : (result f64 i32)
        string "nan" : string
    if : bool
      std.result.is_err : bool
        var value : (result f64 i32)
      binary = : bool
        std.result.unwrap_err : i32
          var value : (result f64 i32)
        int 1 : i32
      bool false : bool
