public void WhenTheTwoCubesDoesNotOverlap_ThenReturnNull(double center1X, double center1Y, double center1Z, double size1X, double size1Y, double size1Z,
                                                                     double center2X, double center2Y, double center2Z, double size2X, double size2Y, double size2Z)
            {
                // Arrange
                Cube cubeA = new Cube(new Point3D(center1X, center1Y, center1Z), size1X, size1Y, size1Z);
                Cube cubeB = new Cube(new Point3D(center2X, center2Y, center2Z), size2X, size2Y, size2Z);

                var sut = new CubesIntersector();

                // Act
                var result = sut.GetIntersection(cubeA, cubeB);

                // Assert
                result.Should().BeNull();
            }
            public void WhenTheTwoCubesAreTouchingOnAnEdge_ThenReturnNull(
                double center1X, double center1Y, double center1Z, double size1X, double size1Y, double size1Z,
                double center2X, double center2Y, double center2Z, double size2X, double size2Y, double size2Z)
            {
                // Arrange
                Cube cubeA = new Cube(new Point3D(center1X, center1Y, center1Z), size1X, size1Y, size1Z);
                Cube cubeB = new Cube(new Point3D(center2X, center2Y, center2Z), size2X, size2Y, size2Z);

                var sut = new CubesIntersector();

                // Act
                var result = sut.GetIntersection(cubeA, cubeB);

                // Assert
                ((Cube)result).Should().BeNull();
            }
            public void WhenTheTwoCubesOverlapWithDifferentCentre_ThenIntersectionIsProperlyCalculated(
                double center1X, double center1Y, double center1Z, double size1X, double size1Y, double size1Z,
                double center2X, double center2Y, double center2Z, double size2X, double size2Y, double size2Z,
                double centerRX, double centerRY, double centerRZ, double sizeRX, double sizeRY, double sizeRZ)
            {
                // Arrange
                Cube cubeA = new Cube(new Point3D(center1X, center1Y, center1Z), size1X, size1Y, size1Z);
                Cube cubeB = new Cube(new Point3D(center2X, center2Y, center2Z), size2X, size2Y, size2Z);

                var sut = new CubesIntersector();

                // Act
                var result = sut.GetIntersection(cubeA, cubeB);

                // Assert
                ((Cube)result).Center.X.Should().BeApproximately(centerRX, 0.01);
                ((Cube)result).Center.Y.Should().BeApproximately(centerRY, 0.01);
                ((Cube)result).Center.Z.Should().BeApproximately(centerRZ, 0.01);
                ((Cube)result).SizeX.Should().BeApproximately(sizeRX, 0.01);
                ((Cube)result).SizeY.Should().BeApproximately(sizeRY, 0.01);
                ((Cube)result).SizeZ.Should().BeApproximately(sizeRZ, 0.01);
            }