github.com/go-asm/go@v1.21.1-0.20240213172139-40c5ead50c48/cmd/compile/reflectdata/alg_test.go (about)

     1  // Copyright 2021 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 reflectdata_test
     6  
     7  import (
     8  	"testing"
     9  )
    10  
    11  func BenchmarkEqArrayOfStrings5(b *testing.B) {
    12  	var a [5]string
    13  	var c [5]string
    14  
    15  	for i := 0; i < 5; i++ {
    16  		a[i] = "aaaa"
    17  		c[i] = "cccc"
    18  	}
    19  
    20  	for j := 0; j < b.N; j++ {
    21  		_ = a == c
    22  	}
    23  }
    24  
    25  func BenchmarkEqArrayOfStrings64(b *testing.B) {
    26  	var a [64]string
    27  	var c [64]string
    28  
    29  	for i := 0; i < 64; i++ {
    30  		a[i] = "aaaa"
    31  		c[i] = "cccc"
    32  	}
    33  
    34  	for j := 0; j < b.N; j++ {
    35  		_ = a == c
    36  	}
    37  }
    38  
    39  func BenchmarkEqArrayOfStrings1024(b *testing.B) {
    40  	var a [1024]string
    41  	var c [1024]string
    42  
    43  	for i := 0; i < 1024; i++ {
    44  		a[i] = "aaaa"
    45  		c[i] = "cccc"
    46  	}
    47  
    48  	for j := 0; j < b.N; j++ {
    49  		_ = a == c
    50  	}
    51  }
    52  
    53  func BenchmarkEqArrayOfFloats5(b *testing.B) {
    54  	var a [5]float32
    55  	var c [5]float32
    56  
    57  	for i := 0; i < b.N; i++ {
    58  		_ = a == c
    59  	}
    60  }
    61  
    62  func BenchmarkEqArrayOfFloats64(b *testing.B) {
    63  	var a [64]float32
    64  	var c [64]float32
    65  
    66  	for i := 0; i < b.N; i++ {
    67  		_ = a == c
    68  	}
    69  }
    70  
    71  func BenchmarkEqArrayOfFloats1024(b *testing.B) {
    72  	var a [1024]float32
    73  	var c [1024]float32
    74  
    75  	for i := 0; i < b.N; i++ {
    76  		_ = a == c
    77  	}
    78  }
    79  
    80  func BenchmarkEqArrayOfStructsEq(b *testing.B) {
    81  	type T2 struct {
    82  		a string
    83  		b int
    84  	}
    85  	const size = 1024
    86  	var (
    87  		str1 = "foobar"
    88  
    89  		a [size]T2
    90  		c [size]T2
    91  	)
    92  
    93  	for i := 0; i < size; i++ {
    94  		a[i].a = str1
    95  		c[i].a = str1
    96  	}
    97  
    98  	b.ResetTimer()
    99  	for j := 0; j < b.N; j++ {
   100  		_ = a == c
   101  	}
   102  }
   103  
   104  func BenchmarkEqArrayOfStructsNotEq(b *testing.B) {
   105  	type T2 struct {
   106  		a string
   107  		b int
   108  	}
   109  	const size = 1024
   110  	var (
   111  		str1 = "foobar"
   112  		str2 = "foobarz"
   113  
   114  		a [size]T2
   115  		c [size]T2
   116  	)
   117  
   118  	for i := 0; i < size; i++ {
   119  		a[i].a = str1
   120  		c[i].a = str1
   121  	}
   122  	c[len(c)-1].a = str2
   123  
   124  	b.ResetTimer()
   125  	for j := 0; j < b.N; j++ {
   126  		_ = a == c
   127  	}
   128  }
   129  
   130  const size = 16
   131  
   132  type T1 struct {
   133  	a [size]byte
   134  }
   135  
   136  func BenchmarkEqStruct(b *testing.B) {
   137  	x, y := T1{}, T1{}
   138  	x.a = [size]byte{1, 2, 3, 4, 5, 6, 7, 8}
   139  	y.a = [size]byte{2, 3, 4, 5, 6, 7, 8, 9}
   140  
   141  	for i := 0; i < b.N; i++ {
   142  		f := x == y
   143  		if f {
   144  			println("hello")
   145  		}
   146  	}
   147  }