1
0
mirror of https://github.com/golang/go synced 2024-11-19 20:54:39 -07:00

runtime: test iteration order of sparse maps

The behavior was fixed in CL 141270043. Add a test.

Fixes #8410.

LGTM=khr
R=khr, remyoudompheng
CC=golang-codereviews
https://golang.org/cl/137560044
This commit is contained in:
Josh Bleecher Snyder 2014-09-12 16:16:09 -07:00
parent d78823168f
commit d6cd230c98

View File

@ -442,6 +442,41 @@ func TestMapIterOrder(t *testing.T) {
}
}
// Issue 8410
func TestMapSparseIterOrder(t *testing.T) {
// Run several rounds to increase the probability
// of failure. One is not enough.
NextRound:
for round := 0; round < 10; round++ {
m := make(map[int]bool)
// Add 1000 items, remove 980.
for i := 0; i < 1000; i++ {
m[i] = true
}
for i := 20; i < 1000; i++ {
delete(m, i)
}
var first []int
for i := range m {
first = append(first, i)
}
// 80 chances to get a different iteration order.
for n := 0; n < 80; n++ {
idx := 0
for i := range m {
if i != first[idx] {
// iteration order changed.
continue NextRound
}
idx++
}
}
t.Fatalf("constant iteration order on round %d: %v", round, first)
}
}
func TestMapStringBytesLookup(t *testing.T) {
// Use large string keys to avoid small-allocation coalescing,
// which can cause AllocsPerRun to report lower counts than it should.