mirror of https://github.com/poanetwork/gecko.git
Added more edge case testing
This commit is contained in:
parent
683f1b75cd
commit
469c2d4cfa
|
@ -55,11 +55,41 @@ func TestNnarySnowflake(t *testing.T) {
|
|||
}
|
||||
}
|
||||
|
||||
func TestVirtuousNnarySnowflake(t *testing.T) {
|
||||
betaVirtuous := 2
|
||||
betaRogue := 3
|
||||
|
||||
sb := nnarySnowflake{}
|
||||
sb.Initialize(betaVirtuous, betaRogue, Red)
|
||||
|
||||
if pref := sb.Preference(); !Red.Equals(pref) {
|
||||
t.Fatalf("Wrong preference. Expected %s got %s", Red, pref)
|
||||
} else if sb.Finalized() {
|
||||
t.Fatalf("Finalized too early")
|
||||
}
|
||||
|
||||
sb.RecordSuccessfulPoll(Red)
|
||||
|
||||
if pref := sb.Preference(); !Red.Equals(pref) {
|
||||
t.Fatalf("Wrong preference. Expected %s got %s", Red, pref)
|
||||
} else if sb.Finalized() {
|
||||
t.Fatalf("Finalized too early")
|
||||
}
|
||||
|
||||
sb.RecordSuccessfulPoll(Red)
|
||||
|
||||
if pref := sb.Preference(); !Red.Equals(pref) {
|
||||
t.Fatalf("Wrong preference. Expected %s got %s", Red, pref)
|
||||
} else if !sb.Finalized() {
|
||||
t.Fatalf("Should be finalized")
|
||||
}
|
||||
}
|
||||
|
||||
func TestRogueNnarySnowflake(t *testing.T) {
|
||||
betaVirtuous := 1
|
||||
betaRogue := 2
|
||||
|
||||
sb := nnarySnowball{}
|
||||
sb := nnarySnowflake{}
|
||||
sb.Initialize(betaVirtuous, betaRogue, Red)
|
||||
if sb.rogue {
|
||||
t.Fatalf("Shouldn't be rogue")
|
||||
|
|
|
@ -481,6 +481,10 @@ func (b *binaryNode) Add(id ids.ID) node {
|
|||
ids.EqualSubset(b.bit+1, child.DecidedPrefix(), b.preferences[bit], id) {
|
||||
b.children[bit] = child.Add(id)
|
||||
}
|
||||
// If child is nil, then the id has already been added to the tree, so
|
||||
// nothing should be done
|
||||
// If the decided prefix isn't matched, then a previous decision has made
|
||||
// the id that is being added to have already been rejected
|
||||
return b
|
||||
}
|
||||
|
||||
|
|
|
@ -178,6 +178,9 @@ func TestSnowballLastBinary(t *testing.T) {
|
|||
tree.Initialize(params, zero)
|
||||
tree.Add(one)
|
||||
|
||||
// Should do nothing
|
||||
tree.Add(one)
|
||||
|
||||
expected := "SB(NumSuccessfulPolls = 0, SF(Confidence = 0, Finalized = false)) Bits = [0, 255)\n" +
|
||||
" SB(Preference = 0, NumSuccessfulPolls[0] = 0, NumSuccessfulPolls[1] = 0, SF(Confidence = 0, Finalized = false, SL(Preference = 0))) Bit = 255"
|
||||
if str := tree.String(); expected != str {
|
||||
|
@ -207,6 +210,65 @@ func TestSnowballLastBinary(t *testing.T) {
|
|||
}
|
||||
}
|
||||
|
||||
func TestSnowballAddPreviouslyRejected(t *testing.T) {
|
||||
zero := ids.NewID([32]byte{0b00000000})
|
||||
one := ids.NewID([32]byte{0b00000001})
|
||||
two := ids.NewID([32]byte{0b00000010})
|
||||
|
||||
params := Parameters{
|
||||
Metrics: prometheus.NewRegistry(),
|
||||
K: 1, Alpha: 1, BetaVirtuous: 1, BetaRogue: 2,
|
||||
}
|
||||
tree := Tree{}
|
||||
tree.Initialize(params, zero)
|
||||
tree.Add(one)
|
||||
|
||||
{
|
||||
expected := "SB(Preference = 0, NumSuccessfulPolls[0] = 0, NumSuccessfulPolls[1] = 0, SF(Confidence = 0, Finalized = false, SL(Preference = 0))) Bit = 0\n"+
|
||||
" SB(NumSuccessfulPolls = 0, SF(Confidence = 0, Finalized = false)) Bits = [1, 256)\n"+
|
||||
" SB(NumSuccessfulPolls = 0, SF(Confidence = 0, Finalized = false)) Bits = [1, 256)"
|
||||
if str := tree.String(); expected != str {
|
||||
t.Fatalf("Wrong string. Expected:\n%s\ngot:\n%s", expected, str)
|
||||
} else if pref := tree.Preference(); !zero.Equals(pref) {
|
||||
t.Fatalf("Wrong preference. Expected %s got %s", zero, pref)
|
||||
} else if tree.Finalized() {
|
||||
t.Fatalf("Finalized too early")
|
||||
}
|
||||
}
|
||||
|
||||
zeroBag := ids.Bag{}
|
||||
zeroBag.Add(zero)
|
||||
tree.RecordPoll(zeroBag)
|
||||
|
||||
{
|
||||
expected := "SB(Preference = 0, NumSuccessfulPolls[0] = 1, NumSuccessfulPolls[1] = 0, SF(Confidence = 1, Finalized = false, SL(Preference = 0))) Bit = 0\n"+
|
||||
" SB(NumSuccessfulPolls = 1, SF(Confidence = 1, Finalized = true)) Bits = [1, 256)\n"+
|
||||
" SB(NumSuccessfulPolls = 0, SF(Confidence = 0, Finalized = false)) Bits = [1, 256)"
|
||||
if str := tree.String(); expected != str {
|
||||
t.Fatalf("Wrong string. Expected:\n%s\ngot:\n%s", expected, str)
|
||||
} else if pref := tree.Preference(); !zero.Equals(pref) {
|
||||
t.Fatalf("Wrong preference. Expected %s got %s", zero, pref)
|
||||
} else if tree.Finalized() {
|
||||
t.Fatalf("Finalized too early")
|
||||
}
|
||||
}
|
||||
|
||||
tree.Add(two)
|
||||
|
||||
{
|
||||
expected := "SB(Preference = 0, NumSuccessfulPolls[0] = 1, NumSuccessfulPolls[1] = 0, SF(Confidence = 1, Finalized = false, SL(Preference = 0))) Bit = 0\n"+
|
||||
" SB(NumSuccessfulPolls = 1, SF(Confidence = 1, Finalized = true)) Bits = [1, 256)\n"+
|
||||
" SB(NumSuccessfulPolls = 0, SF(Confidence = 0, Finalized = false)) Bits = [1, 256)"
|
||||
if str := tree.String(); expected != str {
|
||||
t.Fatalf("Wrong string. Expected:\n%s\ngot:\n%s", expected, str)
|
||||
} else if pref := tree.Preference(); !zero.Equals(pref) {
|
||||
t.Fatalf("Wrong preference. Expected %s got %s", zero, pref)
|
||||
} else if tree.Finalized() {
|
||||
t.Fatalf("Finalized too early")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestSnowballTrinary(t *testing.T) {
|
||||
params := Parameters{
|
||||
Metrics: prometheus.NewRegistry(),
|
||||
|
|
Loading…
Reference in New Issue