set/set_test.go

92 lines
2.5 KiB
Go
Raw Normal View History

2025-05-06 22:58:18 -04:00
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)
}
}