@@ -144,24 +144,38 @@ func TestFloat64Conversions(t *testing.T) {
144144 {"FromFloat64(1)" , 1 , 0 , FromFloat64 (1 ), "FromFloat64" },
145145 {"FromFloat64(-1)" , - 1 , 0 , FromFloat64 (- 1 ), "FromFloat64" },
146146 {"FromFloat64(65504)" , 65504 , 0 , FromFloat64 (65504 ), "FromFloat64" },
147+ {"FromFloat64(Inf)" , math .Inf (1 ), 0 , PositiveInfinity , "FromFloat64" },
148+ {"FromFloat64(-Inf)" , math .Inf (- 1 ), 0 , NegativeInfinity , "FromFloat64" },
149+ {"FromFloat64(NaN)" , math .NaN (), 0 , QuietNaN , "FromFloat64" },
147150
148151 // ToFloat64
149152 {"ToFloat64(0)" , 0 , FromFloat64 (0 ), float64 (0 ), "ToFloat64" },
150153 {"ToFloat64(1)" , 0 , FromFloat64 (1 ), float64 (1 ), "ToFloat64" },
151154 {"ToFloat64(-1)" , 0 , FromFloat64 (- 1 ), float64 (- 1 ), "ToFloat64" },
155+ {"ToFloat64(Inf)" , 0 , PositiveInfinity , math .Inf (1 ), "ToFloat64" },
156+ {"ToFloat64(-Inf)" , 0 , NegativeInfinity , math .Inf (- 1 ), "ToFloat64" },
157+ {"ToFloat64(NaN)" , 0 , QuietNaN , math .NaN (), "ToFloat64" },
152158 }
153159
154160 for _ , tc := range testCases {
155161 t .Run (tc .name , func (t * testing.T ) {
156162 switch tc .op {
157163 case "FromFloat64" :
158164 res := FromFloat64 (tc .f64 )
159- if res .Bits () != tc .expected .(Float16 ).Bits () {
165+ if tc .expected .(Float16 ).IsNaN () {
166+ if ! res .IsNaN () {
167+ t .Errorf ("Expected NaN, got %v" , res )
168+ }
169+ } else if res .Bits () != tc .expected .(Float16 ).Bits () {
160170 t .Errorf ("Expected %v, got %v" , tc .expected , res )
161171 }
162172 case "ToFloat64" :
163173 res := tc .f16 .ToFloat64 ()
164- if res != tc .expected .(float64 ) {
174+ if math .IsNaN (tc .expected .(float64 )) {
175+ if ! math .IsNaN (res ) {
176+ t .Errorf ("Expected NaN, got %v" , res )
177+ }
178+ } else if res != tc .expected .(float64 ) {
165179 t .Errorf ("Expected %v, got %v" , tc .expected , res )
166180 }
167181 }
0 commit comments