github.com/hashicorp/packer@v1.14.3/internal/dag/tarjan_test.go (about)

     1  // Copyright (c) HashiCorp, Inc.
     2  // SPDX-License-Identifier: BUSL-1.1
     3  
     4  package dag
     5  
     6  import (
     7  	"sort"
     8  	"strings"
     9  	"testing"
    10  )
    11  
    12  func TestGraphStronglyConnected(t *testing.T) {
    13  	var g Graph
    14  	g.Add(1)
    15  	g.Add(2)
    16  	g.Connect(BasicEdge(1, 2))
    17  	g.Connect(BasicEdge(2, 1))
    18  
    19  	actual := strings.TrimSpace(testSCCStr(StronglyConnected(&g)))
    20  	expected := strings.TrimSpace(testGraphStronglyConnectedStr)
    21  	if actual != expected {
    22  		t.Fatalf("bad: %s", actual)
    23  	}
    24  }
    25  
    26  func TestGraphStronglyConnected_two(t *testing.T) {
    27  	var g Graph
    28  	g.Add(1)
    29  	g.Add(2)
    30  	g.Connect(BasicEdge(1, 2))
    31  	g.Connect(BasicEdge(2, 1))
    32  	g.Add(3)
    33  
    34  	actual := strings.TrimSpace(testSCCStr(StronglyConnected(&g)))
    35  	expected := strings.TrimSpace(testGraphStronglyConnectedTwoStr)
    36  	if actual != expected {
    37  		t.Fatalf("bad: %s", actual)
    38  	}
    39  }
    40  
    41  func TestGraphStronglyConnected_three(t *testing.T) {
    42  	var g Graph
    43  	g.Add(1)
    44  	g.Add(2)
    45  	g.Connect(BasicEdge(1, 2))
    46  	g.Connect(BasicEdge(2, 1))
    47  	g.Add(3)
    48  	g.Add(4)
    49  	g.Add(5)
    50  	g.Add(6)
    51  	g.Connect(BasicEdge(4, 5))
    52  	g.Connect(BasicEdge(5, 6))
    53  	g.Connect(BasicEdge(6, 4))
    54  
    55  	actual := strings.TrimSpace(testSCCStr(StronglyConnected(&g)))
    56  	expected := strings.TrimSpace(testGraphStronglyConnectedThreeStr)
    57  	if actual != expected {
    58  		t.Fatalf("bad: %s", actual)
    59  	}
    60  }
    61  
    62  func testSCCStr(list [][]Vertex) string {
    63  	var lines []string
    64  	for _, vs := range list {
    65  		result := make([]string, len(vs))
    66  		for i, v := range vs {
    67  			result[i] = VertexName(v)
    68  		}
    69  
    70  		sort.Strings(result)
    71  		lines = append(lines, strings.Join(result, ","))
    72  	}
    73  
    74  	sort.Strings(lines)
    75  	return strings.Join(lines, "\n")
    76  }
    77  
    78  const testGraphStronglyConnectedStr = `1,2`
    79  
    80  const testGraphStronglyConnectedTwoStr = `
    81  1,2
    82  3
    83  `
    84  
    85  const testGraphStronglyConnectedThreeStr = `
    86  1,2
    87  3
    88  4,5,6
    89  `