github.com/nspcc-dev/neo-go@v0.105.2-0.20240517133400-6be757af3eba/pkg/vm/bench_test.go (about)

     1  package vm
     2  
     3  import (
     4  	"encoding/base64"
     5  	"strconv"
     6  	"testing"
     7  
     8  	"github.com/nspcc-dev/neo-go/pkg/vm/opcode"
     9  	"github.com/stretchr/testify/require"
    10  )
    11  
    12  func benchScript(t *testing.B, script []byte) {
    13  	for n := 0; n < t.N; n++ {
    14  		t.StopTimer()
    15  		vm := load(script)
    16  		t.StartTimer()
    17  		err := vm.Run()
    18  		t.StopTimer()
    19  		require.NoError(t, err)
    20  		t.StartTimer()
    21  	}
    22  }
    23  
    24  // Shared as is by @ixje once upon a time (compiled from Python).
    25  func BenchmarkScriptFibonacci(t *testing.B) {
    26  	var script = []byte{87, 5, 0, 16, 112, 17, 113, 105, 104, 18, 192, 114, 16, 115, 34, 28, 104, 105, 158, 116, 106, 108, 75,
    27  		217, 48, 38, 5, 139, 34, 5, 207, 34, 3, 114, 105, 112, 108, 113, 107, 17, 158, 115, 107, 12, 2, 94, 1,
    28  		219, 33, 181, 36, 222, 106, 64}
    29  	benchScript(t, script)
    30  }
    31  
    32  func BenchmarkScriptNestedRefCount(t *testing.B) {
    33  	b64script := "whBNEcARTRHAVgEB/gGdYBFNEU0SwFMSwFhKJPNFUUVFRQ=="
    34  	script, err := base64.StdEncoding.DecodeString(b64script)
    35  	require.NoError(t, err)
    36  	benchScript(t, script)
    37  }
    38  
    39  func BenchmarkScriptPushPop(t *testing.B) {
    40  	for _, i := range []int{4, 16, 128, 1024} {
    41  		t.Run(strconv.Itoa(i), func(t *testing.B) {
    42  			var script = make([]byte, i*2)
    43  			for p := 0; p < i; p++ {
    44  				script[p] = byte(opcode.PUSH1)
    45  				script[i+p] = byte(opcode.DROP)
    46  			}
    47  			benchScript(t, script)
    48  		})
    49  	}
    50  }
    51  
    52  func BenchmarkIsSignatureContract(t *testing.B) {
    53  	b64script := "DCED2eixa9myLTNF1tTN4xvhw+HRYVMuPQzOy5Xs4utYM25BVuezJw=="
    54  	script, err := base64.StdEncoding.DecodeString(b64script)
    55  	require.NoError(t, err)
    56  	for n := 0; n < t.N; n++ {
    57  		_ = IsSignatureContract(script)
    58  	}
    59  }