diff options
author | Ian Lance Taylor <iant@golang.org> | 2010-01-15 10:40:30 -0800 |
---|---|---|
committer | Ian Lance Taylor <iant@golang.org> | 2010-01-15 10:40:30 -0800 |
commit | f4ae5232f8afa153dd371376d6255b1879eba0b8 (patch) | |
tree | 5d3b24894f29177a288bbb936cd22fcf606f27d1 /test/range.go | |
parent | f75f93ee14f254d85409826feafad3d7f5129fc0 (diff) | |
download | go-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.go | 34 |
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(); } |