mirror of https://github.com/golang/go.git
47 lines
1.1 KiB
Go
47 lines
1.1 KiB
Go
// Copyright 2022 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 dag
|
|
|
|
import (
|
|
"reflect"
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
func TestTranspose(t *testing.T) {
|
|
g := mustParse(t, diamond)
|
|
g.Transpose()
|
|
wantEdges(t, g, "a->b a->c a->d b->d c->d")
|
|
}
|
|
|
|
func TestTopo(t *testing.T) {
|
|
g := mustParse(t, diamond)
|
|
got := g.Topo()
|
|
// "d" is the root, so it's first.
|
|
//
|
|
// "c" and "b" could be in either order, but Topo is
|
|
// deterministic in reverse node definition order.
|
|
//
|
|
// "a" is a leaf.
|
|
wantNodes := strings.Fields("d c b a")
|
|
if !reflect.DeepEqual(wantNodes, got) {
|
|
t.Fatalf("want topo sort %v, got %v", wantNodes, got)
|
|
}
|
|
}
|
|
|
|
func TestTransitiveReduction(t *testing.T) {
|
|
t.Run("diamond", func(t *testing.T) {
|
|
g := mustParse(t, diamond)
|
|
g.TransitiveReduction()
|
|
wantEdges(t, g, "b->a c->a d->b d->c")
|
|
})
|
|
t.Run("chain", func(t *testing.T) {
|
|
const chain = `NONE < a < b < c < d; a, d < e;`
|
|
g := mustParse(t, chain)
|
|
g.TransitiveReduction()
|
|
wantEdges(t, g, "e->d d->c c->b b->a")
|
|
})
|
|
}
|