program main
  fn u32_zero_text() -> string
    call std.num.u32_to_string : string
      u32 0 : u32
  fn u32_high_text() -> string
    call std.num.u32_to_string : string
      u32 4294967295 : u32
  fn u64_zero_text() -> string
    call std.num.u64_to_string : string
      u64 0 : u64
  fn u64_high_text() -> string
    call std.num.u64_to_string : string
      u64 18446744073709551615 : u64
  fn u64_beyond_u32_text() -> string
    call std.num.u64_to_string : string
      u64 4294967296 : u64
  fn main() -> i32
    call std.io.print_string : unit
      call u32_zero_text : string
    call std.io.print_string : unit
      call u32_high_text : string
    call std.io.print_string : unit
      call u64_zero_text : string
    call std.io.print_string : unit
      call u64_high_text : string
    call std.io.print_string : unit
      call u64_beyond_u32_text : string
    if : i32
      binary = : bool
        call std.string.len : i32
          call u64_beyond_u32_text : string
        int 10 : i32
      int 0 : i32
      int 1 : i32
  test "u32 zero to string"
    binary = : bool
      call u32_zero_text : string
      string "0" : string
  test "u32 high to string"
    binary = : bool
      call u32_high_text : string
      string "4294967295" : string
  test "u32 high string length"
    binary = : bool
      call std.string.len : i32
        call u32_high_text : string
      int 10 : i32
  test "u64 zero to string"
    binary = : bool
      call u64_zero_text : string
      string "0" : string
  test "u64 high to string"
    binary = : bool
      call u64_high_text : string
      string "18446744073709551615" : string
  test "u64 beyond u32 to string"
    binary = : bool
      call u64_beyond_u32_text : string
      string "4294967296" : string
  test "u64 high string length"
    binary = : bool
      call std.string.len : i32
        call u64_high_text : string
      int 20 : i32
