mirror of https://github.com/poanetwork/gecko.git
202 lines
6.7 KiB
Go
202 lines
6.7 KiB
Go
// (c) 2019-2020, Ava Labs, Inc. All rights reserved.
|
|
// See the file LICENSE for licensing terms.
|
|
|
|
package ids
|
|
|
|
import (
|
|
"testing"
|
|
)
|
|
|
|
func TestBagAdd(t *testing.T) {
|
|
id0 := Empty
|
|
id1 := NewID([32]byte{1})
|
|
|
|
bag := Bag{}
|
|
|
|
if count := bag.Count(id0); count != 0 {
|
|
t.Fatalf("Bag.Count returned %d expected %d", count, 0)
|
|
} else if count := bag.Count(id1); count != 0 {
|
|
t.Fatalf("Bag.Count returned %d expected %d", count, 0)
|
|
} else if size := bag.Len(); size != 0 {
|
|
t.Fatalf("Bag.Len returned %d expected %d", count, 0)
|
|
} else if list := bag.List(); list != nil {
|
|
t.Fatalf("Bag.List returned %v expected %v", list, nil)
|
|
} else if mode, freq := bag.Mode(); !mode.IsZero() {
|
|
t.Fatalf("Bag.Mode[0] returned %s expected %s", mode, ID{})
|
|
} else if freq != 0 {
|
|
t.Fatalf("Bag.Mode[1] returned %d expected %d", freq, 0)
|
|
} else if threshold := bag.Threshold(); threshold.Len() != 0 {
|
|
t.Fatalf("Bag.Threshold returned %s expected %s", threshold, Set{})
|
|
}
|
|
|
|
bag.Add(id0)
|
|
|
|
if count := bag.Count(id0); count != 1 {
|
|
t.Fatalf("Bag.Count returned %d expected %d", count, 1)
|
|
} else if count := bag.Count(id1); count != 0 {
|
|
t.Fatalf("Bag.Count returned %d expected %d", count, 0)
|
|
} else if size := bag.Len(); size != 1 {
|
|
t.Fatalf("Bag.Len returned %d expected %d", count, 1)
|
|
} else if list := bag.List(); len(list) != 1 {
|
|
t.Fatalf("Bag.List returned %d expected %d", len(list), 1)
|
|
} else if mode, freq := bag.Mode(); !mode.Equals(id0) {
|
|
t.Fatalf("Bag.Mode[0] returned %s expected %s", mode, id0)
|
|
} else if freq != 1 {
|
|
t.Fatalf("Bag.Mode[1] returned %d expected %d", freq, 1)
|
|
} else if threshold := bag.Threshold(); threshold.Len() != 1 {
|
|
t.Fatalf("Bag.Threshold returned %d expected %d", len(threshold), 1)
|
|
}
|
|
|
|
bag.Add(id0)
|
|
|
|
if count := bag.Count(id0); count != 2 {
|
|
t.Fatalf("Bag.Count returned %d expected %d", count, 2)
|
|
} else if count := bag.Count(id1); count != 0 {
|
|
t.Fatalf("Bag.Count returned %d expected %d", count, 0)
|
|
} else if size := bag.Len(); size != 2 {
|
|
t.Fatalf("Bag.Len returned %d expected %d", count, 2)
|
|
} else if list := bag.List(); len(list) != 1 {
|
|
t.Fatalf("Bag.List returned %d expected %d", len(list), 1)
|
|
} else if mode, freq := bag.Mode(); !mode.Equals(id0) {
|
|
t.Fatalf("Bag.Mode[0] returned %s expected %s", mode, id0)
|
|
} else if freq != 2 {
|
|
t.Fatalf("Bag.Mode[1] returned %d expected %d", freq, 2)
|
|
} else if threshold := bag.Threshold(); threshold.Len() != 1 {
|
|
t.Fatalf("Bag.Threshold returned %d expected %d", len(threshold), 1)
|
|
}
|
|
|
|
bag.AddCount(id1, 3)
|
|
|
|
if count := bag.Count(id0); count != 2 {
|
|
t.Fatalf("Bag.Count returned %d expected %d", count, 2)
|
|
} else if count := bag.Count(id1); count != 3 {
|
|
t.Fatalf("Bag.Count returned %d expected %d", count, 3)
|
|
} else if size := bag.Len(); size != 5 {
|
|
t.Fatalf("Bag.Len returned %d expected %d", count, 5)
|
|
} else if list := bag.List(); len(list) != 2 {
|
|
t.Fatalf("Bag.List returned %d expected %d", len(list), 2)
|
|
} else if mode, freq := bag.Mode(); !mode.Equals(id1) {
|
|
t.Fatalf("Bag.Mode[0] returned %s expected %s", mode, id1)
|
|
} else if freq != 3 {
|
|
t.Fatalf("Bag.Mode[1] returned %d expected %d", freq, 3)
|
|
} else if threshold := bag.Threshold(); threshold.Len() != 2 {
|
|
t.Fatalf("Bag.Threshold returned %d expected %d", len(threshold), 2)
|
|
}
|
|
}
|
|
|
|
func TestBagSetThreshold(t *testing.T) {
|
|
id0 := Empty
|
|
id1 := NewID([32]byte{1})
|
|
|
|
bag := Bag{}
|
|
|
|
bag.AddCount(id0, 2)
|
|
bag.AddCount(id1, 3)
|
|
|
|
bag.SetThreshold(0)
|
|
|
|
if count := bag.Count(id0); count != 2 {
|
|
t.Fatalf("Bag.Count returned %d expected %d", count, 2)
|
|
} else if count := bag.Count(id1); count != 3 {
|
|
t.Fatalf("Bag.Count returned %d expected %d", count, 3)
|
|
} else if size := bag.Len(); size != 5 {
|
|
t.Fatalf("Bag.Len returned %d expected %d", count, 5)
|
|
} else if list := bag.List(); len(list) != 2 {
|
|
t.Fatalf("Bag.List returned %d expected %d", len(list), 2)
|
|
} else if mode, freq := bag.Mode(); !mode.Equals(id1) {
|
|
t.Fatalf("Bag.Mode[0] returned %s expected %s", mode, id1)
|
|
} else if freq != 3 {
|
|
t.Fatalf("Bag.Mode[1] returned %d expected %d", freq, 3)
|
|
} else if threshold := bag.Threshold(); threshold.Len() != 2 {
|
|
t.Fatalf("Bag.Threshold returned %d expected %d", len(threshold), 2)
|
|
}
|
|
|
|
bag.SetThreshold(3)
|
|
|
|
if count := bag.Count(id0); count != 2 {
|
|
t.Fatalf("Bag.Count returned %d expected %d", count, 2)
|
|
} else if count := bag.Count(id1); count != 3 {
|
|
t.Fatalf("Bag.Count returned %d expected %d", count, 3)
|
|
} else if size := bag.Len(); size != 5 {
|
|
t.Fatalf("Bag.Len returned %d expected %d", count, 5)
|
|
} else if list := bag.List(); len(list) != 2 {
|
|
t.Fatalf("Bag.List returned %d expected %d", len(list), 2)
|
|
} else if mode, freq := bag.Mode(); !mode.Equals(id1) {
|
|
t.Fatalf("Bag.Mode[0] returned %s expected %s", mode, id1)
|
|
} else if freq != 3 {
|
|
t.Fatalf("Bag.Mode[1] returned %d expected %d", freq, 3)
|
|
} else if threshold := bag.Threshold(); threshold.Len() != 1 {
|
|
t.Fatalf("Bag.Threshold returned %d expected %d", len(threshold), 1)
|
|
} else if !threshold.Contains(id1) {
|
|
t.Fatalf("Bag.Threshold doesn't contain %s", id1)
|
|
}
|
|
}
|
|
|
|
func TestBagFilter(t *testing.T) {
|
|
id0 := Empty
|
|
id1 := NewID([32]byte{1})
|
|
id2 := NewID([32]byte{2})
|
|
|
|
bag := Bag{}
|
|
|
|
bag.AddCount(id0, 1)
|
|
bag.AddCount(id1, 3)
|
|
bag.AddCount(id2, 5)
|
|
|
|
even := bag.Filter(0, 1, id0)
|
|
|
|
if count := even.Count(id0); count != 1 {
|
|
t.Fatalf("Bag.Count returned %d expected %d", count, 1)
|
|
} else if count := even.Count(id1); count != 0 {
|
|
t.Fatalf("Bag.Count returned %d expected %d", count, 0)
|
|
} else if count := even.Count(id2); count != 5 {
|
|
t.Fatalf("Bag.Count returned %d expected %d", count, 5)
|
|
}
|
|
}
|
|
|
|
func TestBagSplit(t *testing.T) {
|
|
id0 := Empty
|
|
id1 := NewID([32]byte{1})
|
|
id2 := NewID([32]byte{2})
|
|
|
|
bag := Bag{}
|
|
|
|
bag.AddCount(id0, 1)
|
|
bag.AddCount(id1, 3)
|
|
bag.AddCount(id2, 5)
|
|
|
|
bags := bag.Split(0)
|
|
|
|
evens := bags[0]
|
|
odds := bags[1]
|
|
|
|
if count := evens.Count(id0); count != 1 {
|
|
t.Fatalf("Bag.Count returned %d expected %d", count, 1)
|
|
} else if count := evens.Count(id1); count != 0 {
|
|
t.Fatalf("Bag.Count returned %d expected %d", count, 0)
|
|
} else if count := evens.Count(id2); count != 5 {
|
|
t.Fatalf("Bag.Count returned %d expected %d", count, 5)
|
|
} else if count := odds.Count(id0); count != 0 {
|
|
t.Fatalf("Bag.Count returned %d expected %d", count, 0)
|
|
} else if count := odds.Count(id1); count != 3 {
|
|
t.Fatalf("Bag.Count returned %d expected %d", count, 3)
|
|
} else if count := odds.Count(id2); count != 0 {
|
|
t.Fatalf("Bag.Count returned %d expected %d", count, 0)
|
|
}
|
|
}
|
|
|
|
func TestBagString(t *testing.T) {
|
|
id0 := Empty
|
|
|
|
bag := Bag{}
|
|
|
|
bag.AddCount(id0, 1337)
|
|
|
|
expected := "Bag: (Size = 1337)\n" +
|
|
" ID[11111111111111111111111111111111LpoYY]: Count = 1337"
|
|
|
|
if bagString := bag.String(); bagString != expected {
|
|
t.Fatalf("Bag.String:\nReturned:\n%s\nExpected:\n%s", bagString, expected)
|
|
}
|
|
}
|