gecko/ids/short_set_test.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)
}
}