def tst1 : IO Unit := do IO.println (1 : Float) IO.println ((1 : Float) + 2) IO.println ((2 : Float) - 3) IO.println ((3 : Float) * 2) IO.println ((3 : Float) / 2) IO.println (decide ((3 : Float) < 2)) IO.println (decide ((3 : Float) < 4)) IO.println ((3 : Float) == 2) IO.println ((2 : Float) == 2) IO.println (decide ((3 : Float) ≤ 2)) IO.println (decide ((3 : Float) ≤ 3)) IO.println (decide ((3 : Float) ≤ 4)) IO.println (Float.ofInt 0) IO.println (Float.ofInt 42) IO.println (Float.ofInt (-42)) IO.println (default : Float) IO.println (0 / 0 : Float).toUInt8 IO.println (0 / 0 : Float).toUInt16 IO.println (0 / 0 : Float).toUInt32 IO.println (0 / 0 : Float).toUInt64 IO.println (0 / 0 : Float).toUSize IO.println (-1 : Float).toUInt8 IO.println (256 : Float).toUInt8 IO.println (1 / 0 : Float).toUInt8 IO.println (-1 : Float).toUInt16 IO.println (2^16 : Float).toUInt16 IO.println (1 / 0 : Float).toUInt16 IO.println (-1 : Float).toUInt32 IO.println (2^32 : Float).toUInt32 IO.println (1 / 0 : Float).toUInt32 IO.println (-1 : Float).toUInt64 IO.println (2^64 : Float).toUInt64 IO.println (1 / 0 : Float).toUInt64 let platBits := USize.size.log2.toFloat IO.println (-1 : Float).toUSize IO.println ((2^platBits).toUSize.toNat == (USize.size - 1)) IO.println ((1 / 0 : Float).toUSize.toNat == (USize.size - 1)) IO.println (let x : Float := 1.4; (x, x.isNaN, x.isInf, x.isFinite, x.frExp)) IO.println (let x : Float := 0 / 0; (x, x.isNaN, x.isInf, x.isFinite, x.frExp)) IO.println (let x : Float := -0 / 0; (x, x.isNaN, x.isInf, x.isFinite, x.frExp)) IO.println (let x : Float := 1 / 0; (x, x.isNaN, x.isInf, x.isFinite, x.frExp)) IO.println (let x : Float := -1 / 0; (x, x.isNaN, x.isInf, x.isFinite, x.frExp)) -- Pow instance defaults to exponent being a Float: IO.println (2^(-1) : Float) IO.println (2.2^2.2 : Float) structure Foo where x : Nat w : UInt64 y : Float z : Float @[noinline] def mkFoo (x : Nat) : Foo := { x := x, w := x.toUInt64, y := x.toFloat / 3, z := x.toFloat / 2 } def tst2 (x : Nat) : IO Unit := do let foo := mkFoo x IO.println foo.y IO.println foo.z @[noinline] def fMap (f : Float → Float) (xs : List Float) := xs.map f def tst3 (xs : List Float) (y : Float) : IO Unit := IO.println (fMap (fun x => x / y) xs) def tst4 (xs : List Float) : IO Unit := IO.println (fMap (fun x => x.abs) xs) def main : IO Unit := do tst1 IO.println "-----" tst2 7 tst3 [3, 4, 7, 8, 9, 11] 2 tst4 [3, -3, 0, -0, -1 / 0, -0 / 0]