|  | // Copyright 2011 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 runtime_test | 
|  |  | 
|  | import "testing" | 
|  |  | 
|  | var s int | 
|  |  | 
|  | func BenchmarkCallClosure(b *testing.B) { | 
|  | for i := 0; i < b.N; i++ { | 
|  | s += func(ii int) int { return 2 * ii }(i) | 
|  | } | 
|  | } | 
|  |  | 
|  | func BenchmarkCallClosure1(b *testing.B) { | 
|  | for i := 0; i < b.N; i++ { | 
|  | j := i | 
|  | s += func(ii int) int { return 2*ii + j }(i) | 
|  | } | 
|  | } | 
|  |  | 
|  | var ss *int | 
|  |  | 
|  | func BenchmarkCallClosure2(b *testing.B) { | 
|  | for i := 0; i < b.N; i++ { | 
|  | j := i | 
|  | s += func() int { | 
|  | ss = &j | 
|  | return 2 | 
|  | }() | 
|  | } | 
|  | } | 
|  |  | 
|  | func addr1(x int) *int { | 
|  | return func() *int { return &x }() | 
|  | } | 
|  |  | 
|  | func BenchmarkCallClosure3(b *testing.B) { | 
|  | for i := 0; i < b.N; i++ { | 
|  | ss = addr1(i) | 
|  | } | 
|  | } | 
|  |  | 
|  | func addr2() (x int, p *int) { | 
|  | return 0, func() *int { return &x }() | 
|  | } | 
|  |  | 
|  | func BenchmarkCallClosure4(b *testing.B) { | 
|  | for i := 0; i < b.N; i++ { | 
|  | _, ss = addr2() | 
|  | } | 
|  | } |