github.com/Finschia/finschia-sdk@v0.48.1/types/coin_benchmark_test.go (about) 1 package types 2 3 import ( 4 "fmt" 5 "testing" 6 ) 7 8 func coinName(suffix int) string { 9 return fmt.Sprintf("coinz%d", suffix) 10 } 11 12 func BenchmarkCoinsAdditionIntersect(b *testing.B) { 13 b.ReportAllocs() 14 benchmarkingFunc := func(numCoinsA int, numCoinsB int) func(b *testing.B) { 15 return func(b *testing.B) { 16 b.ReportAllocs() 17 coinsA := Coins(make([]Coin, numCoinsA)) 18 coinsB := Coins(make([]Coin, numCoinsB)) 19 20 for i := 0; i < numCoinsA; i++ { 21 coinsA[i] = NewCoin(coinName(i), NewInt(int64(i))) 22 } 23 for i := 0; i < numCoinsB; i++ { 24 coinsB[i] = NewCoin(coinName(i), NewInt(int64(i))) 25 } 26 27 b.ResetTimer() 28 29 for i := 0; i < b.N; i++ { 30 coinsA.Add(coinsB...) 31 } 32 } 33 } 34 35 benchmarkSizes := [][]int{{1, 1}, {5, 5}, {5, 20}, {1, 1000}, {2, 1000}} 36 for i := 0; i < len(benchmarkSizes); i++ { 37 sizeA := benchmarkSizes[i][0] 38 sizeB := benchmarkSizes[i][1] 39 b.Run(fmt.Sprintf("sizes: A_%d, B_%d", sizeA, sizeB), benchmarkingFunc(sizeA, sizeB)) 40 } 41 } 42 43 func BenchmarkCoinsAdditionNoIntersect(b *testing.B) { 44 b.ReportAllocs() 45 benchmarkingFunc := func(numCoinsA int, numCoinsB int) func(b *testing.B) { 46 return func(b *testing.B) { 47 b.ReportAllocs() 48 coinsA := Coins(make([]Coin, numCoinsA)) 49 coinsB := Coins(make([]Coin, numCoinsB)) 50 51 for i := 0; i < numCoinsA; i++ { 52 coinsA[i] = NewCoin(coinName(numCoinsB+i), NewInt(int64(i))) 53 } 54 for i := 0; i < numCoinsB; i++ { 55 coinsB[i] = NewCoin(coinName(i), NewInt(int64(i))) 56 } 57 58 b.ResetTimer() 59 60 for i := 0; i < b.N; i++ { 61 coinsA.Add(coinsB...) 62 } 63 } 64 } 65 66 benchmarkSizes := [][]int{{1, 1}, {5, 5}, {5, 20}, {1, 1000}, {2, 1000}, {1000, 2}} 67 for i := 0; i < len(benchmarkSizes); i++ { 68 sizeA := benchmarkSizes[i][0] 69 sizeB := benchmarkSizes[i][1] 70 b.Run(fmt.Sprintf("sizes: A_%d, B_%d", sizeA, sizeB), benchmarkingFunc(sizeA, sizeB)) 71 } 72 }