aboutsummaryrefslogtreecommitdiff
path: root/test/maplinear.go
diff options
context:
space:
mode:
authorKeith Randall <khr@golang.org>2014-09-10 22:54:07 -0700
committerKeith Randall <khr@golang.org>2014-09-10 22:54:07 -0700
commit689dc60c14cd63cb258c050542bcfc0cbc05e914 (patch)
tree92b690481ece9ec36862f44bcaddbe401c8912ea /test/maplinear.go
parentb78d7b75c793ee676d4d7700610bd5030c5fea2f (diff)
downloadgo-689dc60c14cd63cb258c050542bcfc0cbc05e914.tar.gz
go-689dc60c14cd63cb258c050542bcfc0cbc05e914.zip
runtime: add timing test for iterate/delete map idiom.
LGTM=bradfitz, iant R=iant, bradfitz CC=golang-codereviews https://golang.org/cl/140510043
Diffstat (limited to 'test/maplinear.go')
-rw-r--r--test/maplinear.go18
1 files changed, 18 insertions, 0 deletions
diff --git a/test/maplinear.go b/test/maplinear.go
index 56e50951af..8cc198b8fe 100644
--- a/test/maplinear.go
+++ b/test/maplinear.go
@@ -140,4 +140,22 @@ func main() {
m[complex(float64(i), float64(i))] = 1
}
})
+
+ // ~70ms on a 1.6GHz Zeon.
+ // The iterate/delete idiom currently takes expected
+ // O(n lg n) time. Fortunately, the checkLinear test
+ // leaves enough wiggle room to include n lg n time
+ // (it actually tests for O(n^log_2(3)).
+ checkLinear("iterdelete", 10000, func(n int) {
+ m := map[int]int{}
+ for i := 0; i < n; i++ {
+ m[i] = i
+ }
+ for i := 0; i < n; i++ {
+ for k := range m {
+ delete(m, k)
+ break
+ }
+ }
+ })
}