Skip to content
Snippets Groups Projects
alg_test.go 1.08 KiB
Newer Older
  • Learn to ignore specific revisions
  • // 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")
    	})
    }