blob: 89c14e5c35b56076df5c4a6bb83e29e33d8ad0e1 [file] [log] [blame]
Russ Coxd2cc9882012-02-16 23:50:37 -05001// run
Ken Thompson26b357c2008-12-05 18:24:05 -08002
3// Copyright 2009 The Go Authors. All rights reserved.
4// Use of this source code is governed by a BSD-style
5// license that can be found in the LICENSE file.
6
Rob Pikeeb37b5b2012-02-24 16:24:24 +11007// Test 'for range' on arrays, slices, and maps.
8
Ken Thompson26b357c2008-12-05 18:24:05 -08009package main
10
Rob Pike325cf8e2010-03-24 16:46:53 -070011const size = 16
Ken Thompson26b357c2008-12-05 18:24:05 -080012
Rob Pike325cf8e2010-03-24 16:46:53 -070013var a [size]byte
14var p []byte
15var m map[int]byte
Ken Thompson26b357c2008-12-05 18:24:05 -080016
Rob Pike325cf8e2010-03-24 16:46:53 -070017func f(k int) byte {
18 return byte(k * 10007 % size)
Ken Thompson26b357c2008-12-05 18:24:05 -080019}
20
Rob Pike325cf8e2010-03-24 16:46:53 -070021func init() {
22 p = make([]byte, size)
23 m = make(map[int]byte)
24 for k := 0; k < size; k++ {
25 v := f(k)
26 a[k] = v
27 p[k] = v
28 m[k] = v
Ken Thompson26b357c2008-12-05 18:24:05 -080029 }
30}
31
Rob Pike325cf8e2010-03-24 16:46:53 -070032func main() {
33 var i int
Ken Thompson26b357c2008-12-05 18:24:05 -080034
35 /*
36 * key only
37 */
Rob Pike325cf8e2010-03-24 16:46:53 -070038 i = 0
Ken Thompsonae5a4752008-12-15 13:44:27 -080039 for k := range a {
Rob Pike325cf8e2010-03-24 16:46:53 -070040 v := a[k]
Ken Thompson26b357c2008-12-05 18:24:05 -080041 if v != f(k) {
Rob Pike325cf8e2010-03-24 16:46:53 -070042 println("key array range", k, v, a[k])
43 panic("fail")
Ken Thompson26b357c2008-12-05 18:24:05 -080044 }
Rob Pike325cf8e2010-03-24 16:46:53 -070045 i++
Ken Thompson26b357c2008-12-05 18:24:05 -080046 }
47 if i != size {
Rob Pike325cf8e2010-03-24 16:46:53 -070048 println("key array size", i)
49 panic("fail")
Ken Thompson26b357c2008-12-05 18:24:05 -080050 }
51
Rob Pike325cf8e2010-03-24 16:46:53 -070052 i = 0
Ken Thompsonae5a4752008-12-15 13:44:27 -080053 for k := range p {
Rob Pike325cf8e2010-03-24 16:46:53 -070054 v := p[k]
Ken Thompson26b357c2008-12-05 18:24:05 -080055 if v != f(k) {
Rob Pike325cf8e2010-03-24 16:46:53 -070056 println("key pointer range", k, v, p[k])
57 panic("fail")
Ken Thompson26b357c2008-12-05 18:24:05 -080058 }
Rob Pike325cf8e2010-03-24 16:46:53 -070059 i++
Ken Thompson26b357c2008-12-05 18:24:05 -080060 }
61 if i != size {
Rob Pike325cf8e2010-03-24 16:46:53 -070062 println("key pointer size", i)
63 panic("fail")
Ken Thompson26b357c2008-12-05 18:24:05 -080064 }
65
Rob Pike325cf8e2010-03-24 16:46:53 -070066 i = 0
Ken Thompsonae5a4752008-12-15 13:44:27 -080067 for k := range m {
Rob Pike325cf8e2010-03-24 16:46:53 -070068 v := m[k]
Ken Thompson26b357c2008-12-05 18:24:05 -080069 if v != f(k) {
Rob Pike325cf8e2010-03-24 16:46:53 -070070 println("key map range", k, v, m[k])
71 panic("fail")
Ken Thompson26b357c2008-12-05 18:24:05 -080072 }
Rob Pike325cf8e2010-03-24 16:46:53 -070073 i++
Ken Thompson26b357c2008-12-05 18:24:05 -080074 }
75 if i != size {
Rob Pike325cf8e2010-03-24 16:46:53 -070076 println("key map size", i)
77 panic("fail")
Ken Thompson26b357c2008-12-05 18:24:05 -080078 }
79
80 /*
Ken Thompson7859ae82009-01-26 11:34:38 -080081 * key,value
Ken Thompson26b357c2008-12-05 18:24:05 -080082 */
Rob Pike325cf8e2010-03-24 16:46:53 -070083 i = 0
84 for k, v := range a {
Ken Thompson26b357c2008-12-05 18:24:05 -080085 if v != f(k) {
Rob Pike325cf8e2010-03-24 16:46:53 -070086 println("key:value array range", k, v, a[k])
87 panic("fail")
Ken Thompson26b357c2008-12-05 18:24:05 -080088 }
Rob Pike325cf8e2010-03-24 16:46:53 -070089 i++
Ken Thompson26b357c2008-12-05 18:24:05 -080090 }
91 if i != size {
Rob Pike325cf8e2010-03-24 16:46:53 -070092 println("key:value array size", i)
93 panic("fail")
Ken Thompson26b357c2008-12-05 18:24:05 -080094 }
95
Rob Pike325cf8e2010-03-24 16:46:53 -070096 i = 0
97 for k, v := range p {
Ken Thompson26b357c2008-12-05 18:24:05 -080098 if v != f(k) {
Rob Pike325cf8e2010-03-24 16:46:53 -070099 println("key:value pointer range", k, v, p[k])
100 panic("fail")
Ken Thompson26b357c2008-12-05 18:24:05 -0800101 }
Rob Pike325cf8e2010-03-24 16:46:53 -0700102 i++
Ken Thompson26b357c2008-12-05 18:24:05 -0800103 }
104 if i != size {
Rob Pike325cf8e2010-03-24 16:46:53 -0700105 println("key:value pointer size", i)
106 panic("fail")
Ken Thompson26b357c2008-12-05 18:24:05 -0800107 }
108
Rob Pike325cf8e2010-03-24 16:46:53 -0700109 i = 0
110 for k, v := range m {
Ken Thompson26b357c2008-12-05 18:24:05 -0800111 if v != f(k) {
Rob Pike325cf8e2010-03-24 16:46:53 -0700112 println("key:value map range", k, v, m[k])
113 panic("fail")
Ken Thompson26b357c2008-12-05 18:24:05 -0800114 }
Rob Pike325cf8e2010-03-24 16:46:53 -0700115 i++
Ken Thompson26b357c2008-12-05 18:24:05 -0800116 }
117 if i != size {
Rob Pike325cf8e2010-03-24 16:46:53 -0700118 println("key:value map size", i)
119 panic("fail")
Ken Thompson26b357c2008-12-05 18:24:05 -0800120 }
121}