|  | // run | 
|  |  | 
|  | // Copyright 2009 The Go Authors. All rights reserved. | 
|  | // Use of this source code is governed by a BSD-style | 
|  | // license that can be found in the LICENSE file. | 
|  |  | 
|  | // Test 'for range' on arrays, slices, and maps. | 
|  |  | 
|  | package main | 
|  |  | 
|  | const size = 16 | 
|  |  | 
|  | var a [size]byte | 
|  | var p []byte | 
|  | var m map[int]byte | 
|  |  | 
|  | func f(k int) byte { | 
|  | return byte(k * 10007 % size) | 
|  | } | 
|  |  | 
|  | func init() { | 
|  | p = make([]byte, size) | 
|  | m = make(map[int]byte) | 
|  | for k := 0; k < size; k++ { | 
|  | v := f(k) | 
|  | a[k] = v | 
|  | p[k] = v | 
|  | m[k] = v | 
|  | } | 
|  | } | 
|  |  | 
|  | func main() { | 
|  | var i int | 
|  |  | 
|  | /* | 
|  | * key only | 
|  | */ | 
|  | i = 0 | 
|  | for k := range a { | 
|  | v := a[k] | 
|  | if v != f(k) { | 
|  | println("key array range", k, v, a[k]) | 
|  | panic("fail") | 
|  | } | 
|  | i++ | 
|  | } | 
|  | if i != size { | 
|  | println("key array size", i) | 
|  | panic("fail") | 
|  | } | 
|  |  | 
|  | i = 0 | 
|  | for k := range p { | 
|  | v := p[k] | 
|  | if v != f(k) { | 
|  | println("key pointer range", k, v, p[k]) | 
|  | panic("fail") | 
|  | } | 
|  | i++ | 
|  | } | 
|  | if i != size { | 
|  | println("key pointer size", i) | 
|  | panic("fail") | 
|  | } | 
|  |  | 
|  | i = 0 | 
|  | for k := range m { | 
|  | v := m[k] | 
|  | if v != f(k) { | 
|  | println("key map range", k, v, m[k]) | 
|  | panic("fail") | 
|  | } | 
|  | i++ | 
|  | } | 
|  | if i != size { | 
|  | println("key map size", i) | 
|  | panic("fail") | 
|  | } | 
|  |  | 
|  | /* | 
|  | * key,value | 
|  | */ | 
|  | i = 0 | 
|  | for k, v := range a { | 
|  | if v != f(k) { | 
|  | println("key:value array range", k, v, a[k]) | 
|  | panic("fail") | 
|  | } | 
|  | i++ | 
|  | } | 
|  | if i != size { | 
|  | println("key:value array size", i) | 
|  | panic("fail") | 
|  | } | 
|  |  | 
|  | i = 0 | 
|  | for k, v := range p { | 
|  | if v != f(k) { | 
|  | println("key:value pointer range", k, v, p[k]) | 
|  | panic("fail") | 
|  | } | 
|  | i++ | 
|  | } | 
|  | if i != size { | 
|  | println("key:value pointer size", i) | 
|  | panic("fail") | 
|  | } | 
|  |  | 
|  | i = 0 | 
|  | for k, v := range m { | 
|  | if v != f(k) { | 
|  | println("key:value map range", k, v, m[k]) | 
|  | panic("fail") | 
|  | } | 
|  | i++ | 
|  | } | 
|  | if i != size { | 
|  | println("key:value map size", i) | 
|  | panic("fail") | 
|  | } | 
|  | } |