...
Run Format

Source file test/func5.go

Documentation: test

  // 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 functions and goroutines.
  
  package main
  
  func caller(f func(int, int) int, a, b int, c chan int) {
  	c <- f(a, b)
  }
  
  func gocall(f func(int, int) int, a, b int) int {
  	c := make(chan int)
  	go caller(f, a, b, c)
  	return <-c
  }
  
  func call(f func(int, int) int, a, b int) int {
  	return f(a, b)
  }
  
  func call1(f func(int, int) int, a, b int) int {
  	return call(f, a, b)
  }
  
  var f func(int, int) int
  
  func add(x, y int) int {
  	return x + y
  }
  
  func fn() func(int, int) int {
  	return f
  }
  
  var fc func(int, int, chan int)
  
  func addc(x, y int, c chan int) {
  	c <- x+y
  }
  
  func fnc() func(int, int, chan int) {
  	return fc
  }
  
  func three(x int) {
  	if x != 3 {
  		println("wrong val", x)
  		panic("fail")
  	}
  }
  
  var notmain func()
  
  func emptyresults() {}
  func noresults()    {}
  
  var nothing func()
  
  func main() {
  	three(call(add, 1, 2))
  	three(call1(add, 1, 2))
  	f = add
  	three(call(f, 1, 2))
  	three(call1(f, 1, 2))
  	three(call(fn(), 1, 2))
  	three(call1(fn(), 1, 2))
  	three(call(func(a, b int) int { return a + b }, 1, 2))
  	three(call1(func(a, b int) int { return a + b }, 1, 2))
  
  	fc = addc
  	c := make(chan int)
  	go addc(1, 2, c)
  	three(<-c)
  	go fc(1, 2, c)
  	three(<-c)
  	go fnc()(1, 2, c)
  	three(<-c)
  	go func(a, b int, c chan int) { c <- a+b }(1, 2, c)
  	three(<-c)
  
  	emptyresults()
  	noresults()
  	nothing = emptyresults
  	nothing()
  	nothing = noresults
  	nothing()
  }
  

View as plain text