Home | History | Annotate | Download | only in test
      1 // run
      2 
      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 
      7 // Test functions and goroutines.
      8 
      9 package main
     10 
     11 func caller(f func(int, int) int, a, b int, c chan int) {
     12 	c <- f(a, b)
     13 }
     14 
     15 func gocall(f func(int, int) int, a, b int) int {
     16 	c := make(chan int)
     17 	go caller(f, a, b, c)
     18 	return <-c
     19 }
     20 
     21 func call(f func(int, int) int, a, b int) int {
     22 	return f(a, b)
     23 }
     24 
     25 func call1(f func(int, int) int, a, b int) int {
     26 	return call(f, a, b)
     27 }
     28 
     29 var f func(int, int) int
     30 
     31 func add(x, y int) int {
     32 	return x + y
     33 }
     34 
     35 func fn() func(int, int) int {
     36 	return f
     37 }
     38 
     39 var fc func(int, int, chan int)
     40 
     41 func addc(x, y int, c chan int) {
     42 	c <- x+y
     43 }
     44 
     45 func fnc() func(int, int, chan int) {
     46 	return fc
     47 }
     48 
     49 func three(x int) {
     50 	if x != 3 {
     51 		println("wrong val", x)
     52 		panic("fail")
     53 	}
     54 }
     55 
     56 var notmain func()
     57 
     58 func emptyresults() {}
     59 func noresults()    {}
     60 
     61 var nothing func()
     62 
     63 func main() {
     64 	three(call(add, 1, 2))
     65 	three(call1(add, 1, 2))
     66 	f = add
     67 	three(call(f, 1, 2))
     68 	three(call1(f, 1, 2))
     69 	three(call(fn(), 1, 2))
     70 	three(call1(fn(), 1, 2))
     71 	three(call(func(a, b int) int { return a + b }, 1, 2))
     72 	three(call1(func(a, b int) int { return a + b }, 1, 2))
     73 
     74 	fc = addc
     75 	c := make(chan int)
     76 	go addc(1, 2, c)
     77 	three(<-c)
     78 	go fc(1, 2, c)
     79 	three(<-c)
     80 	go fnc()(1, 2, c)
     81 	three(<-c)
     82 	go func(a, b int, c chan int) { c <- a+b }(1, 2, c)
     83 	three(<-c)
     84 
     85 	emptyresults()
     86 	noresults()
     87 	nothing = emptyresults
     88 	nothing()
     89 	nothing = noresults
     90 	nothing()
     91 }
     92