Files
util/dedupe_test.go
clawbot 7fb688772e add DedupeStrings for removing repeated values from a string slice
DedupeStrings returns a new slice holding each value once, in the order each
value first appeared, and leaves the input slice alone. Comes with a doc
comment and table-driven tests. (closes #1)

Model: opus-5
2026-09-05 03:23:28 +00:00

41 lines
1.1 KiB
Go

package util
import (
"reflect"
"testing"
)
func TestDedupeStrings(t *testing.T) {
tests := []struct {
name string
input []string
expected []string
}{
{"nil stays nil", nil, nil},
{"empty slice", []string{}, []string{}},
{"nothing repeated", []string{"a", "b", "c"}, []string{"a", "b", "c"}},
{"all one value", []string{"a", "a", "a"}, []string{"a"}},
{"repeats next to each other", []string{"a", "a", "b", "b"}, []string{"a", "b"}},
{"repeats far apart", []string{"a", "b", "a", "c", "b"}, []string{"a", "b", "c"}},
{"empty string is a value", []string{"", "a", ""}, []string{"", "a"}},
}
for _, test := range tests {
t.Run(test.name, func(t *testing.T) {
got := DedupeStrings(test.input)
if !reflect.DeepEqual(got, test.expected) {
t.Errorf("expected %#v got %#v", test.expected, got)
}
})
}
}
func TestDedupeStringsLeavesInputAlone(t *testing.T) {
input := []string{"b", "a", "b"}
DedupeStrings(input)
if !reflect.DeepEqual(input, []string{"b", "a", "b"}) {
t.Errorf("expected the input to be unchanged, got %#v", input)
}
}