public void CanAddAVerticesToAdjacencyList() { MyGraph <string> graph = new MyGraph <string>(); graph.AddNode("Hello"); graph.AddNode("World"); Assert.Equal(2, graph.Size()); }
public void ProperSizeIsReturned() { MyGraph <int> graph = new MyGraph <int>(); Node <int> nodeA = graph.AddNode(5); Node <int> nodeB = graph.AddNode(10); Node <int> nodeC = graph.AddNode(1); Node <int> nodeD = graph.AddNode(99); Assert.Equal(4, graph.Size()); }
public void CanGetAllVerticesFromAdjacencyList() { MyGraph <string> graph = new MyGraph <string>(); graph.AddNode("Hello"); graph.AddNode("World"); graph.AddNode("Foo"); graph.AddNode("Bar"); List <Vertex <string> > actual = graph.GettAllVertices(); Assert.Equal(4, actual.Count); }
public void CanAddDirectedEdge() { MyGraph <string> graph = new MyGraph <string>(); Vertex <string> v1 = graph.AddNode("Hello"); Vertex <string> v2 = graph.AddNode("World"); graph.AddDirectedEdge(v1, v2, 50); string actual = graph.Print(); string expected = "Vertices: Hello and World, Weight: 50 --> null"; Assert.Equal(expected, actual); }
public void CanAddEdgeToGraph() { MyGraph <int> graph = new MyGraph <int>(); Node <int> nodeA = graph.AddNode(5); Node <int> nodeB = graph.AddNode(10); Edge <int> expectedEdge = new Edge <int>(nodeB, 7); graph.AddDirectedEdge(nodeA, nodeB, 7); List <Edge <int> > edges = graph.GetNeighbors(nodeA); Assert.Equal(expectedEdge.Node.Value, edges[0].Node.Value); Assert.Equal(expectedEdge.Weight, edges[0].Weight); }
public void GivenAKey_WhenGraphAlreadyHaveAnNodeWithSameKey_ShouldNotAddIt() { // Arrange var graph = new MyGraph <string>(); graph.AddNode("one"); // Act graph.AddNode("one"); // Assert graph.GetAll().Should().HaveCount(1); }
public void WillReturnNullIfRootIsNotInGraph() { MyGraph <int> graph = new MyGraph <int>(); Node <int> nodeA = graph.AddNode(5); Node <int> nodeB = graph.AddNode(10); Node <int> nodeC = graph.AddNode(1); Node <int> nodeD = graph.AddNode(7); graph.AddDirectedEdge(nodeA, nodeB, 1); graph.AddDirectedEdge(nodeA, nodeC, 3); Assert.Null(DepthFirstPreOrder(graph, nodeD)); }
public void CollectionOfAllNodesCanBeRetrieve() { MyGraph <int> graph = new MyGraph <int>(); Node <int> nodeA = graph.AddNode(5); Node <int> nodeB = graph.AddNode(10); Node <int> nodeC = graph.AddNode(1); Node <int> nodeD = graph.AddNode(99); List <Node <int> > expectedNodes = new List <Node <int> > { nodeA, nodeB, nodeC, nodeD }; List <Node <int> > actualNodes = graph.GetNodes(); Assert.Equal(expectedNodes, actualNodes); }
public void WillReturnFalsIfPathFromAtoDDoesNotExist() { MyGraph <int> graph = new MyGraph <int>(); Node <int> nodeA = graph.AddNode(5); Node <int> nodeB = graph.AddNode(10); Node <int> nodeC = graph.AddNode(1); Node <int> nodeD = graph.AddNode(7); graph.AddDirectedEdge(nodeA, nodeB, 1); graph.AddDirectedEdge(nodeC, nodeB, 645); graph.AddDirectedEdge(nodeC, nodeD, 2); Assert.False(graph.PathBetween(nodeA, nodeD)); }
public void GivenTwoKeys_WhenGraphHaveThisNodesAndTheyDoNotHaveRelationship_ShouldConnectThisTwoNodes() { // Arrange var graph = new MyGraph <string>(); graph.AddNode("one"); graph.AddNode("two"); // Act graph.AddEdge("one", "two"); // Assert var values = graph.GetAll(); values.GetValue("one").Should().ContainSingle("two"); }
public void CanAddAVertexToAdjacencyList() { MyGraph <string> graph = new MyGraph <string>(); Vertex <string> actual = graph.AddNode("Hello"); Assert.True(graph.AdjacencyList.ContainsKey(actual)); }
public void WillReturnTrueIfPathFromAtoDExists() { MyGraph <int> graph = new MyGraph <int>(); Node <int> nodeA = graph.AddNode(5); Node <int> nodeB = graph.AddNode(10); Node <int> nodeC = graph.AddNode(1); Node <int> nodeD = graph.AddNode(7); graph.AddDirectedEdge(nodeA, nodeB, 1); graph.AddDirectedEdge(nodeA, nodeC, 3); graph.AddDirectedEdge(nodeA, nodeD, 10); graph.AddDirectedEdge(nodeC, nodeB, 645); graph.AddDirectedEdge(nodeC, nodeD, 2); Assert.True(graph.PathBetween(nodeA, nodeD)); }
public void GivenTwoKeys_WhenGraphHaveTheseNodesAndTheyHaveRelationship_ShouldRemoveTheRelationship() { // Arrange var graph = new MyGraph <string>(); graph.AddNode("node1"); graph.AddNode("node2"); graph.AddEdge("node1", "node2"); // Act graph.RemoveEdge("node1", "node2"); // Assert foreach (var item in graph.GetAll()) { item.Value.Should().BeEmpty(); } }
public void GivenMoreThanOneKey_WhenGraphIsEmpty_ShouldAddThem() { // Arrange var graph = new MyGraph <string>(); // Act graph.AddNode("one"); graph.AddNode("two"); graph.AddNode("three"); // Assert var values = graph.GetAll(); values.Should().HaveCount(3); values.ContainsKey("one").Should().BeTrue(); values.ContainsKey("two").Should().BeTrue(); values.ContainsKey("three").Should().BeTrue(); }
public void CanAddNodeToTheGraph() { MyGraph <int> graph = new MyGraph <int>(); Node <int> expectedNode = new Node <int>(5); Node <int> actualNode = graph.AddNode(5); Assert.Equal(expectedNode.Value, actualNode.Value); }
public void GivenAGraph_WhenNodesHaveCycle_ShouldReturnTrue() { // Arrange var graph = new MyGraph <string>(); graph.AddNode("A"); graph.AddNode("B"); graph.AddNode("C"); graph.AddEdge("A", "B"); graph.AddEdge("B", "C"); graph.AddEdge("C", "A"); // Act var hasCycle = graph.HasCycle(); // Assert hasCycle.Should().BeTrue(); }
public void GivenAGraphWithNode_WhenTheyHaveDependencyFromEachOther_ShouldTopologicalSortComThoseDependencies() { // Arrange var graph = new MyGraph <string>(); graph.AddNode("P"); graph.AddNode("A"); graph.AddNode("B"); graph.AddNode("X"); graph.AddEdge("X", "B"); graph.AddEdge("X", "A"); graph.AddEdge("A", "P"); graph.AddEdge("B", "P"); // Act var sort = graph.TopologicalSort(); // Assert sort.Should().BeEquivalentTo("X", "B", "A", "P"); }
public void WillReturnListOfPreOrderNodes() { MyGraph <int> graph = new MyGraph <int>(); Node <int> nodeA = graph.AddNode(5); Node <int> nodeB = graph.AddNode(10); Node <int> nodeC = graph.AddNode(1); Node <int> nodeD = graph.AddNode(7); graph.AddDirectedEdge(nodeA, nodeB, 1); graph.AddDirectedEdge(nodeA, nodeC, 3); graph.AddDirectedEdge(nodeB, nodeD, 2); List <Node <int> > expectedList = new List <Node <int> > { nodeA, nodeB, nodeD, nodeC }; List <Node <int> > actualList = DepthFirstPreOrder(graph, nodeA); Assert.Equal(expectedList, actualList); }
public void GivenAKey_WhenGraphHaveThisKey_ShouldRemoveIt() { // Arrange var graph = new MyGraph <string>(); graph.AddNode("one"); // Act graph.RemoveNode("one"); // Assert graph.GetAll().Should().BeEmpty(); }
public void CanBreadthFirstTraverseGraph() { MyGraph <int> graph = new MyGraph <int>(); Node <int> nodeA = graph.AddNode(5); Node <int> nodeB = graph.AddNode(10); Node <int> nodeC = graph.AddNode(1); Node <int> nodeD = graph.AddNode(7); graph.AddDirectedEdge(nodeA, nodeB, 1); graph.AddDirectedEdge(nodeA, nodeC, 3); graph.AddDirectedEdge(nodeC, nodeD, 2); List <Node <int> > expectedList = new List <Node <int> >() { nodeA, nodeB, nodeC, nodeD }; List <Node <int> > actualList = graph.BreadthFist(nodeA); Assert.Equal(expectedList, actualList); }
public void CanGetAllEdgesConnectedToAVertex() { MyGraph <string> graph = new MyGraph <string>(); Vertex <string> v1 = graph.AddNode("Wa"); Vertex <string> v2 = graph.AddNode("GA"); Vertex <string> v3 = graph.AddNode("CA"); Vertex <string> v4 = graph.AddNode("MI"); graph.AddDirectedEdge(v1, v2, 50); graph.AddDirectedEdge(v1, v4, 100); List <int> actual = new List <int>(); List <int> expected = new List <int>() { 50, 100 }; foreach (var item in graph.GetNeighbors(v1)) { actual.Add(item.Weight); } Assert.Equal(expected, actual); }
public void WillReturnSingleNodeGraph() { MyGraph <int> graph = new MyGraph <int>(); Node <int> nodeA = graph.AddNode(5); List <Node <int> > expectedList = new List <Node <int> >() { nodeA }; List <Node <int> > actualList = graph.BreadthFist(nodeA); Assert.Equal(expectedList, actualList); }
public void GivenANewKey_WhenGraphIsEmpty_ThenAddIt() { //Given var graph = new MyGraph <string>(); //When graph.AddNode("one"); //Then var values = graph.GetAll(); values.Should().HaveCount(1); values.ContainsKey("one").Should().BeTrue(); }
private void BuildTheForest(int[,] grid, MyGraph <Coordinates> graph) { for (int i = 0; i < grid.GetLength(0); i++) { for (int j = 0; j < grid.GetLength(1); j++) { if (grid[i, j] == 1) { var tempCoordinates = new Coordinates(i, j); if (!graph.Contains(tempCoordinates)) { graph.AddNode(tempCoordinates); } if (GetValidValue(grid, i + 1, j) == 1) { var otherCoordinates = new Coordinates(i + 1, j); if (!graph.Contains(otherCoordinates)) { graph.AddNode(otherCoordinates); } graph.AddUndirectedEdge(graph.Nodes.FindByData(tempCoordinates), graph.Nodes.FindByData(otherCoordinates), 0); } if (GetValidValue(grid, i, j + 1) == 1) { var otherCoordinates = new Coordinates(i, j + 1); if (!graph.Contains(otherCoordinates)) { graph.AddNode(otherCoordinates); } graph.AddUndirectedEdge(graph.Nodes.FindByData(tempCoordinates), graph.Nodes.FindByData(otherCoordinates), 0); } } } } }
public void CanRetrieveListOfEdges() { MyGraph <int> graph = new MyGraph <int>(); Node <int> nodeA = graph.AddNode(5); Node <int> nodeB = graph.AddNode(10); Node <int> nodeC = graph.AddNode(1); Edge <int> edgeA = new Edge <int>(nodeB, 2); Edge <int> edgeB = new Edge <int>(nodeC, 5); List <Edge <int> > expectedEdges = new List <Edge <int> > { edgeA, edgeB }; graph.AddDirectedEdge(nodeA, nodeB, 2); graph.AddDirectedEdge(nodeA, nodeC, 5); List <Edge <int> > actualEdges = graph.GetNeighbors(nodeA); Assert.Equal(expectedEdges[0].Node.Value, actualEdges[0].Node.Value); Assert.Equal(expectedEdges[0].Weight, actualEdges[0].Weight); Assert.Equal(expectedEdges[1].Node.Value, actualEdges[1].Node.Value); Assert.Equal(expectedEdges[1].Weight, actualEdges[1].Weight); }
public void GivenAKey_WhenGraphDoesntHaveIt_ShouldDoNothing() { // Arrange var graph = new MyGraph <string>(); graph.AddNode("one"); // Act graph.RemoveNode("two"); // Assert var values = graph.GetAll(); values.Should().HaveCount(1); values.ContainsKey("one").Should().BeTrue(); }
public void GraphWithOnlyOneNodeAndOneEdgeCanBeRetrieved() { MyGraph <int> graph = new MyGraph <int>(); Node <int> nodeA = graph.AddNode(5); List <Node <int> > expectedNodes = new List <Node <int> >() { nodeA }; graph.AddDirectedEdge(nodeA, nodeA, 5); List <Node <int> > actualNodes = graph.GetNodes(); Assert.Equal(expectedNodes, actualNodes); }
private void pictureBox1_MouseClick(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) { if (AddNodeRadioButton.Checked) { if (checkBox1.Checked) { counter++; Val = int.Parse(ValueTB.Text) + counter; } else { Val = int.Parse(ValueTB.Text); } Graph.AddNode(e.X, e.Y, Val); } else if (MoveNodeRadioButton.Checked) { Graph.MoveNode(e.X, e.Y); } else if (AddEdgeRadioButton.Checked) { Graph.CreateEdge(e.X, e.Y, int.Parse(ValueTB.Text)); } else if (radioButtonDeleteNode.Checked) { Graph.DeleteNode(e.X, e.Y); } else if (radioButtonDeleteEdge.Checked) { Graph.DeleteEdge(e.X, e.Y); } Bitmap btm = new Bitmap(pictureBox1.Width, pictureBox1.Height); g = Graphics.FromImage(btm); Graph.DrawGraph(g); pictureBox1.Image = btm; } }
private static void CreateGraph(ref MyGraph<string> myGraph) { //Adds nodes to our graph Node<String> n1 = myGraph.AddNode("OREGON"); Node<String> n2 = myGraph.AddNode("CALIFORNIA"); Node<String> n3 = myGraph.AddNode("IDAHO"); Node<String> n4 = myGraph.AddNode("UTAH"); Node<String> n5 = myGraph.AddNode("NEW MEXICO"); Node<String> n6 = myGraph.AddNode("KANSAS"); Node<String> n7 = myGraph.AddNode("SOUTH DAKOTA"); Node<String> n8 = myGraph.AddNode("NORTH DAKOTA"); Node<String> n9 = myGraph.AddNode("IOWA"); Node<String> n10 = myGraph.AddNode("TENNESSEE"); Node<String> n11 = myGraph.AddNode("NEW YORK"); Node<String> n12 = myGraph.AddNode("FLORIDA"); Node<String> n13 = myGraph.AddNode("TEXAS"); //Creates edges between the graphs nodes myGraph.AddEdge("OREGON", "CALIFORNIA"); myGraph.AddEdge("CALIFORNIA", "UTAH"); myGraph.AddEdge("UTAH", "IDAHO"); myGraph.AddEdge("UTAH", "NEW MEXICO"); myGraph.AddEdge("NEW MEXICO", "KANSAS"); myGraph.AddEdge("NEW MEXICO", "TEXAS"); myGraph.AddEdge("TEXAS", "TENNESSEE"); myGraph.AddEdge("TEXAS", "FLORIDA"); myGraph.AddEdge("TEXAS", "KANSAS"); myGraph.AddEdge("KANSAS", "SOUTH DAKOTA"); myGraph.AddEdge("SOUTH DAKOTA", "NORTH DAKOTA"); myGraph.AddEdge("NORTH DAKOTA", "IOWA"); myGraph.AddEdge("IOWA", "TENNESSEE"); myGraph.AddEdge("TENNESSEE", "FLORIDA"); myGraph.AddEdge("TENNESSEE", "NEW YORK"); }