mirror of
				https://github.com/golang/go.git
				synced 2025-10-31 16:50:58 +00:00 
			
		
		
		
	 325cf8ef21
			
		
	
	
		325cf8ef21
		
	
	
	
	
		
			
			in the tests, println+panic. gofmt some tests too. R=rsc CC=golang-dev https://golang.org/cl/741041
		
			
				
	
	
		
			102 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			102 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| // $G $D/$F.go && $L $F.$A && ./$A.out
 | |
| 
 | |
| // 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.
 | |
| 
 | |
| package main
 | |
| 
 | |
| // test range over channels
 | |
| 
 | |
| func gen(c chan int, lo, hi int) {
 | |
| 	for i := lo; i <= hi; i++ {
 | |
| 		c <- i
 | |
| 	}
 | |
| 	close(c)
 | |
| }
 | |
| 
 | |
| func seq(lo, hi int) chan int {
 | |
| 	c := make(chan int)
 | |
| 	go gen(c, lo, hi)
 | |
| 	return c
 | |
| }
 | |
| 
 | |
| func testchan() {
 | |
| 	s := ""
 | |
| 	for i := range seq('a', 'z') {
 | |
| 		s += string(i)
 | |
| 	}
 | |
| 	if s != "abcdefghijklmnopqrstuvwxyz" {
 | |
| 		println("Wanted lowercase alphabet; got", s)
 | |
| 		panic("fail")
 | |
| 	}
 | |
| }
 | |
| 
 | |
| // test that range over array only evaluates
 | |
| // the expression after "range" once.
 | |
| 
 | |
| var nmake = 0
 | |
| 
 | |
| func makearray() []int {
 | |
| 	nmake++
 | |
| 	return []int{1, 2, 3, 4, 5}
 | |
| }
 | |
| 
 | |
| func testarray() {
 | |
| 	s := 0
 | |
| 	for _, v := range makearray() {
 | |
| 		s += v
 | |
| 	}
 | |
| 	if nmake != 1 {
 | |
| 		println("range called makearray", nmake, "times")
 | |
| 		panic("fail")
 | |
| 	}
 | |
| 	if s != 15 {
 | |
| 		println("wrong sum ranging over makearray")
 | |
| 		panic("fail")
 | |
| 	}
 | |
| }
 | |
| 
 | |
| // 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 {
 | |
| 		println("wrong number of calls:", ncalls, "!= 4")
 | |
| 		panic("fail")
 | |
| 	}
 | |
| 	if si != 1 || sv != 3 {
 | |
| 		println("wrong sum in testcalls", si, sv)
 | |
| 		panic("fail")
 | |
| 	}
 | |
| 
 | |
| 	ncalls = 0
 | |
| 	for *getvar(&i), *getvar(&v) = range [0]int{} {
 | |
| 		println("loop ran on empty array")
 | |
| 		panic("fail")
 | |
| 	}
 | |
| 	if ncalls != 0 {
 | |
| 		println("wrong number of calls:", ncalls, "!= 0")
 | |
| 		panic("fail")
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func main() {
 | |
| 	testchan()
 | |
| 	testarray()
 | |
| 	testcalls()
 | |
| }
 |