public void Solve_EmptyInput_ReturnsEmptyOutput() { var graph = DirectedGraphBuilder <string> .EmptyGraph(); var solver = CoffmanGraham.SolverForArbitraryGraphs(1); solver.Solve(graph).Should().BeEmpty(); }
public void Solve_MoreChildrenThanMaxWidth_IncludesAllElementsInLayers() { const int width = 3; const int numChildren = width * 3; var graph = createGraphWithManyChildren(numChildren); var solver = CoffmanGraham.SolverForArbitraryGraphs(width); var solution = solver.Solve(graph); solution.SelectMany(s => s).Should().Contain(graph.Elements); }
public void Solve_NoArrows_IncludesAllElementsInLayers() { const int width = 3; const int numElements = 100; var graph = createGraphWithoutArrows(numElements); var solver = CoffmanGraham.SolverForArbitraryGraphs(width); var solution = solver.Solve(graph); solution.SelectMany(s => s).Should().Contain(graph.Elements); }
public void Solve_MoreChildrenThanMaxWidth_UsesTheMinimumNumberOfLayers() { const int width = 4; const int numChildren = 17; const int expectedLayers = 6; // 1 [root] + ceil(17 / 4) [children] var graph = createGraphWithManyChildren(numChildren); var solver = CoffmanGraham.SolverForArbitraryGraphs(width); var solution = solver.Solve(graph); solution.Should().HaveCount(expectedLayers); }
public void Solve_NoArrows_UsesTheMinimumNumberOfLayers() { const int width = 3; const int numElements = 18; const int expectedLayers = 6; var graph = createGraphWithoutArrows(numElements); var solver = CoffmanGraham.SolverForArbitraryGraphs(width); var solution = solver.Solve(graph); solution.Should().HaveCount(expectedLayers); }
public void Solve_SingleInput_ReturnsSingleLayer() { var graph = DirectedGraphBuilder <string> .NewBuilder() .AddElement("element") .CreateAcyclicGraphUnsafe(); var solver = CoffmanGraham.SolverForArbitraryGraphs(1); var solution = solver.Solve(graph); solution.Should().HaveCount(1); solution[0].Should().Contain("element"); }
public void Solve_PutsChildrenInSeparateLayers() { const int numElements = 10; var graph = createLine(numElements); var solver = CoffmanGraham.SolverForArbitraryGraphs(100); var solution = solver.Solve(graph); for (var i = 0; i < solution.Count; i++) { solution[i].Should().ContainSingle().Which.Should().Be(i); } }
public void Solve_MoreChildrenThanMaxWidth_DoesNotCreateLayersTooLarge() { const int width = 3; const int numChildren = width * 3; var graph = createGraphWithManyChildren(numChildren); var solver = CoffmanGraham.SolverForArbitraryGraphs(width); var solution = solver.Solve(graph); foreach (var layer in solution) { layer.Should().HaveCountLessOrEqualTo(width); } }
public void Solve_NoArrows_DoesNotCreatesLayersTooLarge() { const int width = 2; const int numElements = 3; var graph = createGraphWithoutArrows(numElements); var solver = CoffmanGraham.SolverForArbitraryGraphs(width); var solution = solver.Solve(graph); foreach (var layer in solution) { layer.Should().HaveCountLessOrEqualTo(width); } }