github.com/JimmyHuang454/JLS-go@v0.0.0-20230831150107-90d536585ba0/internal/dag/alg_test.go (about)

     1  // Copyright 2022 The Go Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  package dag
     6  
     7  import (
     8  	"reflect"
     9  	"strings"
    10  	"testing"
    11  )
    12  
    13  func TestTranspose(t *testing.T) {
    14  	g := mustParse(t, diamond)
    15  	g.Transpose()
    16  	wantEdges(t, g, "a->b a->c a->d b->d c->d")
    17  }
    18  
    19  func TestTopo(t *testing.T) {
    20  	g := mustParse(t, diamond)
    21  	got := g.Topo()
    22  	// "d" is the root, so it's first.
    23  	//
    24  	// "c" and "b" could be in either order, but Topo is
    25  	// deterministic in reverse node definition order.
    26  	//
    27  	// "a" is a leaf.
    28  	wantNodes := strings.Fields("d c b a")
    29  	if !reflect.DeepEqual(wantNodes, got) {
    30  		t.Fatalf("want topo sort %v, got %v", wantNodes, got)
    31  	}
    32  }
    33  
    34  func TestTransitiveReduction(t *testing.T) {
    35  	t.Run("diamond", func(t *testing.T) {
    36  		g := mustParse(t, diamond)
    37  		g.TransitiveReduction()
    38  		wantEdges(t, g, "b->a c->a d->b d->c")
    39  	})
    40  	t.Run("chain", func(t *testing.T) {
    41  		const chain = `NONE < a < b < c < d; a, d < e;`
    42  		g := mustParse(t, chain)
    43  		g.TransitiveReduction()
    44  		wantEdges(t, g, "e->d d->c c->b b->a")
    45  	})
    46  }