forked from cerc-io/ipld-eth-server
293dd2e848
* Add vendor dir so builds dont require dep * Pin specific version go-eth version
189 lines
3.7 KiB
Go
189 lines
3.7 KiB
Go
package set
|
|
|
|
import (
|
|
"reflect"
|
|
"testing"
|
|
)
|
|
|
|
func Test_Union(t *testing.T) {
|
|
s := New("1", "2", "3")
|
|
r := New("3", "4", "5")
|
|
x := NewNonTS("5", "6", "7")
|
|
|
|
u := Union(s, r, x)
|
|
if settype := reflect.TypeOf(u).String(); settype != "*set.Set" {
|
|
t.Error("Union should derive its set type from the first passed set, got", settype)
|
|
}
|
|
if u.Size() != 7 {
|
|
t.Error("Union: the merged set doesn't have all items in it.")
|
|
}
|
|
|
|
if !u.Has("1", "2", "3", "4", "5", "6", "7") {
|
|
t.Error("Union: merged items are not availabile in the set.")
|
|
}
|
|
|
|
z := Union(x, r)
|
|
if z.Size() != 5 {
|
|
t.Error("Union: Union of 2 sets doesn't have the proper number of items.")
|
|
}
|
|
if settype := reflect.TypeOf(z).String(); settype != "*set.SetNonTS" {
|
|
t.Error("Union should derive its set type from the first passed set, got", settype)
|
|
}
|
|
|
|
}
|
|
|
|
func Test_Difference(t *testing.T) {
|
|
s := New("1", "2", "3")
|
|
r := New("3", "4", "5")
|
|
x := New("5", "6", "7")
|
|
u := Difference(s, r, x)
|
|
|
|
if u.Size() != 2 {
|
|
t.Error("Difference: the set doesn't have all items in it.")
|
|
}
|
|
|
|
if !u.Has("1", "2") {
|
|
t.Error("Difference: items are not availabile in the set.")
|
|
}
|
|
|
|
y := Difference(r, r)
|
|
if y.Size() != 0 {
|
|
t.Error("Difference: size should be zero")
|
|
}
|
|
|
|
}
|
|
|
|
func Test_Intersection(t *testing.T) {
|
|
s1 := New("1", "3", "4", "5")
|
|
s2 := New("2", "3", "5", "6")
|
|
s3 := New("4", "5", "6", "7")
|
|
u := Intersection(s1, s2, s3)
|
|
|
|
if u.Size() != 1 {
|
|
t.Error("Intersection: the set doesn't have all items in it.")
|
|
}
|
|
|
|
if !u.Has("5") {
|
|
t.Error("Intersection: items after intersection are not availabile in the set.")
|
|
}
|
|
}
|
|
|
|
func Test_SymmetricDifference(t *testing.T) {
|
|
s := New("1", "2", "3")
|
|
r := New("3", "4", "5")
|
|
u := SymmetricDifference(s, r)
|
|
|
|
if u.Size() != 4 {
|
|
t.Error("SymmetricDifference: the set doesn't have all items in it.")
|
|
}
|
|
|
|
if !u.Has("1", "2", "4", "5") {
|
|
t.Error("SymmetricDifference: items are not availabile in the set.")
|
|
}
|
|
}
|
|
|
|
func Test_StringSlice(t *testing.T) {
|
|
s := New("san francisco", "istanbul", 3.14, 1321, "ankara")
|
|
u := StringSlice(s)
|
|
|
|
if len(u) != 3 {
|
|
t.Error("StringSlice: slice should only have three items")
|
|
}
|
|
|
|
for _, item := range u {
|
|
r := reflect.TypeOf(item)
|
|
if r.Kind().String() != "string" {
|
|
t.Error("StringSlice: slice item should be a string")
|
|
}
|
|
}
|
|
}
|
|
|
|
func Test_IntSlice(t *testing.T) {
|
|
s := New("san francisco", "istanbul", 3.14, 1321, "ankara", 8876)
|
|
u := IntSlice(s)
|
|
|
|
if len(u) != 2 {
|
|
t.Error("IntSlice: slice should only have two items")
|
|
}
|
|
|
|
for _, item := range u {
|
|
r := reflect.TypeOf(item)
|
|
if r.Kind().String() != "int" {
|
|
t.Error("Intslice: slice item should be a int")
|
|
}
|
|
}
|
|
}
|
|
|
|
func BenchmarkSetEquality(b *testing.B) {
|
|
s := New()
|
|
u := New()
|
|
|
|
for i := 0; i < b.N; i++ {
|
|
s.Add(i)
|
|
u.Add(i)
|
|
}
|
|
|
|
b.ResetTimer()
|
|
|
|
for i := 0; i < b.N; i++ {
|
|
s.IsEqual(u)
|
|
}
|
|
}
|
|
|
|
func BenchmarkSubset(b *testing.B) {
|
|
s := New()
|
|
u := New()
|
|
|
|
for i := 0; i < b.N; i++ {
|
|
s.Add(i)
|
|
u.Add(i)
|
|
}
|
|
|
|
b.ResetTimer()
|
|
|
|
for i := 0; i < b.N; i++ {
|
|
s.IsSubset(u)
|
|
}
|
|
}
|
|
|
|
func benchmarkIntersection(b *testing.B, numberOfItems int) {
|
|
s1 := New()
|
|
s2 := New()
|
|
|
|
for i := 0; i < numberOfItems/2; i++ {
|
|
s1.Add(i)
|
|
}
|
|
for i := 0; i < numberOfItems; i++ {
|
|
s2.Add(i)
|
|
}
|
|
|
|
b.ResetTimer()
|
|
for i := 0; i < b.N; i++ {
|
|
Intersection(s1, s2)
|
|
}
|
|
}
|
|
|
|
func BenchmarkIntersection10(b *testing.B) {
|
|
benchmarkIntersection(b, 10)
|
|
}
|
|
|
|
func BenchmarkIntersection100(b *testing.B) {
|
|
benchmarkIntersection(b, 100)
|
|
}
|
|
|
|
func BenchmarkIntersection1000(b *testing.B) {
|
|
benchmarkIntersection(b, 1000)
|
|
}
|
|
|
|
func BenchmarkIntersection10000(b *testing.B) {
|
|
benchmarkIntersection(b, 10000)
|
|
}
|
|
|
|
func BenchmarkIntersection100000(b *testing.B) {
|
|
benchmarkIntersection(b, 100000)
|
|
}
|
|
|
|
func BenchmarkIntersection1000000(b *testing.B) {
|
|
benchmarkIntersection(b, 1000000)
|
|
}
|