public void DependencyGraphCircular() { var g = new PvcDependencyGraph(); g.AddDependencies("A", new string[] { "B", "C" }); g.AddDependency("B", "C"); g.AddDependency("C", "B"); Assert.Throws<PvcCircularDependencyException>(() => { var paths = g.GetPaths("A"); }); try { var paths = g.GetPaths("A"); } catch (PvcCircularDependencyException e) { Assert.Equal(e.CircularPath.Count, 4); Assert.Equal(e.CircularPath[0], "A"); Assert.Equal(e.CircularPath[1], "B"); Assert.Equal(e.CircularPath[2], "C"); Assert.Equal(e.CircularPath[3], "B"); } }
public void DependencyGraphSimpleChain() { var g = new PvcDependencyGraph(); g.AddDependency("A", "B"); g.AddDependency("B", "C"); var paths = g.GetPaths("A"); CheckPaths(g, paths); var pathstrings = paths.Select(p => string.Join(" ", p)).ToList(); Assert.Equal(1, pathstrings.Count); Assert.Contains("C B A", pathstrings); }
public void DependencyGraphMultipleBranches() { var g = new PvcDependencyGraph(); g.AddDependencies("A", new string[] { "B", "C" }); g.AddDependency("B", "D"); g.AddDependency("C", "E"); g.AddDependency("E", "F"); g.AddDependency("E", "G"); var paths = g.GetPaths("A"); CheckPaths(g, paths); Assert.Equal(12, paths.Count); }
public void DependencyGraphRemovesExtraNodes() { var g = new PvcDependencyGraph(); g.AddDependency("A", "B"); // These two aren't actually part of the graph for A. g.AddDependency("C", "D"); // This depends on A, so shouldn't be included in the dependencies for A. g.AddDependency("Z", "A"); var paths = g.GetPaths("A"); CheckPaths(g, paths); Assert.Equal(1, paths.Count); Assert.Equal(2, paths[0].Count); }
public void DependencyGraphHugeBranchesWithMoreBranching() { var g = new PvcDependencyGraph(); g.AddDependencies("A", new string[] { "B", "C", "D", "E", "F", "G", "H", "I" }); g.AddDependency("F", "J"); g.AddDependency("F", "K"); var paths = g.GetPaths("A"); CheckPaths(g, paths); Assert.Equal(1, paths.Count); }