110 lines
1.8 KiB
Go
110 lines
1.8 KiB
Go
package schema
|
|
|
|
import (
|
|
"reflect"
|
|
"testing"
|
|
)
|
|
|
|
func TestSetAdd(t *testing.T) {
|
|
s := &Set{F: testSetInt}
|
|
s.Add(1)
|
|
s.Add(5)
|
|
s.Add(25)
|
|
|
|
expected := []interface{}{1, 5, 25}
|
|
actual := s.List()
|
|
if !reflect.DeepEqual(actual, expected) {
|
|
t.Fatalf("bad: %#v", actual)
|
|
}
|
|
}
|
|
|
|
func TestSetAdd_negative(t *testing.T) {
|
|
// Since we don't allow negative hashes, this should just hash to the
|
|
// same thing...
|
|
s := &Set{F: testSetInt}
|
|
s.Add(-1)
|
|
s.Add(1)
|
|
|
|
expected := []interface{}{-1}
|
|
actual := s.List()
|
|
if !reflect.DeepEqual(actual, expected) {
|
|
t.Fatalf("bad: %#v", actual)
|
|
}
|
|
}
|
|
|
|
func TestSetContains(t *testing.T) {
|
|
s := &Set{F: testSetInt}
|
|
s.Add(5)
|
|
|
|
if s.Contains(2) {
|
|
t.Fatal("should not contain")
|
|
}
|
|
if !s.Contains(5) {
|
|
t.Fatal("should contain")
|
|
}
|
|
}
|
|
|
|
func TestSetDifference(t *testing.T) {
|
|
s1 := &Set{F: testSetInt}
|
|
s2 := &Set{F: testSetInt}
|
|
|
|
s1.Add(1)
|
|
s1.Add(5)
|
|
|
|
s2.Add(5)
|
|
s2.Add(25)
|
|
|
|
difference := s1.Difference(s2)
|
|
difference.Add(2)
|
|
|
|
expected := []interface{}{1, 2}
|
|
actual := difference.List()
|
|
if !reflect.DeepEqual(actual, expected) {
|
|
t.Fatalf("bad: %#v", actual)
|
|
}
|
|
}
|
|
|
|
func TestSetIntersection(t *testing.T) {
|
|
s1 := &Set{F: testSetInt}
|
|
s2 := &Set{F: testSetInt}
|
|
|
|
s1.Add(1)
|
|
s1.Add(5)
|
|
|
|
s2.Add(5)
|
|
s2.Add(25)
|
|
|
|
intersection := s1.Intersection(s2)
|
|
intersection.Add(2)
|
|
|
|
expected := []interface{}{2, 5}
|
|
actual := intersection.List()
|
|
if !reflect.DeepEqual(actual, expected) {
|
|
t.Fatalf("bad: %#v", actual)
|
|
}
|
|
}
|
|
|
|
func TestSetUnion(t *testing.T) {
|
|
s1 := &Set{F: testSetInt}
|
|
s2 := &Set{F: testSetInt}
|
|
|
|
s1.Add(1)
|
|
s1.Add(5)
|
|
|
|
s2.Add(5)
|
|
s2.Add(25)
|
|
|
|
union := s1.Union(s2)
|
|
union.Add(2)
|
|
|
|
expected := []interface{}{1, 2, 5, 25}
|
|
actual := union.List()
|
|
if !reflect.DeepEqual(actual, expected) {
|
|
t.Fatalf("bad: %#v", actual)
|
|
}
|
|
}
|
|
|
|
func testSetInt(v interface{}) int {
|
|
return v.(int)
|
|
}
|