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