Exemple #1
0
        public void MaxRectsAlgorithmTestSingleSquarePackSixteenSquaresIntoLarge4x4Square()
        {
            //Arrange
            var algo  = new MaximalRectanglesAlgorithm();
            var rects = Enumerable.Repeat(new PPRect(0, 0, 64, 64), 16);

            //Act
            var result = algo.PlaceRects(256, 256, rects);

            //Assert
            Assert.AreNotEqual(null, result);
            Assert.AreEqual(256, result.Width);
            Assert.AreEqual(256, result.Height);
            Assert.AreEqual(true, TestUtil.IsPackingResultValid(result));
            Assert.AreEqual(16, result.Rects.Count());

            List <PPRect> expectedSuperset = new List <PPRect>();

            for (int i = 0; i < 4; i++)
            {
                for (int j = 0; j < 4; j++)
                {
                    expectedSuperset.Add(new PPRect(i * 64, j * 64, i * 64 + 64, j * 64 + 64));
                }
            }

            CollectionAssert.IsSubsetOf(result.Rects.ToList(), expectedSuperset);
        }
Exemple #2
0
        public void MaxRectsAlgorithmTestSingleSquarePackFourSquaresIntoLarge2x2Square()
        {
            //Arrange
            var algo  = new MaximalRectanglesAlgorithm();
            var rects = Enumerable.Repeat(new PPRect(0, 0, 64, 64), 4);

            //Act
            var result = algo.PlaceRects(128, 128, rects);

            //Assert
            Assert.AreNotEqual(null, result);
            Assert.AreEqual(128, result.Width);
            Assert.AreEqual(128, result.Height);
            Assert.AreEqual(true, TestUtil.IsPackingResultValid(result));
            Assert.AreEqual(4, result.Rects.Count());

            List <PPRect> expectedSuperset = new List <PPRect>()
            {
                new PPRect(0, 0, 64, 64),
                new PPRect(0, 64, 64, 128),
                new PPRect(64, 0, 128, 64),
                new PPRect(64, 64, 128, 128)
            };

            CollectionAssert.IsSubsetOf(result.Rects.ToList(), expectedSuperset);
        }
Exemple #3
0
        public void MaxRectsAlgorithmTestNullInput()
        {
            //Arrange
            var algo = new MaximalRectanglesAlgorithm();
            IEnumerable <PPRect> rects = null;

            //Act
            algo.PlaceRects(63, 63, rects);
        }
Exemple #4
0
        public void MaxRectsAlgorithmTestSingleSquareNoFitInBothDirections()
        {
            //Arrange
            var algo  = new MaximalRectanglesAlgorithm();
            var rects = Enumerable.Repeat(new PPRect(0, 0, 64, 64), 1);

            //Act
            var result = algo.PlaceRects(63, 63, rects);

            //Assert
            Assert.AreEqual(null, result);
        }
Exemple #5
0
        public void MaxRectsAlgorithmTestSingleSquarePackSeventeenSquaresIntoLarge4x4Square()
        {
            //Arrange
            var algo  = new MaximalRectanglesAlgorithm();
            var rects = Enumerable.Repeat(new PPRect(0, 0, 64, 64), 17);

            //Assert
            var result = algo.PlaceRects(256, 256, rects);

            //Act
            Assert.AreEqual(null, result);
        }
Exemple #6
0
        public void MaxRectsAlgorithmTestSingleSquareFitSideBySideHorizontally()
        {
            //Arrange
            var algo  = new MaximalRectanglesAlgorithm();
            var rects = Enumerable.Repeat(new PPRect(0, 0, 64, 64), 10);

            //Act
            var result = algo.PlaceRects(1000, 64, rects);

            //Assert
            Assert.AreNotEqual(null, result);
            Assert.AreEqual(1000, result.Width);
            Assert.AreEqual(64, result.Height);
            Assert.AreEqual(true, TestUtil.IsPackingResultValid(result));
            CollectionAssert.AreEqual(Enumerable.Range(0, 10).Select(i => new PPRect(i * 64, 0, i * 64 + 64, 64)).ToList(), result.Rects.ToList());
        }
Exemple #7
0
        public void MaxRectsAlgorithmTestSingleSquareExactFit()
        {
            //Arrange
            var algo  = new MaximalRectanglesAlgorithm();
            var rects = Enumerable.Repeat(new PPRect(0, 0, 64, 64), 1);

            //Act
            var result = algo.PlaceRects(64, 64, rects);

            //Assert
            Assert.AreNotEqual(null, result);
            Assert.AreEqual(64, result.Width);
            Assert.AreEqual(64, result.Height);
            Assert.AreEqual(true, TestUtil.IsPackingResultValid(result));
            CollectionAssert.AreEqual(rects.ToList(), result.Rects.ToList());
        }
Exemple #8
0
        public void MaxRectsAlgorithmTestTwoDistinctRectsThatDoesNotFit()
        {
            //Arrange
            var algo  = new MaximalRectanglesAlgorithm();
            var rects = new List <PPRect>
            {
                new PPRect(0, 0, 32, 32),
                new PPRect(0, 0, 32, 32),
                new PPRect(0, 0, 64, 64),
                new PPRect(0, 0, 300, 300),
                new PPRect(0, 0, 512, 512)
            };

            //Act
            var result = algo.PlaceRects(256, 256, rects);

            //Assert
            Assert.AreEqual(null, result);
        }
Exemple #9
0
        public void MaxRectsAlgorithmTestEmptyInput()
        {
            //Arrange
            var algo  = new MaximalRectanglesAlgorithm();
            var rects = Enumerable.Empty <PPRect>();

            //Act
            var result = algo.PlaceRects(63, 63, rects);

            //Assert
            Assert.AreNotEqual(null, result);
            Assert.AreEqual(63, result.Width);
            Assert.AreEqual(63, result.Height);
            int actualWidth  = result.Rects.Any() ? result.Rects.Max(x => x.Right) : 0;
            int actualHeight = result.Rects.Any() ? result.Rects.Max(x => x.Bottom) : 0;

            Assert.AreEqual(0, actualWidth);
            Assert.AreEqual(0, actualHeight);
            Assert.AreEqual(0, result.Rects?.Count() ?? 0);
        }
Exemple #10
0
        public void MaxRectsAlgorithmTestOutperformsGuillotine()
        {
            //Arrange (both with PreserveOrderImageSorter)
            var maxRectsAlgo   = new MaximalRectanglesAlgorithm(new PreserveOrderImageSorter());
            var guillotineAlgo = new GuillotinePlacementAlgorithm(new BestAreaFitFreeRectangleExtractor(), new LongerAxisGuillotineFreeRectangleSplitter(), null, null,
                                                                  null, new PreserveOrderImageSorter());

            var rects = new List <PPRect>()
            {
                new PPRect(0, 0, 50, 10),
                new PPRect(0, 0, 10, 100)
            };

            //Act
            var result  = maxRectsAlgo.PlaceRects(90, 100, rects);
            var result2 = guillotineAlgo.PlaceRects(90, 100, rects);

            //Assert
            Assert.AreNotEqual(null, result);
            Assert.AreEqual(null, result2);
        }