Skip to content

Commit be4ccba

Browse files
committed
Address code review comments
Signed-off-by: Yacov Manevich <yacov.manevich@avalabs.org>
1 parent e3597d8 commit be4ccba

File tree

5 files changed

+484
-319
lines changed

5 files changed

+484
-319
lines changed

snow/consensus/snowball/binary_snowball_test.go

Lines changed: 69 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -19,26 +19,25 @@ func TestBinarySnowball(t *testing.T) {
1919
beta := 2
2020
terminationConditions := newSingleTerminationCondition(alphaConfidence, beta)
2121

22-
sf := newBinarySnowflake(alphaPreference, terminationConditions, red)
23-
24-
require.Equal(red, sf.Preference())
25-
require.False(sf.Finalized())
22+
sb := newBinarySnowball(alphaPreference, terminationConditions, red)
23+
require.Equal(red, sb.Preference())
24+
require.False(sb.Finalized())
2625

27-
sf.RecordPoll(alphaConfidence, blue)
28-
require.Equal(blue, sf.Preference())
29-
require.False(sf.Finalized())
26+
sb.RecordPoll(alphaConfidence, blue)
27+
require.Equal(blue, sb.Preference())
28+
require.False(sb.Finalized())
3029

31-
sf.RecordPoll(alphaConfidence, red)
32-
require.Equal(red, sf.Preference())
33-
require.False(sf.Finalized())
30+
sb.RecordPoll(alphaConfidence, red)
31+
require.Equal(blue, sb.Preference())
32+
require.False(sb.Finalized())
3433

35-
sf.RecordPoll(alphaConfidence, blue)
36-
require.Equal(blue, sf.Preference())
37-
require.False(sf.Finalized())
34+
sb.RecordPoll(alphaConfidence, blue)
35+
require.Equal(blue, sb.Preference())
36+
require.False(sb.Finalized())
3837

39-
sf.RecordPoll(alphaConfidence, blue)
40-
require.Equal(blue, sf.Preference())
41-
require.True(sf.Finalized())
38+
sb.RecordPoll(alphaConfidence, blue)
39+
require.Equal(blue, sb.Preference())
40+
require.True(sb.Finalized())
4241
}
4342

