Reputation: 46794
given the following function:
func convertValue(contents string) (int, error) {
return strconv.Atoi(contents)
}
when I run the following test
var convertValues = []struct {
contents string
value int
}{
{"9223372036854775807", math.MaxInt64},
{"−9223372036854775808", math.MinInt64},
}
func TestConvertValue(t *testing.T) {
for _, values := range convertValues {
value, err := convertValue(values.contents)
if err != nil {
t.Error("Expecting", values.value, "but got error", err.Error())
}
if value != values.value {
t.Error("Expecting ", values.value, ", but got ", value)
}
}
}
it works for MaxInt64, but not for MinInt64. I'm running this on a MacBookPro, so it's running in 64bit. I have double checked this with the following
func TestIntSize(t *testing.T) {
const PtrSize = 32 << uintptr(^uintptr(0)>>63)
fmt.Println(runtime.GOOS, runtime.GOARCH)
fmt.Println(strconv.IntSize, PtrSize)
}
and it returned
darwin amd64
64 64
What am I doing wrong?
Upvotes: 0
Views: 295
Reputation: 28554
https://play.golang.org/p/FtytYJkHSc
Switching to strconv.ParseInt and explicitly using int64 as the type seemed to help. I also had an issue with the dash character in your MinInt64 string, that might just be on my end, but worth checking and making sure it is the basic ASCII character not some kind of Unicode dash.
Upvotes: 1