import (
"internal/abi"
+ "math"
"math/rand"
"reflect"
"runtime"
}
return v
}
+
+func TestSignalingNaNArgument(t *testing.T) {
+ v := reflect.ValueOf(func(x float32) {
+ // make sure x is a signaling NaN.
+ u := math.Float32bits(x)
+ if u != snan {
+ t.Fatalf("signaling NaN not correct: %x\n", u)
+ }
+ })
+ v.Call([]reflect.Value{reflect.ValueOf(math.Float32frombits(snan))})
+}
+
+func TestSignalingNaNReturn(t *testing.T) {
+ v := reflect.ValueOf(func() float32 {
+ return math.Float32frombits(snan)
+ })
+ var x float32
+ reflect.ValueOf(&x).Elem().Set(v.Call(nil)[0])
+ // make sure x is a signaling NaN.
+ u := math.Float32bits(x)
+ if u != snan {
+ t.Fatalf("signaling NaN not correct: %x\n", u)
+ }
+}
var gFloat32 float32
+const snan uint32 = 0x7f800001
+
func TestConvertNaNs(t *testing.T) {
- const snan uint32 = 0x7f800001
type myFloat32 float32
x := V(myFloat32(math.Float32frombits(snan)))
y := x.Convert(TypeOf(float32(0)))