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 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 DirectedGetAllNeighbors() { MyGraph <string> graph = new MyGraph <string>(); var a = graph.AddVertex("a"); var b = graph.AddVertex("b"); var c = graph.AddVertex("c"); var d = graph.AddVertex("d"); graph.AddDirectedEdge(d, a, 5); graph.AddDirectedEdge(a, b, 5); graph.AddDirectedEdge(a, c, 5); List <Tuple <Vertex <string>, int> > pointingToA = graph.GetNeighborsDirected(a); Assert.Equal(3, pointingToA.Count); }
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 DirectedGetNeighborsPointingFromC() { MyGraph <string> graph = new MyGraph <string>(); var a = graph.AddVertex("a"); var b = graph.AddVertex("b"); var c = graph.AddVertex("c"); var d = graph.AddVertex("d"); graph.AddDirectedEdge(a, b, 5); graph.AddDirectedEdge(a, c, 5); graph.AddDirectedEdge(a, d, 5); graph.AddDirectedEdge(c, a, 1); List <Tuple <Vertex <string>, int> > pointingToC = graph.OutDegree(c); Assert.Single(pointingToC); }
public void AddDirectedEdge() { MyGraph <string> graph = new MyGraph <string>(); Vertex <string> vert1 = new Vertex <string>("A"); Vertex <string> vert2 = new Vertex <string>("B"); graph.AdjacencyList.Add(vert1, new List <Edge <string> >()); graph.AdjacencyList.Add(vert2, new List <Edge <string> >()); graph.AddDirectedEdge(vert1, vert2, 1); Assert.Equal(graph.AdjacencyList[vert1][0].Vertex, vert2); }
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 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 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 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 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 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 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); }
static void Main(string[] args) { MyGraph <string> graph = new MyGraph <string>(); var a = graph.AddVertex("a"); var b = graph.AddVertex("b"); var c = graph.AddVertex("c"); var d = graph.AddVertex("d"); var e = graph.AddVertex("e"); var f = graph.AddVertex("f"); var g = graph.AddVertex("g"); graph.AddUndirectedEdge(a, b, 5); graph.AddUndirectedEdge(b, c, 5); graph.AddUndirectedEdge(c, d, 5); graph.AddUndirectedEdge(d, e, 5); graph.AddUndirectedEdge(e, f, 5); graph.AddUndirectedEdge(f, g, 5); graph.AddUndirectedEdge(g, a, 5); graph.AddDirectedEdge(a, c, 1); graph.Print(); //graph.GetNeighborsPointingTo(a); //graph.GetNeighborsPointingFrom(a); //both run by: graph.GetNeighborsDirected(a); MyGraph <string> graph1 = new MyGraph <string>(); var j = graph1.AddVertex("A"); var k = graph1.AddVertex("B"); var l = graph1.AddVertex("C"); var m = graph1.AddVertex("D"); var n = graph1.AddVertex("E"); var o = graph1.AddVertex("F"); graph1.AddUndirectedEdge(j, k, 5); graph1.AddUndirectedEdge(k, l, 5); graph1.AddUndirectedEdge(k, m, 5); graph1.AddUndirectedEdge(l, n, 5); graph1.AddUndirectedEdge(l, o, 5); graph1.AddUndirectedEdge(m, o, 5); graph1.BreadthFirst(j); MyGraph <string> graph2 = new MyGraph <string>(); var aa = graph2.AddVertex("aa"); var bb = graph2.AddVertex("bb"); var cc = graph2.AddVertex("cc"); var dd = graph2.AddVertex("dd"); var ee = graph2.AddVertex("ee"); graph2.AddUndirectedEdge(aa, bb, 5); graph2.AddUndirectedEdge(aa, cc, 5); graph2.AddUndirectedEdge(aa, dd, 5); graph2.AddUndirectedEdge(bb, cc, 5); graph2.AddUndirectedEdge(cc, dd, 5); graph2.AddUndirectedEdge(dd, bb, 5); Console.WriteLine(graph2.ClusteringCoefficientUndirected(aa)); }