blob: 2f79ce297e7e2f6143602af8cd45ecaea823401e [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"
"testing"
)
func TestTranspose(t *testing.T) {
g := &stringGraph{
"a": {"b", "c"},
"b": {"c"},
"c": {"a"},
}
tg := Transpose(g)
if tg.NumNodes() != 3 {
t.Errorf("tg.NumNodes() = %d, want 3", tg.NumNodes())
}
nodes := slices.Sorted(tg.Nodes())
if want := []string{"a", "b", "c"}; !slices.Equal(nodes, want) {
t.Errorf("tg.Nodes() = %v, want %v", nodes, want)
}
wantEdges := map[string][]string{
"a": {"c"},
"b": {"a"},
"c": {"a", "b"},
}
for _, n := range []string{"a", "b", "c"} {
outs := slices.Sorted(tg.Out(n))
want := wantEdges[n]
if !slices.Equal(outs, want) {
t.Errorf("tg.Out(%q) = %v, want %v", n, outs, want)
}
}
// Double transpose should return the original graph.
ttg := Transpose(tg)
if ttg != g {
t.Errorf("Transpose(Transpose(g)) != g")
}
}