iface_test.go 1.9 KB

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