Commit d6cd230c authored by Josh Bleecher Snyder's avatar Josh Bleecher Snyder

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
parent d7882316
...@@ -442,6 +442,41 @@ func TestMapIterOrder(t *testing.T) { ...@@ -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) { func TestMapStringBytesLookup(t *testing.T) {
// Use large string keys to avoid small-allocation coalescing, // Use large string keys to avoid small-allocation coalescing,
// which can cause AllocsPerRun to report lower counts than it should. // which can cause AllocsPerRun to report lower counts than it should.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment