2020-03-10 12:20:34 -07:00
|
|
|
// (c) 2019-2020, Ava Labs, Inc. All rights reserved.
|
|
|
|
// See the file LICENSE for licensing terms.
|
|
|
|
|
|
|
|
package snowball
|
|
|
|
|
|
|
|
import (
|
|
|
|
"testing"
|
|
|
|
)
|
|
|
|
|
|
|
|
func TestBinarySnowball(t *testing.T) {
|
|
|
|
Red := 0
|
|
|
|
Blue := 1
|
|
|
|
|
|
|
|
beta := 2
|
|
|
|
|
|
|
|
sb := binarySnowball{}
|
|
|
|
sb.Initialize(beta, Red)
|
|
|
|
|
|
|
|
if pref := sb.Preference(); pref != Red {
|
|
|
|
t.Fatalf("Wrong preference. Expected %d got %d", Red, pref)
|
|
|
|
} else if sb.Finalized() {
|
|
|
|
t.Fatalf("Finalized too early")
|
|
|
|
}
|
|
|
|
|
|
|
|
sb.RecordSuccessfulPoll(Blue)
|
|
|
|
|
|
|
|
if pref := sb.Preference(); pref != Blue {
|
|
|
|
t.Fatalf("Wrong preference. Expected %d got %d", Blue, pref)
|
|
|
|
} else if sb.Finalized() {
|
|
|
|
t.Fatalf("Finalized too early")
|
|
|
|
}
|
|
|
|
|
|
|
|
sb.RecordSuccessfulPoll(Red)
|
|
|
|
|
|
|
|
if pref := sb.Preference(); pref != Blue {
|
|
|
|
t.Fatalf("Wrong preference. Expected %d got %d", Blue, pref)
|
|
|
|
} else if sb.Finalized() {
|
|
|
|
t.Fatalf("Finalized too early")
|
|
|
|
}
|
|
|
|
|
|
|
|
sb.RecordSuccessfulPoll(Blue)
|
|
|
|
|
|
|
|
if pref := sb.Preference(); pref != Blue {
|
|
|
|
t.Fatalf("Wrong preference. Expected %d got %d", Blue, pref)
|
|
|
|
} else if sb.Finalized() {
|
|
|
|
t.Fatalf("Finalized too early")
|
|
|
|
}
|
|
|
|
|
|
|
|
sb.RecordSuccessfulPoll(Blue)
|
|
|
|
|
|
|
|
if pref := sb.Preference(); pref != Blue {
|
|
|
|
t.Fatalf("Wrong preference. Expected %d got %d", Blue, pref)
|
|
|
|
} else if !sb.Finalized() {
|
|
|
|
t.Fatalf("Didn't finalized correctly")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestBinarySnowballRecordUnsuccessfulPoll(t *testing.T) {
|
|
|
|
Red := 0
|
|
|
|
Blue := 1
|
|
|
|
|
|
|
|
beta := 2
|
|
|
|
|
|
|
|
sb := binarySnowball{}
|
|
|
|
sb.Initialize(beta, Red)
|
|
|
|
|
|
|
|
if pref := sb.Preference(); pref != Red {
|
|
|
|
t.Fatalf("Wrong preference. Expected %d got %d", Red, pref)
|
|
|
|
} else if sb.Finalized() {
|
|
|
|
t.Fatalf("Finalized too early")
|
|
|
|
}
|
|
|
|
|
|
|
|
sb.RecordSuccessfulPoll(Blue)
|
|
|
|
|
|
|
|
if pref := sb.Preference(); pref != Blue {
|
|
|
|
t.Fatalf("Wrong preference. Expected %d got %d", Blue, pref)
|
|
|
|
} else if sb.Finalized() {
|
|
|
|
t.Fatalf("Finalized too early")
|
|
|
|
}
|
|
|
|
|
|
|
|
sb.RecordUnsuccessfulPoll()
|
|
|
|
|
|
|
|
sb.RecordSuccessfulPoll(Blue)
|
|
|
|
|
|
|
|
if pref := sb.Preference(); pref != Blue {
|
|
|
|
t.Fatalf("Wrong preference. Expected %d got %d", Blue, pref)
|
|
|
|
} else if sb.Finalized() {
|
|
|
|
t.Fatalf("Finalized too early")
|
|
|
|
}
|
|
|
|
|
|
|
|
sb.RecordSuccessfulPoll(Blue)
|
|
|
|
|
|
|
|
if pref := sb.Preference(); pref != Blue {
|
|
|
|
t.Fatalf("Wrong preference. Expected %d got %d", Blue, pref)
|
|
|
|
} else if !sb.Finalized() {
|
|
|
|
t.Fatalf("Finalized too late")
|
|
|
|
}
|
|
|
|
|
2020-03-20 23:26:22 -07:00
|
|
|
expected := "SB(Preference = 1, NumSuccessfulPolls[0] = 0, NumSuccessfulPolls[1] = 3, SF(Confidence = 2, Finalized = true, SL(Preference = 1)))"
|
2020-03-10 12:20:34 -07:00
|
|
|
if str := sb.String(); str != expected {
|
|
|
|
t.Fatalf("Wrong state. Expected:\n%s\nGot:\n%s", expected, str)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestBinarySnowballAcceptWeirdColor(t *testing.T) {
|
2020-03-31 20:52:30 -07:00
|
|
|
Blue := 0
|
|
|
|
Red := 1
|
2020-03-10 12:20:34 -07:00
|
|
|
|
|
|
|
beta := 2
|
|
|
|
|
|
|
|
sb := binarySnowball{}
|
|
|
|
sb.Initialize(beta, Red)
|
|
|
|
|
|
|
|
if pref := sb.Preference(); pref != Red {
|
|
|
|
t.Fatalf("Wrong preference. Expected %d got %d", Red, pref)
|
|
|
|
} else if sb.Finalized() {
|
|
|
|
t.Fatalf("Finalized too early")
|
|
|
|
}
|
|
|
|
|
|
|
|
sb.RecordSuccessfulPoll(Red)
|
|
|
|
sb.RecordUnsuccessfulPoll()
|
|
|
|
|
|
|
|
if pref := sb.Preference(); pref != Red {
|
|
|
|
t.Fatalf("Wrong preference. Expected %d got %d", Red, pref)
|
|
|
|
} else if sb.Finalized() {
|
|
|
|
t.Fatalf("Finalized too early")
|
|
|
|
}
|
|
|
|
|
|
|
|
sb.RecordSuccessfulPoll(Red)
|
|
|
|
sb.RecordUnsuccessfulPoll()
|
|
|
|
|
|
|
|
if pref := sb.Preference(); pref != Red {
|
|
|
|
t.Fatalf("Wrong preference. Expected %d got %d", Red, pref)
|
|
|
|
} else if sb.Finalized() {
|
|
|
|
t.Fatalf("Finalized too early")
|
|
|
|
}
|
|
|
|
|
|
|
|
sb.RecordSuccessfulPoll(Blue)
|
|
|
|
|
|
|
|
if pref := sb.Preference(); pref != Red {
|
|
|
|
t.Fatalf("Wrong preference. Expected %d got %d", Red, pref)
|
|
|
|
} else if sb.Finalized() {
|
|
|
|
t.Fatalf("Finalized too early")
|
|
|
|
}
|
|
|
|
|
|
|
|
sb.RecordSuccessfulPoll(Blue)
|
|
|
|
|
|
|
|
if pref := sb.Preference(); pref != Blue {
|
|
|
|
t.Fatalf("Wrong preference. Expected %d got %d", Blue, pref)
|
|
|
|
} else if !sb.Finalized() {
|
|
|
|
t.Fatalf("Finalized too late")
|
|
|
|
}
|
|
|
|
|
2020-03-31 20:56:18 -07:00
|
|
|
expected := "SB(Preference = 1, NumSuccessfulPolls[0] = 2, NumSuccessfulPolls[1] = 2, SF(Confidence = 2, Finalized = true, SL(Preference = 0)))"
|
2020-03-10 12:20:34 -07:00
|
|
|
if str := sb.String(); str != expected {
|
|
|
|
t.Fatalf("Wrong state. Expected:\n%s\nGot:\n%s", expected, str)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestBinarySnowballLockColor(t *testing.T) {
|
|
|
|
Red := 0
|
|
|
|
Blue := 1
|
|
|
|
|
|
|
|
beta := 1
|
|
|
|
|
|
|
|
sb := binarySnowball{}
|
|
|
|
sb.Initialize(beta, Red)
|
|
|
|
|
|
|
|
sb.RecordSuccessfulPoll(Red)
|
|
|
|
|
|
|
|
if pref := sb.Preference(); pref != Red {
|
|
|
|
t.Fatalf("Wrong preference. Expected %d got %d", Red, pref)
|
|
|
|
} else if !sb.Finalized() {
|
|
|
|
t.Fatalf("Finalized too late")
|
|
|
|
}
|
|
|
|
|
|
|
|
sb.RecordSuccessfulPoll(Blue)
|
|
|
|
|
|
|
|
if pref := sb.Preference(); pref != Red {
|
|
|
|
t.Fatalf("Wrong preference. Expected %d got %d", Red, pref)
|
|
|
|
} else if !sb.Finalized() {
|
|
|
|
t.Fatalf("Finalized too late")
|
|
|
|
}
|
|
|
|
|
|
|
|
sb.RecordSuccessfulPoll(Blue)
|
|
|
|
|
|
|
|
if pref := sb.Preference(); pref != Red {
|
|
|
|
t.Fatalf("Wrong preference. Expected %d got %d", Red, pref)
|
|
|
|
} else if !sb.Finalized() {
|
|
|
|
t.Fatalf("Finalized too late")
|
|
|
|
}
|
|
|
|
|
2020-03-20 23:26:22 -07:00
|
|
|
expected := "SB(Preference = 1, NumSuccessfulPolls[0] = 1, NumSuccessfulPolls[1] = 2, SF(Confidence = 1, Finalized = true, SL(Preference = 0)))"
|
2020-03-10 12:20:34 -07:00
|
|
|
if str := sb.String(); str != expected {
|
|
|
|
t.Fatalf("Wrong state. Expected:\n%s\nGot:\n%s", expected, str)
|
|
|
|
}
|
|
|
|
}
|