program main fn narrow(value: f64) -> (result i64 i32) call std.num.f64_to_i64_result : (result i64 i32) var value : f64 fn zero_ok() -> (result i64 i32) call narrow : (result i64 i32) binary - : f64 float 2.5 : f64 float 2.5 : f64 fn negative_ok() -> (result i64 i32) call narrow : (result i64 i32) binary - : f64 float 1 : f64 float 13 : f64 fn fractional_err() -> (result i64 i32) call narrow : (result i64 i32) binary / : f64 float 7 : f64 float 2 : f64 fn above_high_err() -> (result i64 i32) call narrow : (result i64 i32) float 9223372036854776000 : f64 fn main() -> i32 local let value : unit call negative_ok : (result i64 i32) if : i32 std.result.is_ok : bool var value : (result i64 i32) if : i32 binary = : bool std.result.unwrap_ok : i64 var value : (result i64 i32) i64 -12 : i64 int 0 : i32 int 1 : i32 std.result.unwrap_err : i32 var value : (result i64 i32) test "f64 zero narrows to i64" local let value : unit call zero_ok : (result i64 i32) if : bool std.result.is_ok : bool var value : (result i64 i32) binary = : bool std.result.unwrap_ok : i64 var value : (result i64 i32) i64 0 : i64 bool false : bool test "negative f64 narrows to i64" local let value : unit call negative_ok : (result i64 i32) if : bool std.result.is_ok : bool var value : (result i64 i32) binary = : bool std.result.unwrap_ok : i64 var value : (result i64 i32) i64 -12 : i64 bool false : bool test "fractional f64 returns err for i64" local let value : unit call fractional_err : (result i64 i32) 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 "above i64 range f64 returns err" local let value : unit call above_high_err : (result i64 i32) 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