Skip to content

Commit cfa35a4

Browse files
authored
Add tests, fix removeEdge bug in MatrixGraphs (#5968)
1 parent a8b8420 commit cfa35a4

File tree

3 files changed

+155
-14
lines changed

3 files changed

+155
-14
lines changed

DIRECTORY.md

+1
Original file line numberDiff line numberDiff line change
@@ -851,6 +851,7 @@
851851
* [KahnsAlgorithmTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/datastructures/graphs/KahnsAlgorithmTest.java)
852852
* [KosarajuTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/datastructures/graphs/KosarajuTest.java)
853853
* [KruskalTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/datastructures/graphs/KruskalTest.java)
854+
* [MatrixGraphsTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/datastructures/graphs/MatrixGraphsTest.java)
854855
* [TarjansAlgorithmTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/datastructures/graphs/TarjansAlgorithmTest.java)
855856
* [WelshPowellTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/datastructures/graphs/WelshPowellTest.java)
856857
* hashmap

src/main/java/com/thealgorithms/datastructures/graphs/MatrixGraphs.java

+14-14
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ public int numberOfVertices() {
102102
/**
103103
* Updates the number of edges in the graph
104104
*
105-
* @param newNumberOfEdges
105+
* @param newNumberOfEdges the new number of edges
106106
*
107107
*/
108108
private void setNumberOfEdges(int newNumberOfEdges) {
@@ -202,7 +202,7 @@ public boolean addEdge(int from, int to) {
202202
* exists and is removed
203203
*/
204204
public boolean removeEdge(int from, int to) {
205-
if (!this.vertexDoesExist(from) || !this.vertexDoesExist(to)) {
205+
if (this.vertexDoesExist(from) && this.vertexDoesExist(to)) {
206206
if (this.adjacencyOfEdgeDoesExist(from, to)) {
207207
this.adjacency()[from][to] = AdjacencyMatrixGraph.EDGE_NONE;
208208
this.adjacency()[to][from] = AdjacencyMatrixGraph.EDGE_NONE;
@@ -223,14 +223,14 @@ public boolean removeEdge(int from, int to) {
223223
public List<Integer> depthFirstOrder(int startVertex) {
224224
// If the startVertex is invalid, return an empty list
225225
if (startVertex >= vertexCount || startVertex < 0) {
226-
return new ArrayList<Integer>();
226+
return new ArrayList<>();
227227
}
228228

229229
// Create an array to track the visited vertices
230230
boolean[] visited = new boolean[vertexCount];
231231

232232
// Create a list to keep track of the order of our traversal
233-
ArrayList<Integer> orderList = new ArrayList<Integer>();
233+
ArrayList<Integer> orderList = new ArrayList<>();
234234

235235
// Perform our DFS algorithm
236236
depthFirstOrder(startVertex, visited, orderList);
@@ -278,18 +278,18 @@ private void depthFirstOrder(int currentVertex, boolean[] visited, List<Integer>
278278
public List<Integer> breadthFirstOrder(int startVertex) {
279279
// If the specified startVertex is invalid, return an empty list
280280
if (startVertex >= vertexCount || startVertex < 0) {
281-
return new ArrayList<Integer>();
281+
return new ArrayList<>();
282282
}
283283

284284
// Create an array to keep track of the visited vertices
285285
boolean[] visited = new boolean[vertexCount];
286286

287287
// Create a list to keep track of the ordered vertices
288-
ArrayList<Integer> orderList = new ArrayList<Integer>();
288+
ArrayList<Integer> orderList = new ArrayList<>();
289289

290290
// Create a queue for our BFS algorithm and add the startVertex
291291
// to the queue
292-
Queue<Integer> queue = new LinkedList<Integer>();
292+
Queue<Integer> queue = new LinkedList<>();
293293
queue.add(startVertex);
294294

295295
// Continue until the queue is empty
@@ -327,19 +327,19 @@ public List<Integer> breadthFirstOrder(int startVertex) {
327327
* @return returns a string describing this graph
328328
*/
329329
public String toString() {
330-
String s = " ";
330+
StringBuilder s = new StringBuilder(" ");
331331
for (int i = 0; i < this.numberOfVertices(); i++) {
332-
s = s + i + " ";
332+
s.append(i).append(" ");
333333
}
334-
s = s + " \n";
334+
s.append(" \n");
335335

336336
for (int i = 0; i < this.numberOfVertices(); i++) {
337-
s = s + i + " : ";
337+
s.append(i).append(" : ");
338338
for (int j = 0; j < this.numberOfVertices(); j++) {
339-
s = s + this.adjMatrix[i][j] + " ";
339+
s.append(this.adjMatrix[i][j]).append(" ");
340340
}
341-
s = s + "\n";
341+
s.append("\n");
342342
}
343-
return s;
343+
return s.toString();
344344
}
345345
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,140 @@
1+
package com.thealgorithms.datastructures.graphs;
2+
3+
import static org.junit.jupiter.api.Assertions.assertEquals;
4+
import static org.junit.jupiter.api.Assertions.assertFalse;
5+
import static org.junit.jupiter.api.Assertions.assertTrue;
6+
7+
import java.util.Arrays;
8+
import java.util.List;
9+
import org.junit.jupiter.api.Test;
10+
11+
class MatrixGraphsTest {
12+
13+
@Test
14+
void testGraphConstruction() {
15+
AdjacencyMatrixGraph graph = new AdjacencyMatrixGraph(5);
16+
assertEquals(5, graph.numberOfVertices());
17+
assertEquals(0, graph.numberOfEdges());
18+
}
19+
20+
@Test
21+
void testAddEdge() {
22+
AdjacencyMatrixGraph graph = new AdjacencyMatrixGraph(5);
23+
assertTrue(graph.addEdge(0, 1));
24+
assertTrue(graph.edgeDoesExist(0, 1));
25+
assertTrue(graph.edgeDoesExist(1, 0));
26+
assertEquals(1, graph.numberOfEdges());
27+
28+
// Adding the same edge again should return false
29+
assertFalse(graph.addEdge(0, 1));
30+
assertFalse(graph.addEdge(5, 1));
31+
assertFalse(graph.addEdge(-1, 1));
32+
}
33+
34+
@Test
35+
void testRemoveEdge() {
36+
AdjacencyMatrixGraph graph = new AdjacencyMatrixGraph(5);
37+
graph.addEdge(0, 1);
38+
graph.addEdge(1, 2);
39+
40+
assertTrue(graph.removeEdge(0, 1));
41+
assertFalse(graph.edgeDoesExist(0, 1));
42+
assertFalse(graph.edgeDoesExist(1, 0));
43+
assertEquals(1, graph.numberOfEdges());
44+
45+
assertFalse(graph.removeEdge(0, 3));
46+
assertFalse(graph.removeEdge(5, 1));
47+
assertFalse(graph.removeEdge(-1, 1));
48+
}
49+
50+
@Test
51+
void testVertexDoesExist() {
52+
AdjacencyMatrixGraph graph = new AdjacencyMatrixGraph(5);
53+
assertTrue(graph.vertexDoesExist(0));
54+
assertTrue(graph.vertexDoesExist(4));
55+
assertFalse(graph.vertexDoesExist(5));
56+
assertFalse(graph.vertexDoesExist(-1));
57+
}
58+
59+
@Test
60+
void testDepthFirstOrder() {
61+
AdjacencyMatrixGraph graph = new AdjacencyMatrixGraph(5);
62+
graph.addEdge(0, 1);
63+
graph.addEdge(0, 2);
64+
graph.addEdge(1, 3);
65+
graph.addEdge(2, 4);
66+
67+
List<Integer> dfs = graph.depthFirstOrder(0);
68+
assertEquals(5, dfs.size());
69+
assertEquals(0, dfs.getFirst());
70+
71+
assertTrue(dfs.containsAll(Arrays.asList(0, 1, 2, 3, 4)));
72+
73+
List<Integer> emptyDfs = graph.depthFirstOrder(5);
74+
assertTrue(emptyDfs.isEmpty());
75+
}
76+
77+
@Test
78+
void testBreadthFirstOrder() {
79+
AdjacencyMatrixGraph graph = new AdjacencyMatrixGraph(5);
80+
graph.addEdge(0, 1);
81+
graph.addEdge(0, 2);
82+
graph.addEdge(1, 3);
83+
graph.addEdge(2, 4);
84+
85+
List<Integer> bfs = graph.breadthFirstOrder(0);
86+
assertEquals(5, bfs.size());
87+
assertEquals(0, bfs.getFirst());
88+
89+
assertTrue(bfs.containsAll(Arrays.asList(0, 1, 2, 3, 4)));
90+
91+
List<Integer> emptyBfs = graph.breadthFirstOrder(5);
92+
assertTrue(emptyBfs.isEmpty());
93+
}
94+
95+
@Test
96+
void testToString() {
97+
AdjacencyMatrixGraph graph = new AdjacencyMatrixGraph(3);
98+
graph.addEdge(0, 1);
99+
graph.addEdge(1, 2);
100+
101+
String expected = " 0 1 2 \n"
102+
+ "0 : 0 1 0 \n"
103+
+ "1 : 1 0 1 \n"
104+
+ "2 : 0 1 0 \n";
105+
106+
assertEquals(expected, graph.toString());
107+
}
108+
109+
@Test
110+
void testCyclicGraph() {
111+
AdjacencyMatrixGraph graph = new AdjacencyMatrixGraph(4);
112+
graph.addEdge(0, 1);
113+
graph.addEdge(1, 2);
114+
graph.addEdge(2, 3);
115+
graph.addEdge(3, 0);
116+
117+
List<Integer> dfs = graph.depthFirstOrder(0);
118+
List<Integer> bfs = graph.breadthFirstOrder(0);
119+
120+
assertEquals(4, dfs.size());
121+
assertEquals(4, bfs.size());
122+
assertTrue(dfs.containsAll(Arrays.asList(0, 1, 2, 3)));
123+
assertTrue(bfs.containsAll(Arrays.asList(0, 1, 2, 3)));
124+
}
125+
126+
@Test
127+
void testDisconnectedGraph() {
128+
AdjacencyMatrixGraph graph = new AdjacencyMatrixGraph(5);
129+
graph.addEdge(0, 1);
130+
graph.addEdge(2, 3);
131+
132+
List<Integer> dfs = graph.depthFirstOrder(0);
133+
List<Integer> bfs = graph.breadthFirstOrder(0);
134+
135+
assertEquals(2, dfs.size());
136+
assertEquals(2, bfs.size());
137+
assertTrue(dfs.containsAll(Arrays.asList(0, 1)));
138+
assertTrue(bfs.containsAll(Arrays.asList(0, 1)));
139+
}
140+
}

0 commit comments

Comments
 (0)