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  }