public void LayoutOccupiedArea_ShouldBeGreaterOrEqualThanMinimal_WhenManySizesAdded()
        {
            var sizes = SizesGenerator.GenerateSizes(600, minSize, maxSize, seed: 128);

            FillLayoutWithSomeRectangles(layouter, sizes);

            var occupiedArea = layouter.Rectangles
                               .Sum(rectangle => rectangle.Width * rectangle.Height);

            var maxLayoutRadius = 0.0;

            foreach (var rectangle in layouter.Rectangles)
            {
                var maxDistanceToRectangle = GetMaxDistanceToRectangle(layouter.Center, rectangle);
                if (maxLayoutRadius < maxDistanceToRectangle)
                {
                    maxLayoutRadius = maxDistanceToRectangle;
                }
            }

            var totalArea = GetCircleAreaFromRadius(maxLayoutRadius);
            var actualOccupiedAreaRatio = occupiedArea / totalArea;

            actualOccupiedAreaRatio.Should().BeGreaterOrEqualTo(MinOccupiedAreaRatio);
        }
 public void PutNextRectangle_ShouldReturnRectangleWithSameSize_WhenSomeSizesAdded()
 {
     foreach (var size in SizesGenerator.GenerateSizes(5, minSize, maxSize, seed:128))
     {
         layouter.PutNextRectangle(size).Size
         .Should().BeEquivalentTo(size);
     }
 }
        public void Layout_ShouldContainsAllRectangles_WhenSomeSizesAdded()
        {
            var sizes = SizesGenerator.GenerateSizes(5, minSize, maxSize, seed: 128);

            FillLayoutWithSomeRectangles(layouter, sizes);

            layouter.Rectangles.Select(rect => rect.Size)
            .Should().BeEquivalentTo(sizes);
        }
        public void LayoutRectangles_ShouldNotIntersectEachOther_WhenSomeRectanglesAdded()
        {
            var sizes = SizesGenerator.GenerateSizes(25, minSize, maxSize, seed: 128);

            FillLayoutWithSomeRectangles(layouter, sizes);

            foreach (var rectangle in layouter.Rectangles)
            {
                IsRectangleIntersectOther(layouter, rectangle)
                .Should().BeFalse("rectangles must not intersect");
            }
        }