4443
func TestBinarySnowballRecordPollPreference(t *testing.T) {
@@ -51,32 +50,32 @@ func TestBinarySnowballRecordPollPreference(t *testing.T) {
5150
beta := 2
5251
terminationConditions := newSingleTerminationCondition(alphaConfidence, beta)
5352

54-
sf := newBinarySnowflake(alphaPreference, terminationConditions, red)
55-
require.Equal(red, sf.Preference())
56-
require.False(sf.Finalized())
53+
sb := newBinarySnowball(alphaPreference, terminationConditions, red)
54+
require.Equal(red, sb.Preference())
55+
require.False(sb.Finalized())
5756

58-
sf.RecordPoll(alphaConfidence, blue)
59-
require.Equal(blue, sf.Preference())
60-
require.False(sf.Finalized())
57+
sb.RecordPoll(alphaConfidence, blue)
58+
require.Equal(blue, sb.Preference())
59+
require.False(sb.Finalized())
6160

62-
sf.RecordPoll(alphaConfidence, red)
63-
require.Equal(red, sf.Preference())
64-
require.False(sf.Finalized())
61+
sb.RecordPoll(alphaConfidence, red)
62+
require.Equal(blue, sb.Preference())
63+
require.False(sb.Finalized())
6564

66-
sf.RecordPoll(alphaPreference, red)
67-
require.Equal(red, sf.Preference())
68-
require.False(sf.Finalized())
65+
sb.RecordPoll(alphaPreference, red)
66+
require.Equal(red, sb.Preference())
67+
require.False(sb.Finalized())
6968

70-
sf.RecordPoll(alphaConfidence, red)
71-
require.Equal(red, sf.Preference())
72-
require.False(sf.Finalized())
69+
sb.RecordPoll(alphaConfidence, red)
70+
require.Equal(red, sb.Preference())
71+
require.False(sb.Finalized())
7372

74-
sf.RecordPoll(alphaConfidence, red)
75-
require.Equal(red, sf.Preference())
76-
require.True(sf.Finalized())
73+
sb.RecordPoll(alphaConfidence, red)
74+
require.Equal(red, sb.Preference())
75+
require.True(sb.Finalized())
7776

78-
expected := "SF(Confidence = [2], Finalized = true, SL(Preference = 0))"
79-
require.Equal(expected, sf.String())
77+
expected := "SB(Preference = 0, PreferenceStrength[0] = 4, PreferenceStrength[1] = 1, SF(Confidence = [2], Finalized = true, SL(Preference = 0)))"
78+
require.Equal(expected, sb.String())
8079
}
8180

8281
func TestBinarySnowballRecordUnsuccessfulPoll(t *testing.T) {
@@ -89,26 +88,26 @@ func TestBinarySnowballRecordUnsuccessfulPoll(t *testing.T) {
8988
beta := 2
9089
terminationConditions := newSingleTerminationCondition(alphaConfidence, beta)
9190

92-
sf := newBinarySnowflake(alphaPreference, terminationConditions, red)
93-
require.Equal(red, sf.Preference())
94-
require.False(sf.Finalized())
91+
sb := newBinarySnowball(alphaPreference, terminationConditions, red)
92+
require.Equal(red, sb.Preference())
93+
require.False(sb.Finalized())
9594

96-
sf.RecordPoll(alphaConfidence, blue)
97-
require.Equal(blue, sf.Preference())
98-
require.False(sf.Finalized())
95+
sb.RecordPoll(alphaConfidence, blue)
96+
require.Equal(blue, sb.Preference())
97+
require.False(sb.Finalized())
9998

100-
sf.RecordUnsuccessfulPoll()
99+
sb.RecordUnsuccessfulPoll()
101100

102-
sf.RecordPoll(alphaConfidence, blue)
103-
require.Equal(blue, sf.Preference())
104-
require.False(sf.Finalized())
101+
sb.RecordPoll(alphaConfidence, blue)
102+
require.Equal(blue, sb.Preference())
103+
require.False(sb.Finalized())
105104

106-
sf.RecordPoll(alphaConfidence, blue)
107-
require.Equal(blue, sf.Preference())
108-
require.True(sf.Finalized())
105+
sb.RecordPoll(alphaConfidence, blue)
106+
require.Equal(blue, sb.Preference())
107+
require.True(sb.Finalized())
109108

110-
expected := "SF(Confidence = [2], Finalized = true, SL(Preference = 1))"
111-
require.Equal(expected, sf.String())
109+
expected := "SB(Preference = 1, PreferenceStrength[0] = 0, PreferenceStrength[1] = 3, SF(Confidence = [2], Finalized = true, SL(Preference = 1)))"
110+
require.Equal(expected, sb.String())
112111
}
113112

114113
func TestBinarySnowballAcceptWeirdColor(t *testing.T) {
@@ -121,36 +120,36 @@ func TestBinarySnowballAcceptWeirdColor(t *testing.T) {
121120
beta := 2
122121
terminationConditions := newSingleTerminationCondition(alphaConfidence, beta)
123122

124-
sf := newBinarySnowflake(alphaPreference, terminationConditions, red)
123+
sb := newBinarySnowball(alphaPreference, terminationConditions, red)
125124

126-
require.Equal(red, sf.Preference())
127-
require.False(sf.Finalized())
125+
require.Equal(red, sb.Preference())
126+
require.False(sb.Finalized())
128127

129-
sf.RecordPoll(alphaConfidence, red)
130-
sf.RecordUnsuccessfulPoll()
128+
sb.RecordPoll(alphaConfidence, red)
129+
sb.RecordUnsuccessfulPoll()
131130

132-
require.Equal(red, sf.Preference())
133-
require.False(sf.Finalized())
131+
require.Equal(red, sb.Preference())
132+
require.False(sb.Finalized())
134133

135-
sf.RecordPoll(alphaConfidence, red)
134+
sb.RecordPoll(alphaConfidence, red)
136135

137-
sf.RecordUnsuccessfulPoll()
136+
sb.RecordUnsuccessfulPoll()
138137

139-
require.Equal(red, sf.Preference())
140-
require.False(sf.Finalized())
138+
require.Equal(red, sb.Preference())
139+
require.False(sb.Finalized())
141140

142-
sf.RecordPoll(alphaConfidence, blue)
141+
sb.RecordPoll(alphaConfidence, blue)
143142

144-
require.Equal(blue, sf.Preference())
145-
require.False(sf.Finalized())
143+
require.Equal(red, sb.Preference())
144+
require.False(sb.Finalized())
146145

147-
sf.RecordPoll(alphaConfidence, blue)
146+
sb.RecordPoll(alphaConfidence, blue)
148147

149-
require.Equal(blue, sf.Preference())
150-
require.True(sf.Finalized())
148+
require.Equal(blue, sb.Preference())
149+
require.True(sb.Finalized())
151150

152-
expected := "SF(Confidence = [2], Finalized = true, SL(Preference = 0))"
153-
require.Equal(expected, sf.String())
151+
expected := "SB(Preference = 1, PreferenceStrength[0] = 2, PreferenceStrength[1] = 2, SF(Confidence = [2], Finalized = true, SL(Preference = 0)))"
152+
require.Equal(expected, sb.String())
154153
}
155154

156155
func TestBinarySnowballLockColor(t *testing.T) {
Lines changed: 133 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,133 @@
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+
12+
func TestNnarySnowball(t *testing.T) {
13+
require := require.New(t)
14+
15+
alphaPreference, alphaConfidence := 1, 2
16+
beta := 2
17+
terminationConditions := newSingleTerminationCondition(alphaConfidence, beta)
18+
19+
sb := newNnarySnowball(alphaPreference, terminationConditions, Red)
20+
sb.Add(Blue)
21+
sb.Add(Green)
22+
23+
require.Equal(Red, sb.Preference())
24+
require.False(sb.Finalized())
25+
26+
sb.RecordPoll(alphaConfidence, Blue)
27+
require.Equal(Blue, sb.Preference())
28+
require.False(sb.Finalized())
29+
30+
sb.RecordPoll(alphaConfidence, Red)
31+
require.Equal(Blue, sb.Preference())
32+
require.False(sb.Finalized())
33+
34+
sb.RecordPoll(alphaPreference, Red)
35+
require.Equal(Red, sb.Preference())
36+
require.False(sb.Finalized())
37+
38+
sb.RecordPoll(alphaConfidence, Red)
39+
require.Equal(Red, sb.Preference())
40+
require.False(sb.Finalized())
41+
42+
sb.RecordPoll(alphaPreference, Blue)
43+
require.Equal(Red, sb.Preference())
44+
require.False(sb.Finalized())
45+
46+
sb.RecordPoll(alphaConfidence, Blue)
47+
require.Equal(Red, sb.Preference())
48+
require.False(sb.Finalized())
49+
50+
sb.RecordPoll(alphaConfidence, Blue)
51+
require.Equal(Blue, sb.Preference())
52+
require.True(sb.Finalized())
53+
}
54+
55+
func TestVirtuousNnarySnowball(t *testing.T) {
56+
require := require.New(t)
57+
58+
alphaPreference, alphaConfidence := 1, 2
59+
beta := 1
60+
terminationConditions := newSingleTerminationCondition(alphaConfidence, beta)
61+
62+
sb := newNnarySnowball(alphaPreference, terminationConditions, Red)
63+
64+
require.Equal(Red, sb.Preference())
65+
require.False(sb.Finalized())
66+
67+
sb.RecordPoll(alphaConfidence, Red)
68+
require.Equal(Red, sb.Preference())
69+
require.True(sb.Finalized())
70+
}
71+
72+
func TestNarySnowballRecordUnsuccessfulPoll(t *testing.T) {
73+
require := require.New(t)
74+
75+
alphaPreference, alphaConfidence := 1, 2
76+
beta := 2
77+
terminationConditions := newSingleTerminationCondition(alphaConfidence, beta)
78+
79+
sb := newNnarySnowball(alphaPreference, terminationConditions, Red)
80+
sb.Add(Blue)
81+
82+
require.Equal(Red, sb.Preference())
83+
require.False(sb.Finalized())
84+
85+
sb.RecordPoll(alphaConfidence, Blue)
86+
require.Equal(Blue, sb.Preference())
87+
require.False(sb.Finalized())
88+
89+
sb.RecordUnsuccessfulPoll()
90+
91+
sb.RecordPoll(alphaConfidence, Blue)
92+
93+
require.Equal(Blue, sb.Preference())
94+
require.False(sb.Finalized())
95+
96+
sb.RecordPoll(alphaConfidence, Blue)
97+
98+
require.Equal(Blue, sb.Preference())
99+
require.True(sb.Finalized())
100+
101+
expected := "SB(Preference = TtF4d2QWbk5vzQGTEPrN48x6vwgAoAmKQ9cbp79inpQmcRKES, PreferenceStrength = 3, SF(Confidence = [2], Finalized = true, SL(Preference = TtF4d2QWbk5vzQGTEPrN48x6vwgAoAmKQ9cbp79inpQmcRKES)))"
102+
require.Equal(expected, sb.String())
103+
104+
for i := 0; i < 4; i++ {
105+
sb.RecordPoll(alphaConfidence, Red)
106+
107+
require.Equal(Blue, sb.Preference())
108+
require.True(sb.Finalized())
109+
}
110+
}
111+
112+
func TestNarySnowballDifferentSnowflakeColor(t *testing.T) {
113+
require := require.New(t)
114+
115+
alphaPreference, alphaConfidence := 1, 2
116+
beta := 2
117+
terminationConditions := newSingleTerminationCondition(alphaConfidence, beta)
118+
119+
sb := newNnarySnowball(alphaPreference, terminationConditions, Red)
120+
sb.Add(Blue)
121+
122+
require.Equal(Red, sb.Preference())
123+
require.False(sb.Finalized())
124+
125+
sb.RecordPoll(alphaConfidence, Blue)
126+
127+
require.Equal(Blue, sb.nnarySnowflake.Preference())
128+
129+
sb.RecordPoll(alphaConfidence, Red)
130+
131+
require.Equal(Blue, sb.Preference())
132+
require.Equal(Red, sb.nnarySnowflake.Preference())
133+
}

0 commit comments

Comments
 (0)