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