Merge pull request #7462 from dtolnay/hash

Return nonnegative hash if int is 32 bits
This commit is contained in:
Paul Hinze 2016-07-01 18:06:11 -05:00 committed by GitHub
commit eb5c572b20
2 changed files with 8 additions and 4 deletions

View File

@ -11,9 +11,12 @@ import (
// and invert it if the result is negative. // and invert it if the result is negative.
func String(s string) int { func String(s string) int {
v := int(crc32.ChecksumIEEE([]byte(s))) v := int(crc32.ChecksumIEEE([]byte(s)))
if v < 0 { if v >= 0 {
return v
}
if -v >= 0 {
return -v return -v
} }
// v == MinInt
return v return 0
} }

View File

@ -16,7 +16,8 @@ func TestString(t *testing.T) {
} }
func TestString_positiveIndex(t *testing.T) { func TestString_positiveIndex(t *testing.T) {
ips := []string{"192.168.1.3", "192.168.1.5"} // "2338615298" hashes to uint32(2147483648) which is math.MinInt32
ips := []string{"192.168.1.3", "192.168.1.5", "2338615298"}
for _, ip := range ips { for _, ip := range ips {
if index := String(ip); index < 0 { if index := String(ip); index < 0 {
t.Fatalf("Bad Index %#v for ip %s", index, ip) t.Fatalf("Bad Index %#v for ip %s", index, ip)