diff --git a/cast_test.go b/cast_test.go index 6bea164..2282098 100644 --- a/cast_test.go +++ b/cast_test.go @@ -111,6 +111,12 @@ func TestToUintE(t *testing.T) { func TestToUint64E(t *testing.T) { tests := createNumberTestSteps(uint64(0), uint64(1), uint64(8), uint64(0), uint64(8), uint64(8)) + // Maximum value of uint64 + tests = append(tests, + testStep{"18446744073709551615", uint64(18446744073709551615), false}, + testStep{"18446744073709551616", uint64(0), true}, + ) + runNumberTest( qt.New(t), tests, diff --git a/caste.go b/caste.go index d49bbf8..618adc9 100644 --- a/caste.go +++ b/caste.go @@ -598,12 +598,12 @@ func ToUint64E(i interface{}) (uint64, error) { switch s := i.(type) { case string: - v, err := strconv.ParseInt(trimZeroDecimal(s), 0, 0) + v, err := strconv.ParseUint(trimZeroDecimal(s), 0, 0) if err == nil { if v < 0 { return 0, errNegativeNotAllowed } - return uint64(v), nil + return v, nil } return 0, fmt.Errorf("unable to cast %#v of type %T to uint64", i, i) case json.Number: