mirror of https://github.com/poanetwork/gecko.git
240 lines
5.3 KiB
Go
240 lines
5.3 KiB
Go
// (c) 2019-2020, Ava Labs, Inc. All rights reserved.
|
|
// See the file LICENSE for licensing terms.
|
|
|
|
package ids
|
|
|
|
import (
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
func TestShortSetContains(t *testing.T) {
|
|
set := ShortSet{}
|
|
|
|
id0 := NewShortID([20]byte{0})
|
|
id1 := NewShortID([20]byte{1})
|
|
|
|
switch {
|
|
case set.Contains(id0):
|
|
t.Fatalf("Sets shouldn't contain %s", id0)
|
|
case set.Contains(id1):
|
|
t.Fatalf("Sets shouldn't contain %s", id1)
|
|
}
|
|
|
|
set.Add(id0)
|
|
|
|
switch {
|
|
case !set.Contains(id0):
|
|
t.Fatalf("Set should contain %s", id0)
|
|
case set.Contains(id1):
|
|
t.Fatalf("Set shouldn't contain %s", id1)
|
|
}
|
|
|
|
set.Add(id1)
|
|
|
|
switch {
|
|
case !set.Contains(id0):
|
|
t.Fatalf("Set should contain %s", id0)
|
|
case !set.Contains(id1):
|
|
t.Fatalf("Set should contain %s", id1)
|
|
}
|
|
|
|
set.Remove(id0)
|
|
|
|
switch {
|
|
case set.Contains(id0):
|
|
t.Fatalf("Sets shouldn't contain %s", id0)
|
|
case !set.Contains(id1):
|
|
t.Fatalf("Set should contain %s", id1)
|
|
}
|
|
|
|
set.Add(id0)
|
|
|
|
switch {
|
|
case !set.Contains(id0):
|
|
t.Fatalf("Set should contain %s", id0)
|
|
case !set.Contains(id1):
|
|
t.Fatalf("Set should contain %s", id1)
|
|
}
|
|
}
|
|
|
|
func TestShortSetUnion(t *testing.T) {
|
|
set := ShortSet{}
|
|
unionSet := ShortSet{}
|
|
|
|
id0 := NewShortID([20]byte{0})
|
|
id1 := NewShortID([20]byte{1})
|
|
|
|
unionSet.Add(id0)
|
|
set.Union(unionSet)
|
|
|
|
switch {
|
|
case !set.Contains(id0):
|
|
t.Fatalf("Set should contain %s", id0)
|
|
case set.Contains(id1):
|
|
t.Fatalf("Set shouldn't contain %s", id1)
|
|
}
|
|
|
|
unionSet.Add(id1)
|
|
set.Union(unionSet)
|
|
|
|
switch {
|
|
case !set.Contains(id0):
|
|
t.Fatalf("Set should contain %s", id0)
|
|
case !set.Contains(id1):
|
|
t.Fatalf("Set should contain %s", id1)
|
|
}
|
|
|
|
set.Remove(id0)
|
|
|
|
switch {
|
|
case set.Contains(id0):
|
|
t.Fatalf("Sets shouldn't contain %s", id0)
|
|
case !set.Contains(id1):
|
|
t.Fatalf("Set should contain %s", id1)
|
|
}
|
|
|
|
set.Clear()
|
|
set.Union(unionSet)
|
|
|
|
switch {
|
|
case !set.Contains(id0):
|
|
t.Fatalf("Set should contain %s", id0)
|
|
case !set.Contains(id1):
|
|
t.Fatalf("Set should contain %s", id1)
|
|
}
|
|
}
|
|
|
|
func TestShortSetEquals(t *testing.T) {
|
|
set := ShortSet{}
|
|
otherSet := ShortSet{}
|
|
if !set.Equals(otherSet) {
|
|
t.Fatal("Empty sets should be equal")
|
|
}
|
|
if !otherSet.Equals(set) {
|
|
t.Fatal("Empty sets should be equal")
|
|
}
|
|
|
|
set.Add(NewShortID([20]byte{1, 2, 3, 4, 5}))
|
|
if set.Equals(otherSet) {
|
|
t.Fatal("Sets should be unequal")
|
|
}
|
|
if otherSet.Equals(set) {
|
|
t.Fatal("Sets should be unequal")
|
|
}
|
|
|
|
otherSet.Add(NewShortID([20]byte{1, 2, 3, 4, 5}))
|
|
if !set.Equals(otherSet) {
|
|
t.Fatal("sets should be equal")
|
|
}
|
|
if !otherSet.Equals(set) {
|
|
t.Fatal("sets should be equal")
|
|
}
|
|
|
|
otherSet.Add(NewShortID([20]byte{6, 7, 8, 9, 10}))
|
|
if set.Equals(otherSet) {
|
|
t.Fatal("Sets should be unequal")
|
|
}
|
|
if otherSet.Equals(set) {
|
|
t.Fatal("Sets should be unequal")
|
|
}
|
|
|
|
set.Add(NewShortID([20]byte{6, 7, 8, 9, 10}))
|
|
if !set.Equals(otherSet) {
|
|
t.Fatal("sets should be equal")
|
|
}
|
|
if !otherSet.Equals(set) {
|
|
t.Fatal("sets should be equal")
|
|
}
|
|
|
|
otherSet.Add(NewShortID([20]byte{11, 12, 13, 14, 15}))
|
|
if set.Equals(otherSet) {
|
|
t.Fatal("Sets should be unequal")
|
|
}
|
|
if otherSet.Equals(set) {
|
|
t.Fatal("Sets should be unequal")
|
|
}
|
|
|
|
set.Add(NewShortID([20]byte{11, 12, 13, 14, 16}))
|
|
if set.Equals(otherSet) {
|
|
t.Fatal("Sets should be unequal")
|
|
}
|
|
if otherSet.Equals(set) {
|
|
t.Fatal("Sets should be unequal")
|
|
}
|
|
}
|
|
|
|
func TestShortSetList(t *testing.T) {
|
|
set := ShortSet{}
|
|
otherSet := ShortSet{}
|
|
|
|
id0 := NewShortID([20]byte{0})
|
|
id1 := NewShortID([20]byte{1})
|
|
|
|
set.Add(id0)
|
|
otherSet.Add(set.List()...)
|
|
|
|
if !set.Equals(otherSet) {
|
|
t.Fatalf("Sets should be equal but are:\n%s\n%s", set, otherSet)
|
|
}
|
|
|
|
set.Add(id1)
|
|
otherSet.Clear()
|
|
otherSet.Add(set.List()...)
|
|
|
|
if !set.Equals(otherSet) {
|
|
t.Fatalf("Sets should be equal but are:\n%s\n%s", set, otherSet)
|
|
}
|
|
}
|
|
|
|
func TestShortSetCappedList(t *testing.T) {
|
|
set := ShortSet{}
|
|
|
|
id := ShortEmpty
|
|
|
|
if list := set.CappedList(0); len(list) != 0 {
|
|
t.Fatalf("List should have been empty but was %v", list)
|
|
}
|
|
|
|
set.Add(id)
|
|
|
|
if list := set.CappedList(0); len(list) != 0 {
|
|
t.Fatalf("List should have been empty but was %v", list)
|
|
} else if list := set.CappedList(1); len(list) != 1 {
|
|
t.Fatalf("List should have had length %d but had %d", 1, len(list))
|
|
} else if returnedID := list[0]; !id.Equals(returnedID) {
|
|
t.Fatalf("List should have been %s but was %s", id, returnedID)
|
|
} else if list := set.CappedList(2); len(list) != 1 {
|
|
t.Fatalf("List should have had length %d but had %d", 1, len(list))
|
|
} else if returnedID := list[0]; !id.Equals(returnedID) {
|
|
t.Fatalf("List should have been %s but was %s", id, returnedID)
|
|
}
|
|
}
|
|
|
|
func TestShortSetString(t *testing.T) {
|
|
set := ShortSet{}
|
|
|
|
id0 := NewShortID([20]byte{0})
|
|
id1 := NewShortID([20]byte{1})
|
|
|
|
if str := set.String(); str != "{}" {
|
|
t.Fatalf("Set should have been %s but was %s", "{}", str)
|
|
}
|
|
|
|
set.Add(id0)
|
|
|
|
if str := set.String(); str != "{111111111111111111116DBWJs}" {
|
|
t.Fatalf("Set should have been %s but was %s", "{111111111111111111116DBWJs}", str)
|
|
}
|
|
|
|
set.Add(id1)
|
|
|
|
if str := set.String(); !strings.Contains(str, "111111111111111111116DBWJs") {
|
|
t.Fatalf("Set should have contained %s", "111111111111111111116DBWJs")
|
|
} else if !strings.Contains(str, "6HgC8KRBEhXYbF4riJyJFLSHt37UNuRt") {
|
|
t.Fatalf("Set should have contained %s", "6HgC8KRBEhXYbF4riJyJFLSHt37UNuRt")
|
|
} else if count := strings.Count(str, ","); count != 1 {
|
|
t.Fatalf("Should only have one %s in %s", ",", str)
|
|
}
|
|
}
|