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 | 2085acf537cda6556399b5a24c721f40a09acb60 (patch) | |
tree | 5d3b24894f29177a288bbb936cd22fcf606f27d1 | |
parent | 7cf778d1acc5cf8910467d1a663004e94a6ab3ee (diff) | |
download | golang-2085acf537cda6556399b5a24c721f40a09acb60.tar.gz |
Test evaluation of range variables.
R=rsc
CC=golang-dev
http://codereview.appspot.com/189088
-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(); } |