Added more edge case testing

This commit is contained in:
StephenButtolph 2020-04-01 01:08:47 -04:00
parent 683f1b75cd
commit 469c2d4cfa
3 changed files with 97 additions and 1 deletions

View File

@ -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")

View File

@ -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
}

View File

@ -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(),