Пример #1
0
        public void Solve_EmptyInput_ReturnsEmptyOutput()
        {
            var graph = DirectedGraphBuilder <string> .EmptyGraph();

            var solver = CoffmanGraham.SolverForArbitraryGraphs(1);

            solver.Solve(graph).Should().BeEmpty();
        }
Пример #2
0
        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);
        }
Пример #3
0
        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);
        }
Пример #4
0
        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);
        }
Пример #5
0
        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);
        }
Пример #6
0
        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");
        }
Пример #7
0
        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);
            }
        }
Пример #8
0
        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);
            }
        }
Пример #9
0
        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);
            }
        }