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