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  }