summaryrefslogtreecommitdiff
path: root/test/range.go
diff options
context:
space:
mode:
authorIan Lance Taylor <iant@golang.org>2010-01-15 10:40:30 -0800
committerIan Lance Taylor <iant@golang.org>2010-01-15 10:40:30 -0800
commitf4ae5232f8afa153dd371376d6255b1879eba0b8 (patch)
tree5d3b24894f29177a288bbb936cd22fcf606f27d1 /test/range.go
parentf75f93ee14f254d85409826feafad3d7f5129fc0 (diff)
downloadgo-f4ae5232f8afa153dd371376d6255b1879eba0b8.tar.gz
Test evaluation of range variables.
R=rsc CC=golang-dev http://codereview.appspot.com/189088
Diffstat (limited to 'test/range.go')
-rw-r--r--test/range.go34
1 files changed, 34 insertions, 0 deletions
diff --git a/test/range.go b/test/range.go
index 7abc80c66..48237a715 100644
--- a/test/range.go
+++ b/test/range.go
@@ -53,7 +53,41 @@ func testarray() {
}
}
+// test that range evaluates the index and value expressions
+// exactly once per iteration.
+
+var ncalls = 0
+func getvar(p *int) *int {
+ ncalls++
+ return p
+}
+
+func testcalls() {
+ var i, v int
+ si := 0
+ sv := 0
+ for *getvar(&i), *getvar(&v) = range [2]int{1, 2} {
+ si += i
+ sv += v
+ }
+ if ncalls != 4 {
+ panicln("wrong number of calls:", ncalls, "!= 4")
+ }
+ if si != 1 || sv != 3 {
+ panicln("wrong sum in testcalls", si, sv)
+ }
+
+ ncalls = 0
+ for *getvar(&i), *getvar(&v) = range [0]int{} {
+ panicln("loop ran on empty array")
+ }
+ if ncalls != 0 {
+ panicln("wrong number of calls:", ncalls, "!= 0")
+ }
+}
+
func main() {
testchan();
testarray();
+ testcalls();
}