92 lines
2.5 KiB
Go
92 lines
2.5 KiB
Go
|
package set
|
||
|
|
||
|
import (
|
||
|
"testing"
|
||
|
)
|
||
|
|
||
|
func TestSimpleSet(t *testing.T) {
|
||
|
words := []string{"a", "b", "c"}
|
||
|
set := New[string](false)
|
||
|
for _, word := range words {
|
||
|
if !set.Insert(word) {
|
||
|
t.Fatalf("error: expected true while inserting '%s'; got false\n", word)
|
||
|
}
|
||
|
}
|
||
|
if want, got := len(words), set.Len(); want != got {
|
||
|
t.Fatalf("error: wanted %d entries; got %d\n", want, got)
|
||
|
}
|
||
|
for _, word := range words {
|
||
|
if set.Insert(word) {
|
||
|
t.Fatalf("error: expected false during duplicate insert for '%s'; got true\n", word)
|
||
|
}
|
||
|
}
|
||
|
for _, word := range words {
|
||
|
if !set.Contains(word) {
|
||
|
t.Fatalf("error: didn't find word '%s' in set after second insert...\n", word)
|
||
|
}
|
||
|
}
|
||
|
for _, word := range words {
|
||
|
if !set.Remove(word) {
|
||
|
t.Fatalf("error removing word '%s'\n", word)
|
||
|
}
|
||
|
}
|
||
|
if want, got := 0, set.Len(); want != got {
|
||
|
t.Fatalf("error: wanted %d entries; got %d\n", want, got)
|
||
|
}
|
||
|
for _, word := range words {
|
||
|
if !set.Insert(word) {
|
||
|
t.Fatalf("error: expected true while inserting '%s'; got false\n", word)
|
||
|
}
|
||
|
}
|
||
|
if want, got := len(words), set.Len(); want != got {
|
||
|
t.Fatalf("error: wanted %d entries; got %d\n", want, got)
|
||
|
}
|
||
|
set.Clear()
|
||
|
if want, got := 0, set.Len(); want != got {
|
||
|
t.Fatalf("error: wanted %d entries; got %d\n", want, got)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestThreadsafeSet(t *testing.T) {
|
||
|
words := []string{"a", "b", "c"}
|
||
|
set := New[string](true)
|
||
|
for _, word := range words {
|
||
|
if !set.Insert(word) {
|
||
|
t.Fatalf("error: expected true while inserting '%s'; got false\n", word)
|
||
|
}
|
||
|
}
|
||
|
if want, got := len(words), set.Len(); want != got {
|
||
|
t.Fatalf("error: wanted %d entries; got %d\n", want, got)
|
||
|
}
|
||
|
for _, word := range words {
|
||
|
if set.Insert(word) {
|
||
|
t.Fatalf("error: expected false during duplicate insert for '%s'; got true\n", word)
|
||
|
}
|
||
|
}
|
||
|
for _, word := range words {
|
||
|
if !set.Contains(word) {
|
||
|
t.Fatalf("error: didn't find word '%s' in set after second insert...\n", word)
|
||
|
}
|
||
|
}
|
||
|
for _, word := range words {
|
||
|
if !set.Remove(word) {
|
||
|
t.Fatalf("error removing word '%s'\n", word)
|
||
|
}
|
||
|
}
|
||
|
if want, got := 0, set.Len(); want != got {
|
||
|
t.Fatalf("error: wanted %d entries; got %d\n", want, got)
|
||
|
}
|
||
|
for _, word := range words {
|
||
|
if !set.Insert(word) {
|
||
|
t.Fatalf("error: expected true while inserting '%s'; got false\n", word)
|
||
|
}
|
||
|
}
|
||
|
if want, got := len(words), set.Len(); want != got {
|
||
|
t.Fatalf("error: wanted %d entries; got %d\n", want, got)
|
||
|
}
|
||
|
set.Clear()
|
||
|
if want, got := 0, set.Len(); want != got {
|
||
|
t.Fatalf("error: wanted %d entries; got %d\n", want, got)
|
||
|
}
|
||
|
}
|