LEFT | RIGHT |
1 // Copyright 2012 The Go Authors. All rights reserved. | 1 // Copyright 2012 The Go Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style | 2 // Use of this source code is governed by a BSD-style |
3 // license that can be found in the LICENSE file. | 3 // license that can be found in the LICENSE file. |
| 4 |
4 package runtime_test | 5 package runtime_test |
5 | 6 |
6 import ( | 7 import ( |
7 "bytes" | 8 "bytes" |
8 "io" | 9 "io" |
9 "testing" | 10 "testing" |
10 ) | 11 ) |
11 | 12 |
12 var ( | 13 var ( |
13 » I interface{} | 14 » I interface{} |
14 » J int | 15 » J int |
15 » B = new(bytes.Buffer) | 16 » B = new(bytes.Buffer) |
16 » W io.Writer = B | 17 » W io.Writer = B |
17 » I2 interface{} = B | 18 » I2 interface{} = B |
18 » R io.ReadWriter = B | 19 » R io.ReadWriter = B |
| 20 » Big [2]*int |
19 ) | 21 ) |
20 | 22 |
21 func BenchmarkConvT2E(b *testing.B) { | 23 func BenchmarkConvT2E(b *testing.B) { |
22 for i := 0; i < b.N; i++ { | 24 for i := 0; i < b.N; i++ { |
23 I = 1 | 25 I = 1 |
| 26 } |
| 27 } |
| 28 |
| 29 func BenchmarkConvT2EBig(b *testing.B) { |
| 30 v := [2]*int{} |
| 31 for i := 0; i < b.N; i++ { |
| 32 I = v |
24 } | 33 } |
25 } | 34 } |
26 | 35 |
27 func BenchmarkConvT2I(b *testing.B) { | 36 func BenchmarkConvT2I(b *testing.B) { |
28 for i := 0; i < b.N; i++ { | 37 for i := 0; i < b.N; i++ { |
29 W = B | 38 W = B |
30 } | 39 } |
31 } | 40 } |
32 | 41 |
33 func BenchmarkConvI2E(b *testing.B) { | 42 func BenchmarkConvI2E(b *testing.B) { |
34 for i := 0; i < b.N; i++ { | 43 for i := 0; i < b.N; i++ { |
35 I = W | 44 I = W |
36 } | 45 } |
37 } | 46 } |
38 | 47 |
39 func BenchmarkConvI2I(b *testing.B) { | 48 func BenchmarkConvI2I(b *testing.B) { |
40 for i := 0; i < b.N; i++ { | 49 for i := 0; i < b.N; i++ { |
41 W = R | 50 W = R |
42 } | 51 } |
43 } | 52 } |
44 | 53 |
45 func BenchmarkAssertE2T(b *testing.B) { | 54 func BenchmarkAssertE2T(b *testing.B) { |
46 I = 1 | 55 I = 1 |
47 for i := 0; i < b.N; i++ { | 56 for i := 0; i < b.N; i++ { |
48 J = I.(int) | 57 J = I.(int) |
49 } | 58 } |
50 } | 59 } |
51 | 60 |
| 61 func BenchmarkAssertE2TBig(b *testing.B) { |
| 62 var v interface{} = [2]*int{} |
| 63 for i := 0; i < b.N; i++ { |
| 64 Big = v.([2]*int) |
| 65 } |
| 66 } |
| 67 |
52 func BenchmarkAssertE2I(b *testing.B) { | 68 func BenchmarkAssertE2I(b *testing.B) { |
53 for i := 0; i < b.N; i++ { | 69 for i := 0; i < b.N; i++ { |
54 W = I2.(io.Writer) | 70 W = I2.(io.Writer) |
55 } | 71 } |
56 } | 72 } |
57 | 73 |
58 func BenchmarkAssertI2T(b *testing.B) { | 74 func BenchmarkAssertI2T(b *testing.B) { |
59 for i := 0; i < b.N; i++ { | 75 for i := 0; i < b.N; i++ { |
60 B = W.(*bytes.Buffer) | 76 B = W.(*bytes.Buffer) |
61 } | 77 } |
62 } | 78 } |
63 | 79 |
64 func BenchmarkAssertI2I(b *testing.B) { | 80 func BenchmarkAssertI2I(b *testing.B) { |
65 for i := 0; i < b.N; i++ { | 81 for i := 0; i < b.N; i++ { |
66 W = R.(io.Writer) | 82 W = R.(io.Writer) |
67 } | 83 } |
68 } | 84 } |
69 | 85 |
70 func BenchmarkAssertI2E(b *testing.B) { | 86 func BenchmarkAssertI2E(b *testing.B) { |
71 for i := 0; i < b.N; i++ { | 87 for i := 0; i < b.N; i++ { |
72 » » W = I2.(io.Writer) | 88 » » I = R.(interface{}) |
73 } | 89 } |
74 } | 90 } |
75 | 91 |
76 func BenchmarkAssertE2E(b *testing.B) { | 92 func BenchmarkAssertE2E(b *testing.B) { |
77 for i := 0; i < b.N; i++ { | 93 for i := 0; i < b.N; i++ { |
78 I = I2.(interface{}) | 94 I = I2.(interface{}) |
79 } | 95 } |
80 } | 96 } |
LEFT | RIGHT |