(t *testing.T)
| 94 | } |
| 95 | |
| 96 | func TestGraph(t *testing.T) { |
| 97 | t.Parallel() |
| 98 | |
| 99 | testFuncs := map[string]func(t *testing.T) *unit.Graph[testGraphEdge, *testGraphVertex]{ |
| 100 | "ForwardAndReverseEdges": func(t *testing.T) *unit.Graph[testGraphEdge, *testGraphVertex] { |
| 101 | graph := &unit.Graph[testGraphEdge, *testGraphVertex]{} |
| 102 | unit1 := &testGraphVertex{Name: "unit1"} |
| 103 | unit2 := &testGraphVertex{Name: "unit2"} |
| 104 | unit3 := &testGraphVertex{Name: "unit3"} |
| 105 | err := graph.AddEdge(unit1, unit2, testEdgeCompleted) |
| 106 | require.NoError(t, err) |
| 107 | err = graph.AddEdge(unit1, unit3, testEdgeStarted) |
| 108 | require.NoError(t, err) |
| 109 | |
| 110 | // Check for forward edge |
| 111 | vertices := graph.GetForwardAdjacentVertices(unit1) |
| 112 | require.Len(t, vertices, 2) |
| 113 | // Unit 1 depends on the completion of Unit2 |
| 114 | require.Contains(t, vertices, testEdge{ |
| 115 | From: unit1, |
| 116 | To: unit2, |
| 117 | Edge: testEdgeCompleted, |
| 118 | }) |
| 119 | // Unit 1 depends on the start of Unit3 |
| 120 | require.Contains(t, vertices, testEdge{ |
| 121 | From: unit1, |
| 122 | To: unit3, |
| 123 | Edge: testEdgeStarted, |
| 124 | }) |
| 125 | |
| 126 | // Check for reverse edges |
| 127 | unit2ReverseEdges := graph.GetReverseAdjacentVertices(unit2) |
| 128 | require.Len(t, unit2ReverseEdges, 1) |
| 129 | // Unit 2 must be completed before Unit 1 can start |
| 130 | require.Contains(t, unit2ReverseEdges, testEdge{ |
| 131 | From: unit1, |
| 132 | To: unit2, |
| 133 | Edge: testEdgeCompleted, |
| 134 | }) |
| 135 | |
| 136 | unit3ReverseEdges := graph.GetReverseAdjacentVertices(unit3) |
| 137 | require.Len(t, unit3ReverseEdges, 1) |
| 138 | // Unit 3 must be started before Unit 1 can complete |
| 139 | require.Contains(t, unit3ReverseEdges, testEdge{ |
| 140 | From: unit1, |
| 141 | To: unit3, |
| 142 | Edge: testEdgeStarted, |
| 143 | }) |
| 144 | |
| 145 | return graph |
| 146 | }, |
| 147 | "SelfReference": func(t *testing.T) *testGraph { |
| 148 | graph := &testGraph{} |
| 149 | unit1 := &testGraphVertex{Name: "unit1"} |
| 150 | err := graph.AddEdge(unit1, unit1, testEdgeCompleted) |
| 151 | require.ErrorIs(t, err, unit.ErrCycleDetected) |
| 152 | |
| 153 | return graph |
nothing calls this directly
no test coverage detected