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) } }