github.com/jonasi/terraform@v0.6.10-0.20160125170522-e865c342cc1f/dag/graph_test.go (about)

     1  package dag
     2  
     3  import (
     4  	"fmt"
     5  	"strings"
     6  	"testing"
     7  )
     8  
     9  func TestGraph_empty(t *testing.T) {
    10  	var g Graph
    11  	g.Add(1)
    12  	g.Add(2)
    13  	g.Add(3)
    14  
    15  	actual := strings.TrimSpace(g.String())
    16  	expected := strings.TrimSpace(testGraphEmptyStr)
    17  	if actual != expected {
    18  		t.Fatalf("bad: %s", actual)
    19  	}
    20  }
    21  
    22  func TestGraph_basic(t *testing.T) {
    23  	var g Graph
    24  	g.Add(1)
    25  	g.Add(2)
    26  	g.Add(3)
    27  	g.Connect(BasicEdge(1, 3))
    28  
    29  	actual := strings.TrimSpace(g.String())
    30  	expected := strings.TrimSpace(testGraphBasicStr)
    31  	if actual != expected {
    32  		t.Fatalf("bad: %s", actual)
    33  	}
    34  }
    35  
    36  func TestGraph_remove(t *testing.T) {
    37  	var g Graph
    38  	g.Add(1)
    39  	g.Add(2)
    40  	g.Add(3)
    41  	g.Connect(BasicEdge(1, 3))
    42  	g.Remove(3)
    43  
    44  	actual := strings.TrimSpace(g.String())
    45  	expected := strings.TrimSpace(testGraphRemoveStr)
    46  	if actual != expected {
    47  		t.Fatalf("bad: %s", actual)
    48  	}
    49  }
    50  
    51  func TestGraph_replace(t *testing.T) {
    52  	var g Graph
    53  	g.Add(1)
    54  	g.Add(2)
    55  	g.Add(3)
    56  	g.Connect(BasicEdge(1, 2))
    57  	g.Connect(BasicEdge(2, 3))
    58  	g.Replace(2, 42)
    59  
    60  	actual := strings.TrimSpace(g.String())
    61  	expected := strings.TrimSpace(testGraphReplaceStr)
    62  	if actual != expected {
    63  		t.Fatalf("bad: %s", actual)
    64  	}
    65  }
    66  
    67  func TestGraph_replaceSelf(t *testing.T) {
    68  	var g Graph
    69  	g.Add(1)
    70  	g.Add(2)
    71  	g.Add(3)
    72  	g.Connect(BasicEdge(1, 2))
    73  	g.Connect(BasicEdge(2, 3))
    74  	g.Replace(2, 2)
    75  
    76  	actual := strings.TrimSpace(g.String())
    77  	expected := strings.TrimSpace(testGraphReplaceSelfStr)
    78  	if actual != expected {
    79  		t.Fatalf("bad: %s", actual)
    80  	}
    81  }
    82  
    83  // This tests that connecting edges works based on custom Hashcode
    84  // implementations for uniqueness.
    85  func TestGraph_hashcode(t *testing.T) {
    86  	var g Graph
    87  	g.Add(&hashVertex{code: 1})
    88  	g.Add(&hashVertex{code: 2})
    89  	g.Add(&hashVertex{code: 3})
    90  	g.Connect(BasicEdge(
    91  		&hashVertex{code: 1},
    92  		&hashVertex{code: 3}))
    93  
    94  	actual := strings.TrimSpace(g.String())
    95  	expected := strings.TrimSpace(testGraphBasicStr)
    96  	if actual != expected {
    97  		t.Fatalf("bad: %s", actual)
    98  	}
    99  }
   100  
   101  func TestGraphHasVertex(t *testing.T) {
   102  	var g Graph
   103  	g.Add(1)
   104  
   105  	if !g.HasVertex(1) {
   106  		t.Fatal("should have 1")
   107  	}
   108  	if g.HasVertex(2) {
   109  		t.Fatal("should not have 2")
   110  	}
   111  }
   112  
   113  func TestGraphHasEdge(t *testing.T) {
   114  	var g Graph
   115  	g.Add(1)
   116  	g.Add(2)
   117  	g.Connect(BasicEdge(1, 2))
   118  
   119  	if !g.HasEdge(BasicEdge(1, 2)) {
   120  		t.Fatal("should have 1,2")
   121  	}
   122  	if g.HasVertex(BasicEdge(2, 3)) {
   123  		t.Fatal("should not have 2,3")
   124  	}
   125  }
   126  
   127  type hashVertex struct {
   128  	code interface{}
   129  }
   130  
   131  func (v *hashVertex) Hashcode() interface{} {
   132  	return v.code
   133  }
   134  
   135  func (v *hashVertex) Name() string {
   136  	return fmt.Sprintf("%#v", v.code)
   137  }
   138  
   139  const testGraphBasicStr = `
   140  1
   141    3
   142  2
   143  3
   144  `
   145  
   146  const testGraphEmptyStr = `
   147  1
   148  2
   149  3
   150  `
   151  
   152  const testGraphRemoveStr = `
   153  1
   154  2
   155  `
   156  
   157  const testGraphReplaceStr = `
   158  1
   159    42
   160  3
   161  42
   162    3
   163  `
   164  
   165  const testGraphReplaceSelfStr = `
   166  1
   167    2
   168  2
   169    3
   170  3
   171  `