test: add test of NaN in map
R=iant, r CC=golang-dev https://golang.org/cl/5576071
This commit is contained in:
parent
deeb1b36dd
commit
6ebf8a6400
32
test/map.go
32
test/map.go
@ -10,6 +10,7 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"math"
|
"math"
|
||||||
"strconv"
|
"strconv"
|
||||||
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
const count = 100
|
const count = 100
|
||||||
@ -27,6 +28,12 @@ func P(a []string) string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
|
testbasic()
|
||||||
|
testfloat()
|
||||||
|
testnan()
|
||||||
|
}
|
||||||
|
|
||||||
|
func testbasic() {
|
||||||
// Test a map literal.
|
// Test a map literal.
|
||||||
mlit := map[string]int{"0": 0, "1": 1, "2": 2, "3": 3, "4": 4}
|
mlit := map[string]int{"0": 0, "1": 1, "2": 2, "3": 3, "4": 4}
|
||||||
for i := 0; i < len(mlit); i++ {
|
for i := 0; i < len(mlit); i++ {
|
||||||
@ -489,8 +496,6 @@ func main() {
|
|||||||
for _, _ = range mnil {
|
for _, _ = range mnil {
|
||||||
panic("range mnil")
|
panic("range mnil")
|
||||||
}
|
}
|
||||||
|
|
||||||
testfloat()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func testfloat() {
|
func testfloat() {
|
||||||
@ -646,3 +651,26 @@ func testfloat() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func testnan() {
|
||||||
|
// Test that NaNs in maps don't go quadratic.
|
||||||
|
t := func(n int) time.Duration {
|
||||||
|
t0 := time.Now()
|
||||||
|
m := map[float64]int{}
|
||||||
|
nan := math.NaN()
|
||||||
|
for i := 0; i < n; i++ {
|
||||||
|
m[nan] = 1
|
||||||
|
}
|
||||||
|
if len(m) != n {
|
||||||
|
panic("wrong size map after nan insertion")
|
||||||
|
}
|
||||||
|
return time.Since(t0)
|
||||||
|
}
|
||||||
|
|
||||||
|
n := 30000 // 0.02 seconds on a MacBook Air
|
||||||
|
t1 := t(n)
|
||||||
|
t2 := t(2 * n)
|
||||||
|
if t2 > 3*t1 { // should be 2x (linear); allow up to 3x
|
||||||
|
fmt.Printf("too slow: %d inserts: %v; %d inserts: %v\n", n, t1, 2*n, t2)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user