github.com/MetalBlockchain/metalgo@v1.11.9/snow/consensus/snowball/flat_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 snowball
     5  
     6  import (
     7  	"testing"
     8  
     9  	"github.com/stretchr/testify/require"
    10  
    11  	"github.com/MetalBlockchain/metalgo/utils/bag"
    12  )
    13  
    14  func TestFlat(t *testing.T) {
    15  	require := require.New(t)
    16  
    17  	params := Parameters{
    18  		K:               3,
    19  		AlphaPreference: 2,
    20  		AlphaConfidence: 3,
    21  		Beta:            2,
    22  	}
    23  	f := NewFlat(SnowballFactory, params, Red)
    24  	f.Add(Green)
    25  	f.Add(Blue)
    26  
    27  	require.Equal(Red, f.Preference())
    28  	require.False(f.Finalized())
    29  
    30  	threeBlue := bag.Of(Blue, Blue, Blue)
    31  	require.True(f.RecordPoll(threeBlue))
    32  	require.Equal(Blue, f.Preference())
    33  	require.False(f.Finalized())
    34  
    35  	twoGreen := bag.Of(Green, Green)
    36  	require.True(f.RecordPoll(twoGreen))
    37  	require.Equal(Blue, f.Preference())
    38  	require.False(f.Finalized())
    39  
    40  	threeGreen := bag.Of(Green, Green, Green)
    41  	require.True(f.RecordPoll(threeGreen))
    42  	require.Equal(Green, f.Preference())
    43  	require.False(f.Finalized())
    44  
    45  	// Reset the confidence from previous round
    46  	oneEach := bag.Of(Red, Green, Blue)
    47  	require.False(f.RecordPoll(oneEach))
    48  	require.Equal(Green, f.Preference())
    49  	require.False(f.Finalized())
    50  
    51  	require.True(f.RecordPoll(threeGreen))
    52  	require.Equal(Green, f.Preference())
    53  	require.False(f.Finalized()) // Not finalized before Beta rounds
    54  
    55  	require.True(f.RecordPoll(threeGreen))
    56  	require.Equal(Green, f.Preference())
    57  	require.True(f.Finalized())
    58  
    59  	expected := "SB(Preference = 2mcwQKiD8VEspmMJpL1dc7okQQ5dDVAWeCBZ7FWBFAbxpv3t7w, PreferenceStrength = 4, SF(Confidence = [2], Finalized = true, SL(Preference = 2mcwQKiD8VEspmMJpL1dc7okQQ5dDVAWeCBZ7FWBFAbxpv3t7w)))"
    60  	require.Equal(expected, f.String())
    61  }