github.com/MetalBlockchain/metalgo@v1.11.9/utils/formatting/encoding_benchmark_test.go (about)

     1  // Copyright (C) 2019-2024, Ava Labs, Inc. All rights reserved.
     2  // See the file LICENSE for licensing terms.
     3  
     4  package formatting
     5  
     6  import (
     7  	"fmt"
     8  	"math/rand"
     9  	"testing"
    10  
    11  	"github.com/stretchr/testify/require"
    12  
    13  	"github.com/MetalBlockchain/metalgo/utils/units"
    14  )
    15  
    16  func BenchmarkEncodings(b *testing.B) {
    17  	benchmarks := []struct {
    18  		encoding Encoding
    19  		size     int
    20  	}{
    21  		{
    22  			encoding: Hex,
    23  			size:     1 * units.KiB, // 1kb
    24  		},
    25  		{
    26  			encoding: Hex,
    27  			size:     4 * units.KiB, // 4kb
    28  		},
    29  		{
    30  			encoding: Hex,
    31  			size:     32 * units.KiB, // 32kb
    32  		},
    33  		{
    34  			encoding: Hex,
    35  			size:     128 * units.KiB, // 128kb
    36  		},
    37  		{
    38  			encoding: Hex,
    39  			size:     256 * units.KiB, // 256kb
    40  		},
    41  		{
    42  			encoding: Hex,
    43  			size:     512 * units.KiB, // 512kb
    44  		},
    45  		{
    46  			encoding: Hex,
    47  			size:     1 * units.MiB, // 1mb
    48  		},
    49  		{
    50  			encoding: Hex,
    51  			size:     2 * units.MiB, // 2mb
    52  		},
    53  		{
    54  			encoding: Hex,
    55  			size:     4 * units.MiB, // 4mb
    56  		},
    57  	}
    58  	for _, benchmark := range benchmarks {
    59  		bytes := make([]byte, benchmark.size)
    60  		_, _ = rand.Read(bytes) // #nosec G404
    61  		b.Run(fmt.Sprintf("%s-%d bytes", benchmark.encoding, benchmark.size), func(b *testing.B) {
    62  			for n := 0; n < b.N; n++ {
    63  				_, err := Encode(benchmark.encoding, bytes)
    64  				require.NoError(b, err)
    65  			}
    66  		})
    67  	}
    68  }