Error on unsigned conversions of negative values
This commit is contained in:
parent
d494984176
commit
ec00522bf1
40
cast_test.go
40
cast_test.go
@ -37,6 +37,14 @@ func TestToUintE(t *testing.T) {
|
|||||||
{"8", 8, false},
|
{"8", 8, false},
|
||||||
{nil, 0, false},
|
{nil, 0, false},
|
||||||
// errors
|
// errors
|
||||||
|
{int(-8), 0, true},
|
||||||
|
{int8(-8), 0, true},
|
||||||
|
{int16(-8), 0, true},
|
||||||
|
{int32(-8), 0, true},
|
||||||
|
{int64(-8), 0, true},
|
||||||
|
{float32(-8.31), 0, true},
|
||||||
|
{float64(-8.31), 0, true},
|
||||||
|
{"-8", 0, true},
|
||||||
{"test", 0, true},
|
{"test", 0, true},
|
||||||
{testing.T{}, 0, true},
|
{testing.T{}, 0, true},
|
||||||
}
|
}
|
||||||
@ -82,6 +90,14 @@ func TestToUint64E(t *testing.T) {
|
|||||||
{"8", 8, false},
|
{"8", 8, false},
|
||||||
{nil, 0, false},
|
{nil, 0, false},
|
||||||
// errors
|
// errors
|
||||||
|
{int(-8), 0, true},
|
||||||
|
{int8(-8), 0, true},
|
||||||
|
{int16(-8), 0, true},
|
||||||
|
{int32(-8), 0, true},
|
||||||
|
{int64(-8), 0, true},
|
||||||
|
{float32(-8.31), 0, true},
|
||||||
|
{float64(-8.31), 0, true},
|
||||||
|
{"-8", 0, true},
|
||||||
{"test", 0, true},
|
{"test", 0, true},
|
||||||
{testing.T{}, 0, true},
|
{testing.T{}, 0, true},
|
||||||
}
|
}
|
||||||
@ -126,6 +142,14 @@ func TestToUint32E(t *testing.T) {
|
|||||||
{false, 0, false},
|
{false, 0, false},
|
||||||
{"8", 8, false},
|
{"8", 8, false},
|
||||||
{nil, 0, false},
|
{nil, 0, false},
|
||||||
|
{int(-8), 0, true},
|
||||||
|
{int8(-8), 0, true},
|
||||||
|
{int16(-8), 0, true},
|
||||||
|
{int32(-8), 0, true},
|
||||||
|
{int64(-8), 0, true},
|
||||||
|
{float32(-8.31), 0, true},
|
||||||
|
{float64(-8.31), 0, true},
|
||||||
|
{"-8", 0, true},
|
||||||
// errors
|
// errors
|
||||||
{"test", 0, true},
|
{"test", 0, true},
|
||||||
{testing.T{}, 0, true},
|
{testing.T{}, 0, true},
|
||||||
@ -172,6 +196,14 @@ func TestToUint16E(t *testing.T) {
|
|||||||
{"8", 8, false},
|
{"8", 8, false},
|
||||||
{nil, 0, false},
|
{nil, 0, false},
|
||||||
// errors
|
// errors
|
||||||
|
{int(-8), 0, true},
|
||||||
|
{int8(-8), 0, true},
|
||||||
|
{int16(-8), 0, true},
|
||||||
|
{int32(-8), 0, true},
|
||||||
|
{int64(-8), 0, true},
|
||||||
|
{float32(-8.31), 0, true},
|
||||||
|
{float64(-8.31), 0, true},
|
||||||
|
{"-8", 0, true},
|
||||||
{"test", 0, true},
|
{"test", 0, true},
|
||||||
{testing.T{}, 0, true},
|
{testing.T{}, 0, true},
|
||||||
}
|
}
|
||||||
@ -217,6 +249,14 @@ func TestToUint8E(t *testing.T) {
|
|||||||
{"8", 8, false},
|
{"8", 8, false},
|
||||||
{nil, 0, false},
|
{nil, 0, false},
|
||||||
// errors
|
// errors
|
||||||
|
{int(-8), 0, true},
|
||||||
|
{int8(-8), 0, true},
|
||||||
|
{int16(-8), 0, true},
|
||||||
|
{int32(-8), 0, true},
|
||||||
|
{int64(-8), 0, true},
|
||||||
|
{float32(-8.31), 0, true},
|
||||||
|
{float64(-8.31), 0, true},
|
||||||
|
{"-8", 0, true},
|
||||||
{"test", 0, true},
|
{"test", 0, true},
|
||||||
{testing.T{}, 0, true},
|
{testing.T{}, 0, true},
|
||||||
}
|
}
|
||||||
|
105
caste.go
105
caste.go
@ -424,14 +424,29 @@ func ToUintE(i interface{}) (uint, error) {
|
|||||||
}
|
}
|
||||||
return 0, fmt.Errorf("unable to cast %#v to uint: %s", i, err)
|
return 0, fmt.Errorf("unable to cast %#v to uint: %s", i, err)
|
||||||
case int:
|
case int:
|
||||||
|
if s < 0 {
|
||||||
|
return 0, fmt.Errorf("unable to cast negative value to uint")
|
||||||
|
}
|
||||||
return uint(s), nil
|
return uint(s), nil
|
||||||
case int64:
|
case int64:
|
||||||
|
if s < 0 {
|
||||||
|
return 0, fmt.Errorf("unable to cast negative value to uint")
|
||||||
|
}
|
||||||
return uint(s), nil
|
return uint(s), nil
|
||||||
case int32:
|
case int32:
|
||||||
|
if s < 0 {
|
||||||
|
return 0, fmt.Errorf("unable to cast negative value to uint")
|
||||||
|
}
|
||||||
return uint(s), nil
|
return uint(s), nil
|
||||||
case int16:
|
case int16:
|
||||||
|
if s < 0 {
|
||||||
|
return 0, fmt.Errorf("unable to cast negative value to uint")
|
||||||
|
}
|
||||||
return uint(s), nil
|
return uint(s), nil
|
||||||
case int8:
|
case int8:
|
||||||
|
if s < 0 {
|
||||||
|
return 0, fmt.Errorf("unable to cast negative value to uint")
|
||||||
|
}
|
||||||
return uint(s), nil
|
return uint(s), nil
|
||||||
case uint:
|
case uint:
|
||||||
return s, nil
|
return s, nil
|
||||||
@ -444,8 +459,14 @@ func ToUintE(i interface{}) (uint, error) {
|
|||||||
case uint8:
|
case uint8:
|
||||||
return uint(s), nil
|
return uint(s), nil
|
||||||
case float64:
|
case float64:
|
||||||
|
if s < 0 {
|
||||||
|
return 0, fmt.Errorf("unable to cast negative value to uint")
|
||||||
|
}
|
||||||
return uint(s), nil
|
return uint(s), nil
|
||||||
case float32:
|
case float32:
|
||||||
|
if s < 0 {
|
||||||
|
return 0, fmt.Errorf("unable to cast negative value to uint")
|
||||||
|
}
|
||||||
return uint(s), nil
|
return uint(s), nil
|
||||||
case bool:
|
case bool:
|
||||||
if s {
|
if s {
|
||||||
@ -471,14 +492,29 @@ func ToUint64E(i interface{}) (uint64, error) {
|
|||||||
}
|
}
|
||||||
return 0, fmt.Errorf("unable to cast %#v to uint64: %s", i, err)
|
return 0, fmt.Errorf("unable to cast %#v to uint64: %s", i, err)
|
||||||
case int:
|
case int:
|
||||||
|
if s < 0 {
|
||||||
|
return 0, fmt.Errorf("unable to cast negative value to uint64")
|
||||||
|
}
|
||||||
return uint64(s), nil
|
return uint64(s), nil
|
||||||
case int64:
|
case int64:
|
||||||
|
if s < 0 {
|
||||||
|
return 0, fmt.Errorf("unable to cast negative value to uint64")
|
||||||
|
}
|
||||||
return uint64(s), nil
|
return uint64(s), nil
|
||||||
case int32:
|
case int32:
|
||||||
|
if s < 0 {
|
||||||
|
return 0, fmt.Errorf("unable to cast negative value to uint64")
|
||||||
|
}
|
||||||
return uint64(s), nil
|
return uint64(s), nil
|
||||||
case int16:
|
case int16:
|
||||||
|
if s < 0 {
|
||||||
|
return 0, fmt.Errorf("unable to cast negative value to uint64")
|
||||||
|
}
|
||||||
return uint64(s), nil
|
return uint64(s), nil
|
||||||
case int8:
|
case int8:
|
||||||
|
if s < 0 {
|
||||||
|
return 0, fmt.Errorf("unable to cast negative value to uint64")
|
||||||
|
}
|
||||||
return uint64(s), nil
|
return uint64(s), nil
|
||||||
case uint:
|
case uint:
|
||||||
return uint64(s), nil
|
return uint64(s), nil
|
||||||
@ -491,8 +527,14 @@ func ToUint64E(i interface{}) (uint64, error) {
|
|||||||
case uint8:
|
case uint8:
|
||||||
return uint64(s), nil
|
return uint64(s), nil
|
||||||
case float32:
|
case float32:
|
||||||
|
if s < 0 {
|
||||||
|
return 0, fmt.Errorf("unable to cast negative value to uint64")
|
||||||
|
}
|
||||||
return uint64(s), nil
|
return uint64(s), nil
|
||||||
case float64:
|
case float64:
|
||||||
|
if s < 0 {
|
||||||
|
return 0, fmt.Errorf("unable to cast negative value to uint64")
|
||||||
|
}
|
||||||
return uint64(s), nil
|
return uint64(s), nil
|
||||||
case bool:
|
case bool:
|
||||||
if s {
|
if s {
|
||||||
@ -518,14 +560,29 @@ func ToUint32E(i interface{}) (uint32, error) {
|
|||||||
}
|
}
|
||||||
return 0, fmt.Errorf("unable to cast %#v to uint32: %s", i, err)
|
return 0, fmt.Errorf("unable to cast %#v to uint32: %s", i, err)
|
||||||
case int:
|
case int:
|
||||||
|
if s < 0 {
|
||||||
|
return 0, fmt.Errorf("unable to cast negative value to uint32")
|
||||||
|
}
|
||||||
return uint32(s), nil
|
return uint32(s), nil
|
||||||
case int64:
|
case int64:
|
||||||
|
if s < 0 {
|
||||||
|
return 0, fmt.Errorf("unable to cast negative value to uint32")
|
||||||
|
}
|
||||||
return uint32(s), nil
|
return uint32(s), nil
|
||||||
case int32:
|
case int32:
|
||||||
|
if s < 0 {
|
||||||
|
return 0, fmt.Errorf("unable to cast negative value to uint32")
|
||||||
|
}
|
||||||
return uint32(s), nil
|
return uint32(s), nil
|
||||||
case int16:
|
case int16:
|
||||||
|
if s < 0 {
|
||||||
|
return 0, fmt.Errorf("unable to cast negative value to uint32")
|
||||||
|
}
|
||||||
return uint32(s), nil
|
return uint32(s), nil
|
||||||
case int8:
|
case int8:
|
||||||
|
if s < 0 {
|
||||||
|
return 0, fmt.Errorf("unable to cast negative value to uint32")
|
||||||
|
}
|
||||||
return uint32(s), nil
|
return uint32(s), nil
|
||||||
case uint:
|
case uint:
|
||||||
return uint32(s), nil
|
return uint32(s), nil
|
||||||
@ -538,8 +595,14 @@ func ToUint32E(i interface{}) (uint32, error) {
|
|||||||
case uint8:
|
case uint8:
|
||||||
return uint32(s), nil
|
return uint32(s), nil
|
||||||
case float64:
|
case float64:
|
||||||
|
if s < 0 {
|
||||||
|
return 0, fmt.Errorf("unable to cast negative value to uint32")
|
||||||
|
}
|
||||||
return uint32(s), nil
|
return uint32(s), nil
|
||||||
case float32:
|
case float32:
|
||||||
|
if s < 0 {
|
||||||
|
return 0, fmt.Errorf("unable to cast negative value to uint32")
|
||||||
|
}
|
||||||
return uint32(s), nil
|
return uint32(s), nil
|
||||||
case bool:
|
case bool:
|
||||||
if s {
|
if s {
|
||||||
@ -565,14 +628,29 @@ func ToUint16E(i interface{}) (uint16, error) {
|
|||||||
}
|
}
|
||||||
return 0, fmt.Errorf("unable to cast %#v to uint16: %s", i, err)
|
return 0, fmt.Errorf("unable to cast %#v to uint16: %s", i, err)
|
||||||
case int:
|
case int:
|
||||||
|
if s < 0 {
|
||||||
|
return 0, fmt.Errorf("unable to cast negative value to uint16")
|
||||||
|
}
|
||||||
return uint16(s), nil
|
return uint16(s), nil
|
||||||
case int64:
|
case int64:
|
||||||
|
if s < 0 {
|
||||||
|
return 0, fmt.Errorf("unable to cast negative value to uint16")
|
||||||
|
}
|
||||||
return uint16(s), nil
|
return uint16(s), nil
|
||||||
case int32:
|
case int32:
|
||||||
|
if s < 0 {
|
||||||
|
return 0, fmt.Errorf("unable to cast negative value to uint16")
|
||||||
|
}
|
||||||
return uint16(s), nil
|
return uint16(s), nil
|
||||||
case int16:
|
case int16:
|
||||||
|
if s < 0 {
|
||||||
|
return 0, fmt.Errorf("unable to cast negative value to uint16")
|
||||||
|
}
|
||||||
return uint16(s), nil
|
return uint16(s), nil
|
||||||
case int8:
|
case int8:
|
||||||
|
if s < 0 {
|
||||||
|
return 0, fmt.Errorf("unable to cast negative value to uint16")
|
||||||
|
}
|
||||||
return uint16(s), nil
|
return uint16(s), nil
|
||||||
case uint:
|
case uint:
|
||||||
return uint16(s), nil
|
return uint16(s), nil
|
||||||
@ -585,8 +663,14 @@ func ToUint16E(i interface{}) (uint16, error) {
|
|||||||
case uint8:
|
case uint8:
|
||||||
return uint16(s), nil
|
return uint16(s), nil
|
||||||
case float64:
|
case float64:
|
||||||
|
if s < 0 {
|
||||||
|
return 0, fmt.Errorf("unable to cast negative value to uint16")
|
||||||
|
}
|
||||||
return uint16(s), nil
|
return uint16(s), nil
|
||||||
case float32:
|
case float32:
|
||||||
|
if s < 0 {
|
||||||
|
return 0, fmt.Errorf("unable to cast negative value to uint16")
|
||||||
|
}
|
||||||
return uint16(s), nil
|
return uint16(s), nil
|
||||||
case bool:
|
case bool:
|
||||||
if s {
|
if s {
|
||||||
@ -612,14 +696,29 @@ func ToUint8E(i interface{}) (uint8, error) {
|
|||||||
}
|
}
|
||||||
return 0, fmt.Errorf("unable to cast %#v to uint8: %s", i, err)
|
return 0, fmt.Errorf("unable to cast %#v to uint8: %s", i, err)
|
||||||
case int:
|
case int:
|
||||||
|
if s < 0 {
|
||||||
|
return 0, fmt.Errorf("unable to cast negative value to uint8")
|
||||||
|
}
|
||||||
return uint8(s), nil
|
return uint8(s), nil
|
||||||
case int64:
|
case int64:
|
||||||
|
if s < 0 {
|
||||||
|
return 0, fmt.Errorf("unable to cast negative value to uint8")
|
||||||
|
}
|
||||||
return uint8(s), nil
|
return uint8(s), nil
|
||||||
case int32:
|
case int32:
|
||||||
|
if s < 0 {
|
||||||
|
return 0, fmt.Errorf("unable to cast negative value to uint8")
|
||||||
|
}
|
||||||
return uint8(s), nil
|
return uint8(s), nil
|
||||||
case int16:
|
case int16:
|
||||||
|
if s < 0 {
|
||||||
|
return 0, fmt.Errorf("unable to cast negative value to uint8")
|
||||||
|
}
|
||||||
return uint8(s), nil
|
return uint8(s), nil
|
||||||
case int8:
|
case int8:
|
||||||
|
if s < 0 {
|
||||||
|
return 0, fmt.Errorf("unable to cast negative value to uint8")
|
||||||
|
}
|
||||||
return uint8(s), nil
|
return uint8(s), nil
|
||||||
case uint:
|
case uint:
|
||||||
return uint8(s), nil
|
return uint8(s), nil
|
||||||
@ -632,8 +731,14 @@ func ToUint8E(i interface{}) (uint8, error) {
|
|||||||
case uint8:
|
case uint8:
|
||||||
return s, nil
|
return s, nil
|
||||||
case float64:
|
case float64:
|
||||||
|
if s < 0 {
|
||||||
|
return 0, fmt.Errorf("unable to cast negative value to uint8")
|
||||||
|
}
|
||||||
return uint8(s), nil
|
return uint8(s), nil
|
||||||
case float32:
|
case float32:
|
||||||
|
if s < 0 {
|
||||||
|
return 0, fmt.Errorf("unable to cast negative value to uint8")
|
||||||
|
}
|
||||||
return uint8(s), nil
|
return uint8(s), nil
|
||||||
case bool:
|
case bool:
|
||||||
if s {
|
if s {
|
||||||
|
Loading…
Reference in New Issue
Block a user