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 }