cryptol/tests/regression/FloatTests.cry
2021-02-09 17:24:47 -08:00

33 lines
1.1 KiB
Plaintext

module FloatTests where
import Float
section : {n} fin n => [n][8] -> [78][8]
section x = "-- " # take`{min 60 n} x # repeat '-'
type Small = Float 3 2
type Medium = Float64
type Large = Float 60 5000
property roundTrip x = fpFromBits (fpToBits x) =.= x
roundTrip2 : {e : #, p : #} (fin e, fin p, ValidFloat e p) => [e + p] -> Bool
property roundTrip2 x = fpToBits num == x \/ num =.= fpNaN
where num = fpFromBits x : Float e p
property eqRefl1 x = x =.= x
property eqRefl2 x = x == x \/ x =.= fpNaN
property eqProp x y = ~(x == y) \/
(x =.= y \/ x =.= fpNaN
\/ y =.= fpNaN
\/ (x =.= 0.0 /\ y =.= -0.0)
\/ (x =.= -0.0 /\ y =.= 0.0)
)
property leqRefl x = x <= x \/ x =.= fpNaN
roundTripRational : {e,p} (fin e, fin p, ValidFloat e p) => Float e p -> Bool
property roundTripRational x =
~(fpIsFinite x) \/
(fpFromRational rne (fpToRational x) =.= x) \/
(x =.= fpNegZero)