Description
Migrating from 1.8.4 to 1.9.0 seems to have broken some of our unit tests that relied on comparing floats of varying bit depths with EqualValues(...).
I tried fixing it myself but given I'm not very familiar with the reflect package, I didn't get much further than discovering the issue stemmed from comparing the output of reflect.ValueOf(aFloat32).Convert(float64Type).Interface() against the actual float64 - Convert seems to misinterpret the underlying bits and the interface of the former operand comes out to eg. 10.100000381469727 instead of 10.1
Step To Reproduce
Run the following suite:
package a_test
import (
"testing"
"github.com/stretchr/testify/suite"
)
type FailingMinimalSuite struct {
suite.Suite
}
func (s *FailingMinimalSuite) TestFloatEqualValues() {
s.EqualValues(float32(10.1), float64(10.1))
}
func TestRunFailingMinimalSuite(t *testing.T) {
suite.Run(t, &FailingMinimalSuite{})
}
Alternatively, inject the following case into TestObjectsAreEqualValues:
{float32(10.1), float64(10.1), true},
Expected behavior
I'd expect the EqualValues(float32(10.1), float64(10.1)) assertion to pass.
Actual behavior
The abovementioned assertion fails.
Description
Migrating from 1.8.4 to 1.9.0 seems to have broken some of our unit tests that relied on comparing floats of varying bit depths with
EqualValues(...).I tried fixing it myself but given I'm not very familiar with the
reflectpackage, I didn't get much further than discovering the issue stemmed from comparing the output ofreflect.ValueOf(aFloat32).Convert(float64Type).Interface()against the actualfloat64-Convertseems to misinterpret the underlying bits and the interface of the former operand comes out to eg.10.100000381469727instead of10.1Step To Reproduce
Run the following suite:
Alternatively, inject the following case into
TestObjectsAreEqualValues:{float32(10.1), float64(10.1), true},Expected behavior
I'd expect the
EqualValues(float32(10.1), float64(10.1))assertion to pass.Actual behavior
The abovementioned assertion fails.