github.com/prysmaticlabs/prysm@v1.4.4/beacon-chain/state/stateutil/state_root_test.go (about)

     1  package stateutil_test
     2  
     3  import (
     4  	"context"
     5  	"reflect"
     6  	"strconv"
     7  	"testing"
     8  
     9  	pb "github.com/prysmaticlabs/prysm/proto/beacon/p2p/v1"
    10  	ethpb "github.com/prysmaticlabs/prysm/proto/eth/v1alpha1"
    11  	"github.com/prysmaticlabs/prysm/shared/interop"
    12  	"github.com/prysmaticlabs/prysm/shared/params"
    13  	"github.com/prysmaticlabs/prysm/shared/testutil/assert"
    14  	"github.com/prysmaticlabs/prysm/shared/testutil/require"
    15  )
    16  
    17  func TestState_FieldCount(t *testing.T) {
    18  	count := params.BeaconConfig().BeaconStateFieldCount
    19  	typ := reflect.TypeOf(pb.BeaconState{})
    20  	numFields := 0
    21  	for i := 0; i < typ.NumField(); i++ {
    22  		if typ.Field(i).Name == "state" ||
    23  			typ.Field(i).Name == "sizeCache" ||
    24  			typ.Field(i).Name == "unknownFields" {
    25  			continue
    26  		}
    27  		numFields++
    28  	}
    29  	assert.Equal(t, count, numFields)
    30  }
    31  
    32  func BenchmarkHashTreeRoot_Generic_512(b *testing.B) {
    33  	b.StopTimer()
    34  	genesisState := setupGenesisState(b, 512)
    35  	b.StartTimer()
    36  	for i := 0; i < b.N; i++ {
    37  		_, err := genesisState.HashTreeRoot()
    38  		require.NoError(b, err)
    39  	}
    40  }
    41  
    42  func BenchmarkHashTreeRoot_Generic_16384(b *testing.B) {
    43  	b.StopTimer()
    44  	genesisState := setupGenesisState(b, 16384)
    45  	b.StartTimer()
    46  	for i := 0; i < b.N; i++ {
    47  		_, err := genesisState.HashTreeRoot()
    48  		require.NoError(b, err)
    49  	}
    50  }
    51  
    52  func BenchmarkHashTreeRoot_Generic_300000(b *testing.B) {
    53  	b.StopTimer()
    54  	genesisState := setupGenesisState(b, 300000)
    55  	b.StartTimer()
    56  	for i := 0; i < b.N; i++ {
    57  		_, err := genesisState.HashTreeRoot()
    58  		require.NoError(b, err)
    59  	}
    60  }
    61  
    62  func setupGenesisState(tb testing.TB, count uint64) *pb.BeaconState {
    63  	genesisState, _, err := interop.GenerateGenesisState(context.Background(), 0, 1)
    64  	require.NoError(tb, err, "Could not generate genesis beacon state")
    65  	for i := uint64(1); i < count; i++ {
    66  		someRoot := [32]byte{}
    67  		someKey := [48]byte{}
    68  		copy(someRoot[:], strconv.Itoa(int(i)))
    69  		copy(someKey[:], strconv.Itoa(int(i)))
    70  		genesisState.Validators = append(genesisState.Validators, &ethpb.Validator{
    71  			PublicKey:                  someKey[:],
    72  			WithdrawalCredentials:      someRoot[:],
    73  			EffectiveBalance:           params.BeaconConfig().MaxEffectiveBalance,
    74  			Slashed:                    false,
    75  			ActivationEligibilityEpoch: 1,
    76  			ActivationEpoch:            1,
    77  			ExitEpoch:                  1,
    78  			WithdrawableEpoch:          1,
    79  		})
    80  		genesisState.Balances = append(genesisState.Balances, params.BeaconConfig().MaxEffectiveBalance)
    81  	}
    82  	return genesisState
    83  }