Error on unsigned conversions of negative values
This commit is contained in:
		
							parent
							
								
									116ed2a01c
								
							
						
					
					
						commit
						e789b3d66e
					
				
							
								
								
									
										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