program main
  struct NumericRecord
    field wide: i64
    field ratio: f64
  fn make_record(wide: i64, ratio: f64) -> NumericRecord
    construct NumericRecord
      field wide
        var wide
      field ratio
        var ratio
  fn literal_record() -> NumericRecord
    construct NumericRecord
      field wide
        i64 2147483648
      field ratio
        float 3.5
  fn echo_record(record: NumericRecord) -> NumericRecord
    var record
  fn local_record(wide: i64, ratio: f64) -> NumericRecord
    local let record: NumericRecord
      call make_record
        var wide
        var ratio
    call echo_record
      var record
  fn record_wide(record: NumericRecord) -> i64
    field-access wide
      var record
  fn record_ratio(record: NumericRecord) -> f64
    field-access ratio
      var record
  fn wide_total(record: NumericRecord) -> i64
    binary +
      field-access wide
        var record
      i64 10
  fn ratio_total(record: NumericRecord) -> f64
    binary +
      field-access ratio
        var record
      float 1.5
  fn wide_in_range(record: NumericRecord) -> bool
    if
      binary >
        field-access wide
          var record
        i64 2147483640
      binary <
        field-access wide
          var record
        i64 2147483660
      bool false
  fn ratio_in_range(record: NumericRecord) -> bool
    if
      binary >
        field-access ratio
          var record
        float 3
      binary <
        field-access ratio
          var record
        float 4
      bool false
  fn wide_text(record: NumericRecord) -> string
    call std.num.i64_to_string
      field-access wide
        var record
  fn ratio_text(record: NumericRecord) -> string
    call std.num.f64_to_string
      field-access ratio
        var record
  fn main() -> i32
    call std.io.print_i64
      call record_wide
        call literal_record
    call std.io.print_f64
      call record_ratio
        call literal_record
    if
      call wide_in_range
        call local_record
          i64 2147483648
          float 3.5
      if
        call ratio_in_range
          call local_record
            i64 2147483648
            float 3.5
        int 0
        int 1
      int 1
  test "numeric struct i64 field access"
    binary =
      call record_wide
        call literal_record
      i64 2147483648
  test "numeric struct f64 field access"
    binary =
      call record_ratio
        call literal_record
      float 3.5
  test "numeric struct i64 arithmetic after access"
    binary =
      call wide_total
        call literal_record
      i64 2147483658
  test "numeric struct f64 arithmetic after access"
    binary =
      call ratio_total
        call literal_record
      float 5
  test "numeric struct i64 comparison after access"
    call wide_in_range
      call literal_record
  test "numeric struct f64 comparison after access"
    call ratio_in_range
      call literal_record
  test "numeric struct local param return call flow"
    binary =
      call wide_total
        call local_record
          i64 2147483648
          float 3.5
      i64 2147483658
  test "numeric struct i64 format after access"
    binary =
      call wide_text
        call literal_record
      string "2147483648"
  test "numeric struct f64 format after access"
    binary =
      call ratio_text
        call literal_record
      string "3.5"
