aboutsummaryrefslogtreecommitdiff
path: root/src/reflect
diff options
context:
space:
mode:
authorKeith Randall <khr@golang.org>2021-09-07 15:13:51 -0700
committerKeith Randall <khr@golang.org>2021-09-07 23:10:23 +0000
commitb606739be6758615658188c8a6453256eaeccf35 (patch)
treed7d36a6764d88361c1efc96620d1a12b2b4b6383 /src/reflect
parentb5e33a50fe600314752b866980a9b2498f23a326 (diff)
downloadgo-b606739be6758615658188c8a6453256eaeccf35.tar.gz
go-b606739be6758615658188c8a6453256eaeccf35.zip
reflect: add test for passing float32 signaling NaNs
Update #40724 Change-Id: I110cdb7c4a2c5db6b85ca951143430555261abf3 Reviewed-on: https://go-review.googlesource.com/c/go/+/348017 Trust: Keith Randall <khr@golang.org> Run-TryBot: Keith Randall <khr@golang.org> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
Diffstat (limited to 'src/reflect')
-rw-r--r--src/reflect/abi_test.go25
-rw-r--r--src/reflect/all_test.go3
2 files changed, 27 insertions, 1 deletions
diff --git a/src/reflect/abi_test.go b/src/reflect/abi_test.go
index 2b247d1d79..873febbad2 100644
--- a/src/reflect/abi_test.go
+++ b/src/reflect/abi_test.go
@@ -9,6 +9,7 @@ package reflect_test
import (
"internal/abi"
+ "math"
"math/rand"
"reflect"
"runtime"
@@ -962,3 +963,27 @@ func genValue(t *testing.T, typ reflect.Type, r *rand.Rand) reflect.Value {
}
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)
+ }
+}
diff --git a/src/reflect/all_test.go b/src/reflect/all_test.go
index 01ce8b0c43..eb3ddcb3e4 100644
--- a/src/reflect/all_test.go
+++ b/src/reflect/all_test.go
@@ -4428,8 +4428,9 @@ func TestConvertPanic(t *testing.T) {
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)))