github.com/varialus/godfly@v0.0.0-20130904042352-1934f9f095ab/src/pkg/runtime/iface_test.go (about) 1 // Copyright 2012 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. 4 5 package runtime_test 6 7 import ( 8 "testing" 9 ) 10 11 type I1 interface { 12 Method1() 13 } 14 15 type I2 interface { 16 Method1() 17 Method2() 18 } 19 20 type TS uint16 21 type TM uintptr 22 type TL [2]uintptr 23 24 func (TS) Method1() {} 25 func (TS) Method2() {} 26 func (TM) Method1() {} 27 func (TM) Method2() {} 28 func (TL) Method1() {} 29 func (TL) Method2() {} 30 31 var ( 32 e interface{} 33 e_ interface{} 34 i1 I1 35 i2 I2 36 ts TS 37 tm TM 38 tl TL 39 ) 40 41 func BenchmarkConvT2ESmall(b *testing.B) { 42 for i := 0; i < b.N; i++ { 43 e = ts 44 } 45 } 46 47 func BenchmarkConvT2EUintptr(b *testing.B) { 48 for i := 0; i < b.N; i++ { 49 e = tm 50 } 51 } 52 53 func BenchmarkConvT2ELarge(b *testing.B) { 54 for i := 0; i < b.N; i++ { 55 e = tl 56 } 57 } 58 59 func BenchmarkConvT2ISmall(b *testing.B) { 60 for i := 0; i < b.N; i++ { 61 i1 = ts 62 } 63 } 64 65 func BenchmarkConvT2IUintptr(b *testing.B) { 66 for i := 0; i < b.N; i++ { 67 i1 = tm 68 } 69 } 70 71 func BenchmarkConvT2ILarge(b *testing.B) { 72 for i := 0; i < b.N; i++ { 73 i1 = tl 74 } 75 } 76 77 func BenchmarkConvI2E(b *testing.B) { 78 i2 = tm 79 for i := 0; i < b.N; i++ { 80 e = i2 81 } 82 } 83 84 func BenchmarkConvI2I(b *testing.B) { 85 i2 = tm 86 for i := 0; i < b.N; i++ { 87 i1 = i2 88 } 89 } 90 91 func BenchmarkAssertE2T(b *testing.B) { 92 e = tm 93 for i := 0; i < b.N; i++ { 94 tm = e.(TM) 95 } 96 } 97 98 func BenchmarkAssertE2TLarge(b *testing.B) { 99 e = tl 100 for i := 0; i < b.N; i++ { 101 tl = e.(TL) 102 } 103 } 104 105 func BenchmarkAssertE2I(b *testing.B) { 106 e = tm 107 for i := 0; i < b.N; i++ { 108 i1 = e.(I1) 109 } 110 } 111 112 func BenchmarkAssertI2T(b *testing.B) { 113 i1 = tm 114 for i := 0; i < b.N; i++ { 115 tm = i1.(TM) 116 } 117 } 118 119 func BenchmarkAssertI2I(b *testing.B) { 120 i1 = tm 121 for i := 0; i < b.N; i++ { 122 i2 = i1.(I2) 123 } 124 } 125 126 func BenchmarkAssertI2E(b *testing.B) { 127 i1 = tm 128 for i := 0; i < b.N; i++ { 129 e = i1.(interface{}) 130 } 131 } 132 133 func BenchmarkAssertE2E(b *testing.B) { 134 e = tm 135 for i := 0; i < b.N; i++ { 136 e_ = e 137 } 138 }