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  }