github.com/seeker-insurance/kit@v0.0.13/coerce/numeric_test.go (about) 1 package coerce 2 3 import ( 4 "math" 5 "testing" 6 7 "github.com/stretchr/testify/assert" 8 ) 9 10 func TestFloat64(t *testing.T) { 11 AllowImpreciseConversion(true) 12 a := 2<<55 + 1 13 x, err := Float64(a) 14 assert.NoError(t, err) 15 assert.NotEqual(t, int(x), a) 16 17 AllowImpreciseConversion(false) 18 b := 2<<52 - 1 19 x, err = Float64(b) 20 assert.NoError(t, err) 21 assert.Equal(t, float64(b), x) 22 23 _, err = Float64(int64(a)) 24 assert.Error(t, err) 25 26 _, err = Float64(uint64(a)) 27 assert.Error(t, err) 28 29 _, err = Float64(uint(a)) 30 assert.Error(t, err) 31 32 _, err = Float64(a) 33 assert.Error(t, err) 34 35 AllowImpreciseConversion(true) 36 _, err = Float64("foo") 37 assert.Error(t, err) 38 } 39 40 func TestInt64(t *testing.T) { 41 AllowOverflow(true) 42 a := uint(math.MaxInt64) + 1 43 x, err := Int64(a) 44 assert.NoError(t, err) 45 assert.NotEqual(t, int64(x), a) 46 47 AllowOverflow(false) 48 x, err = Int64(a) 49 assert.Error(t, err) 50 }