mirror of
				https://github.com/golang/go.git
				synced 2025-11-04 02:30:57 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			121 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			121 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
// 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")
 | 
						|
	}
 | 
						|
}
 |