mirror of https://github.com/poanetwork/gecko.git
198 lines
4.8 KiB
Go
198 lines
4.8 KiB
Go
|
// (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")
|
||
|
}
|
||
|
|
||
|
expected := "SB(Preference = 1, NumSuccessfulPolls[0] = 0, NumSuccessfulPolls[1] = 3, SF = SF(Preference = 1, Confidence = 2, Finalized = true))"
|
||
|
if str := sb.String(); str != expected {
|
||
|
t.Fatalf("Wrong state. Expected:\n%s\nGot:\n%s", expected, str)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestBinarySnowballAcceptWeirdColor(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(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")
|
||
|
}
|
||
|
|
||
|
expected := "SB(Preference = 0, NumSuccessfulPolls[0] = 2, NumSuccessfulPolls[1] = 2, SF = SF(Preference = 1, Confidence = 2, Finalized = true))"
|
||
|
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")
|
||
|
}
|
||
|
|
||
|
expected := "SB(Preference = 1, NumSuccessfulPolls[0] = 1, NumSuccessfulPolls[1] = 2, SF = SF(Preference = 0, Confidence = 1, Finalized = true))"
|
||
|
if str := sb.String(); str != expected {
|
||
|
t.Fatalf("Wrong state. Expected:\n%s\nGot:\n%s", expected, str)
|
||
|
}
|
||
|
}
|