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  }