go-common/vendor/github.com/vjeantet/grok/graph_test.go
2019-04-22 18:49:16 +08:00

92 lines
2.0 KiB
Go

package grok
import "testing"
func TestReverseList(t *testing.T) {
var array = []string{"A", "B", "C", "D"}
var expectedArray = []string{"D", "C", "B", "A"}
arrayReversed := reverseList(array)
if !sliceEquals(arrayReversed, expectedArray) {
t.Fatalf("reversedList is %+v, expected : %+v", arrayReversed, expectedArray)
}
}
func TestSortGraph(t *testing.T) {
var g = graph{}
g["7"] = []string{"11", "8"}
g["5"] = []string{"11"}
g["3"] = []string{"8", "10"}
g["11"] = []string{"2", "9", "10"}
g["8"] = []string{"9", "10"}
g["2"] = []string{}
g["9"] = []string{}
g["10"] = []string{}
validOrders := [][]string{
{"3", "5", "7", "8", "11", "10", "9", "2"},
{"3", "5", "7", "8", "11", "2", "10", "9"},
{"3", "5", "7", "8", "11", "9", "2", "10"},
{"7", "3", "8", "5", "11", "10", "9", "2"},
{"3", "5", "7", "11", "2", "8", "10", "9"},
{"5", "7", "11", "2", "3", "8", "10", "9"},
}
order, cycle := sortGraph(g)
if cycle != nil {
t.Fatal("cycle detected while not expected")
}
for _, expectedOrder := range validOrders {
if sliceEquals(order, expectedOrder) {
return
}
}
t.Fatalf("sorted graph is %+v, expected a order like: %+v", order, validOrders[0])
}
func TestSortGraphWithCycle(t *testing.T) {
var g = graph{}
g["7"] = []string{"11", "8"}
g["5"] = []string{"11"}
g["3"] = []string{"8", "10"}
g["11"] = []string{"2", "9", "10"}
g["8"] = []string{"9", "10"}
g["2"] = []string{}
g["9"] = []string{"3"}
g["10"] = []string{}
validCycles := [][]string{
{"3", "9", "8"},
{"8", "3", "9"},
{"9", "8", "3"},
}
_, cycle := sortGraph(g)
if cycle == nil {
t.Fatal("cycle not detected while sorting graph")
}
for _, expectedCycle := range validCycles {
if sliceEquals(cycle, expectedCycle) {
return
}
}
t.Fatalf("cycle have %+v, expected %+v", cycle, validCycles[0])
}
func sliceEquals(a, b []string) bool {
if len(a) != len(b) {
return false
}
for i := range a {
if a[i] != b[i] {
return false
}
}
return true
}