gecko/ids/unique_bag_test.go

107 lines
2.0 KiB
Go

// (c) 2019-2020, Ava Labs, Inc. All rights reserved.
// See the file LICENSE for licensing terms.
package ids
import (
"testing"
)
func TestUniqueBag(t *testing.T) {
var ub1 UniqueBag
ub1.init()
if ub1 == nil {
t.Fatalf("Unique Bag still nil after initialized")
} else if len(ub1.List()) != 0 {
t.Fatalf("Unique Bag should be empty")
}
id1 := Empty.Prefix(1)
id2 := Empty.Prefix(2)
ub2 := make(UniqueBag)
ub2.Add(1, id1, id2)
if !ub2.GetSet(id1).Contains(1) {
t.Fatalf("Set missing element")
} else if !ub2.GetSet(id2).Contains(1) {
t.Fatalf("Set missing element")
}
var bs1 BitSet
bs1.Add(2)
bs1.Add(4)
ub3 := make(UniqueBag)
ub3.UnionSet(id1, bs1)
bs1.Clear()
bs1 = ub3.GetSet(id1)
if bs1.Len() != 2 {
t.Fatalf("Incorrect length of set")
} else if !bs1.Contains(2) {
t.Fatalf("Set missing element")
} else if !bs1.Contains(4) {
t.Fatalf("Set missing element")
}
// Difference test
bs1.Clear()
ub4 := make(UniqueBag)
ub4.Add(1, id1)
ub4.Add(2, id1)
ub4.Add(5, id2)
ub4.Add(8, id2)
ub5 := make(UniqueBag)
ub5.Add(5, id2)
ub5.Add(5, id1)
ub4.Difference(&ub5)
if len(ub5.List()) != 2 {
t.Fatalf("Incorrect number of ids in Unique Bag")
}
ub4id1 := ub4.GetSet(id1)
if ub4id1.Len() != 2 {
t.Fatalf("Set of Unique Bag has incorrect length")
} else if !ub4id1.Contains(1) {
t.Fatalf("Set of Unique Bag missing element")
} else if !ub4id1.Contains(2) {
t.Fatalf("Set of Unique Bag missing element")
}
ub4id2 := ub4.GetSet(id2)
if ub4id2.Len() != 1 {
t.Fatalf("Set of Unique Bag has incorrect length")
} else if !ub4id2.Contains(8) {
t.Fatalf("Set of Unique Bag missing element")
}
// DifferenceSet test
ub6 := make(UniqueBag)
ub6.Add(1, id1)
ub6.Add(2, id1)
ub6.Add(7, id1)
diffBitSet := BitSet(0)
diffBitSet.Add(1)
diffBitSet.Add(7)
ub6.DifferenceSet(id1, diffBitSet)
ub6id1 := ub6.GetSet(id1)
if ub6id1.Len() != 1 {
t.Fatalf("Set of Unique Bag missing element")
} else if !ub6id1.Contains(2) {
t.Fatalf("Set of Unique Bag missing element")
}
}