1// Copyright 2011 The Go Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style
3// license that can be found in the LICENSE file.
4package runtime_test
5
6import "testing"
7
8var s int
9
10func BenchmarkCallClosure(b *testing.B) {
11	for i := 0; i < b.N; i++ {
12		s += func(ii int) int { return 2 * ii }(i)
13	}
14}
15
16func BenchmarkCallClosure1(b *testing.B) {
17	for i := 0; i < b.N; i++ {
18		j := i
19		s += func(ii int) int { return 2*ii + j }(i)
20	}
21}
22
23var ss *int
24
25func BenchmarkCallClosure2(b *testing.B) {
26	for i := 0; i < b.N; i++ {
27		j := i
28		s += func() int {
29			ss = &j
30			return 2
31		}()
32	}
33}
34
35func addr1(x int) *int {
36	return func() *int { return &x }()
37}
38
39func BenchmarkCallClosure3(b *testing.B) {
40	for i := 0; i < b.N; i++ {
41		ss = addr1(i)
42	}
43}
44
45func addr2() (x int, p *int) {
46	return 0, func() *int { return &x }()
47}
48
49func BenchmarkCallClosure4(b *testing.B) {
50	for i := 0; i < b.N; i++ {
51		_, ss = addr2()
52	}
53}
54