program main
  fn half(value: f64) -> f64
    binary / : f64
      var value : f64
      float 2 : f64
  fn weighted(base: f64, scale: f64) -> f64
    binary + : f64
      var base : f64
      binary * : f64
        var scale : f64
        float 2.5 : f64
  fn local_total() -> f64
    local let subtotal : unit
      call weighted : f64
        float 4 : f64
        float 3 : f64
    binary - : f64
      var subtotal : f64
      float 1.5 : f64
  fn close_enough(value: f64) -> bool
    if : bool
      binary > : bool
        var value : f64
        float 9 : f64
      binary < : bool
        var value : f64
        float 11 : f64
      bool false : bool
  fn exact_literal() -> bool
    binary = : bool
      call half : f64
        float 7 : f64
      float 3.5 : f64
  fn main() -> i32
    call std.io.print_f64 : unit
      call local_total : f64
    if : i32
      call close_enough : bool
        call local_total : f64
      int 0 : i32
      int 1 : i32
  test "f64 arithmetic returns exact fixture value"
    binary = : bool
      call local_total : f64
      float 10 : f64
  test "f64 comparison works in predicates"
    call close_enough : bool
      call local_total : f64
  test "f64 division and equality"
    call exact_literal : bool
