blob: 1884159ee327a2357caad35fe4820b7ad959b1a2 [file]
// Copyright 2026 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package graph
import (
"slices"
"sort"
"testing"
)
func TestSCCs(t *testing.T) {
tests := []struct {
g stringGraph
want [][]string
}{
{
g: stringGraph{
"A": {"B"},
"B": {"C"},
"C": {"A"},
},
want: [][]string{{"A", "B", "C"}},
},
{
g: stringGraph{
"A": {"B"},
"B": {},
},
want: [][]string{{"A"}, {"B"}},
},
{
g: stringGraph{
"A": {"A"},
},
want: [][]string{{"A"}},
},
{
g: stringGraph{
"A": {"B"},
"B": {"A"},
"C": {"D"},
"D": {"C"},
},
want: [][]string{{"A", "B"}, {"C", "D"}},
},
}
for _, test := range tests {
got := SCCs(test.g)
// Normalize for comparison: sort components, sort within components
for _, c := range got {
sort.Strings(c)
}
slices.SortFunc(got, slices.Compare)
if !slices.EqualFunc(got, test.want, slices.Equal) {
t.Errorf("SCCs(%v) = %v, want %v", test.g, got, test.want)
}
}
}