public void Return_ABooleanUnion_BetweenTwo_BoundingBoxes()
        {
            Point pt1 = new Point()
            {
                5d, 5d, 0d
            };
            Point pt2 = new Point()
            {
                -15d, -13d, -5d
            };
            List <Point> pts = new List <Point>()
            {
                pt1, pt2
            };
            Point pMax = new Point()
            {
                10, 10, 0
            };

            BoundingBox bBox1      = new BoundingBox(BoundingBoxCollection.BoundingBoxFrom5Points());
            BoundingBox bBox2      = new BoundingBox(pts);
            BoundingBox bBoxResult = bBox1.Union(bBox2);

            _testOutput.WriteLine(bBoxResult.ToString());
            bBoxResult.IsValid.Should().BeTrue();
            bBoxResult.Max.Should().BeEquivalentTo(pMax);
            bBoxResult.Min.Should().BeEquivalentTo(pt2);
        }
        public void Return_TheLongestAxis()
        {
            BoundingBox bBox = new BoundingBox(BoundingBoxCollection.BoundingBoxWithZValue());

            int longestAxis = bBox.GetLongestAxis();

            longestAxis.Should().Be(1);
        }
        public void Return_A_BBox_NotInitialized()
        {
            BoundingBox bBox = new BoundingBox(BoundingBoxCollection.BoundingBoxFrom5Points());

            bBox.Clear();

            bBox.IsValid.Should().BeFalse();
        }
        public void Union_Returns_TheValidBoundingBox_IfOther_IsNotValid()
        {
            BoundingBox bBox1 = BoundingBox.Unset;
            BoundingBox bBox2 = new BoundingBox(BoundingBoxCollection.BoundingBoxFrom5Points());

            BoundingBox bBoxResult = BoundingBox.Union(bBox1, bBox2);

            bBoxResult.Should().Be(bBox2);
        }
        public void IntersectReturns_UnsetBBox_If_ThereIsNotIntersection()
        {
            BoundingBox bBox1 = new BoundingBox(BoundingBoxCollection.BoundingBoxFrom5Points());
            BoundingBox bBox2 = new BoundingBox(BoundingBoxCollection.NegativeBoundingBox());

            BoundingBox bBoxResult = BoundingBox.Intersect(bBox1, bBox2);

            bBoxResult.IsValid.Should().BeFalse();
            bBoxResult.Max.Should().BeEquivalentTo(Point.Unset);
            bBoxResult.Min.Should().BeEquivalentTo(Point.Unset);
        }
        public void IntersectReturns_UnsetBBox_If_OneOfTheTwoBBoxes_IsNotInitialized()
        {
            BoundingBox bBox1 = BoundingBox.Unset;
            BoundingBox bBox2 = new BoundingBox(BoundingBoxCollection.BoundingBoxFrom5Points());

            BoundingBox bBoxResult = BoundingBox.Intersect(bBox1, bBox2);

            bBoxResult.IsValid.Should().BeFalse();
            bBoxResult.Max.Should().BeEquivalentTo(Point.Unset);
            bBoxResult.Min.Should().BeEquivalentTo(Point.Unset);
        }
        public void ReturnFalse_IfAPoint_Is_Outside_TheBoundingBox()
        {
            Point externalPt = new Point()
            {
                12.4, 5.0, 0.0
            };

            BoundingBox bBox           = new BoundingBox(BoundingBoxCollection.BoundingBoxFrom5Points());
            bool        containsResult = bBox.Contains(externalPt, false);

            containsResult.Should().BeFalse();
        }
        public void ReturnTrue_IfAPoint_Is_Contained_Into_TheBoundingBox()
        {
            Point conteinedPt = new Point()
            {
                2.5, 4.5, 0.0
            };

            BoundingBox bBox           = new BoundingBox(BoundingBoxCollection.BoundingBoxFrom5Points());
            bool        containsResult = bBox.Contains(conteinedPt, false);

            containsResult.Should().BeTrue();
        }
        public void IntersectReturns_BBox_As_Intersection_Of_Two_BBoxes()
        {
            Point pt1 = new Point()
            {
                5d, 5d, 0d
            };
            Point pt2 = new Point()
            {
                15d, 15d, 0d
            };
            List <Point> pts2 = new List <Point>()
            {
                pt1, pt2
            };

            BoundingBox bBox1      = new BoundingBox(BoundingBoxCollection.BoundingBoxFrom5Points());
            BoundingBox bBox2      = new BoundingBox(pts2);
            BoundingBox bBoxResult = bBox1.Intersect(bBox2);

            bBoxResult.IsValid.Should().BeTrue();
            bBoxResult.Max.Should().BeEquivalentTo(bBox1.Max);
            bBoxResult.Min.Should().BeEquivalentTo(bBox2.Min);
        }