-5.0106036182710749e+00,
}
-type compareTest[F float32 | float64] struct {
- x, y F
- want int
-}
-
-func compareCasesFloat64() []compareTest[float64] {
- zero, nan, inf := 0.0, NaN(), Inf(0)
-
- // construct -NaN manually from its bit representation,
- // since IEEE doesn't mandate negate(NaN) change the sign bit
- unegnan := Float64bits(nan)
- unegnan ^= 1 << 63
- negnan := Float64frombits(unegnan)
- return []compareTest[float64]{
- {negnan, -inf, -1},
- {-inf, negnan, 1},
- {-inf, -Pi, -1},
- {-Pi, -inf, 1},
- {-Pi, -zero, -1},
- {-zero, -Pi, 1},
- {-zero, 0, -1},
- {0, -zero, 1},
- {0, Pi, -1},
- {Pi, 0, 1},
- {Pi, inf, -1},
- {inf, Pi, 1},
- {inf, nan, -1},
- {nan, inf, 1},
- {Pi, Pi, 0},
- {negnan, negnan, 0},
- }
-}
-
-func compareCasesFloat32() []compareTest[float32] {
- zero, nan, inf := float32(0.0), float32(NaN()), float32(Inf(0))
-
- // construct -NaN manually from its bit representation,
- // since IEEE doesn't mandate negate(NaN) change the sign bit
- unegnan := Float32bits(nan)
- unegnan ^= 1 << 31
- negnan := Float32frombits(unegnan)
- return []compareTest[float32]{
- {negnan, -inf, -1},
- {-inf, negnan, 1},
- {-inf, -Pi, -1},
- {-Pi, -inf, 1},
- {-Pi, -zero, -1},
- {-zero, -Pi, 1},
- {-zero, 0, -1},
- {0, -zero, 1},
- {0, Pi, -1},
- {Pi, 0, 1},
- {Pi, inf, -1},
- {inf, Pi, 1},
- {inf, nan, -1},
- {nan, inf, 1},
- {Pi, Pi, 0},
- {negnan, negnan, 0},
- }
-}
-
func tolerance(a, b, e float64) bool {
// Multiplying by e here can underflow denormal values to zero.
// Check a==b so that at least if a and b are small and identical
}
}
-func TestCompare(t *testing.T) {
- // -NaN < -∞ < -3.14 < -0 < 0 < 3.14 < ∞ < NaN
- for _, c := range compareCasesFloat64() {
- cmp := Compare(c.x, c.y)
- if cmp != c.want {
- t.Errorf("Compare(%v, %v) = %d, want %v", c.x, c.y, cmp, c.want)
- }
- }
- for _, c := range compareCasesFloat32() {
- cmp := Compare32(c.x, c.y)
- if cmp != c.want {
- t.Errorf("Compare32(%v, %v) = %d, want %v", c.x, c.y, cmp, c.want)
- }
- }
-}
-
func TestCopysign(t *testing.T) {
for i := 0; i < len(vf); i++ {
if f := Copysign(vf[i], -1); copysign[i] != f {
GlobalF = x
}
-func BenchmarkCompare(b *testing.B) {
- x := 0
- for i := 0; i < b.N; i++ {
- x = Compare(GlobalF, 1.5)
- }
- GlobalI = x
-}
-
-func BenchmarkCompare32(b *testing.B) {
- x := 0
- globalF32 := float32(GlobalF)
- for i := 0; i < b.N; i++ {
- x = Compare32(globalF32, 1.5)
- }
- GlobalI = x
-}
-
var copysignNeg = -1.0
func BenchmarkCopysign(b *testing.B) {