public void ComputeArea_ReturnsAreaOfConvexPolygon()
        {
            Coordinate[] coordinates = new Coordinate[] { new Coordinate(1, 1), new Coordinate(2, 0.5), new Coordinate(3, 1), new Coordinate(3, 2), new Coordinate(1, 2) };
            double expectedArea = 2.5;

            Mock<ICoordinateList> listM = new Mock<ICoordinateList>();
            listM.SetupGet(list => list.Count).Returns(5);
            listM.Setup(list => list[0]).Returns(coordinates[0]);
            listM.Setup(list => list[1]).Returns(coordinates[1]);
            listM.Setup(list => list[2]).Returns(coordinates[2]);
            listM.Setup(list => list[3]).Returns(coordinates[3]);
            listM.Setup(list => list[4]).Returns(coordinates[4]);
            Euclidean2DCalculator target = new Euclidean2DCalculator();

            double area = target.CalculateArea(listM.Object);
            Assert.Equal(expectedArea, area);
        }
        public void ComputeDistance_CoordinateLineLineSegmentMode_ReturnsPointDistanceIfABAreEquals()
        {
            Coordinate A = new Coordinate(1, 1);
            Coordinate B = new Coordinate(1, 1);
            Coordinate c = new Coordinate(1, 2);

            Euclidean2DCalculator target = new Euclidean2DCalculator();

            double distance = target.CalculateDistance(c, A, B, LineMode.LineSegment);
            Assert.Equal(1, distance);
        }
        public void ComputeDistance_CoordinateLineLineSegmentMode_ReturnsZeroIfPointLiesOnLineSegment(Coordinate c, Coordinate A, Coordinate B)
        {
            Euclidean2DCalculator target = new Euclidean2DCalculator();

            double distance = target.CalculateDistance(c, A, B, LineMode.LineSegment);
            Assert.Equal(0, distance);
        }
        public void ComputeDistance_CoordinateLineLineSegmentMode_ComputesPerpendicularDistanceToLineIfPointsProjectionLiesInside(Coordinate c, Coordinate A, Coordinate B, double expectedDistance)
        {
            Euclidean2DCalculator target = new Euclidean2DCalculator();

            double distance = target.CalculateDistance(c, A, B, LineMode.LineSegment);
            Assert.Equal(expectedDistance, distance);
        }
        public void ComputeDistance_CoordinateLineLineSegmentMode_ReturnsDistanceToEndPointsIfPointsProjectionLiesOutsideSegment()
        {
            Coordinate A = new Coordinate(1, 1);
            Coordinate B = new Coordinate(-1, -1);
            Coordinate c1 = new Coordinate(1,2);
            Coordinate c2 = new Coordinate(-1,-2);

            Euclidean2DCalculator target = new Euclidean2DCalculator();

            double distanceC1 = target.CalculateDistance(c1, A, B, LineMode.LineSegment);
            Assert.Equal(1, distanceC1);

            double distanceC2 = target.CalculateDistance(c2, A, B, LineMode.LineSegment);
            Assert.Equal(1, distanceC2);
        }
        public void ComputeDistance_CoordinateCoordinate_ReturnsZeroForPointsWithSameXYCoordinates(Coordinate c1, Coordinate c2)
        {
            Euclidean2DCalculator target = new Euclidean2DCalculator();

            double distance = target.CalculateDistance(c1, c2);

            Assert.Equal(0, distance);
        }
        public void ComputeDistance_CoordinateCoordinate_ReturnsDistanceBetweenCoordinates(Coordinate c1, Coordinate c2, double expectedDistance)
        {
            Euclidean2DCalculator target = new Euclidean2DCalculator();

            double distance = target.CalculateDistance(c1, c2);

            Assert.Equal(expectedDistance, distance);
        }
        public void ComputeDistance_CoordinateCoordinate_IgnoresZOrdinate()
        {
            Euclidean2DCalculator target = new Euclidean2DCalculator();

            double distance = target.CalculateDistance(new Coordinate(-1, 0, 100), new Coordinate(1, 0, -100));

            Assert.Equal(2, distance);
        }
        public void ComputeArea_ThrowsExceptionIfNumberOfVerticesIsLesserThen3()
        {
            Mock<ICoordinateList> listM = new Mock<ICoordinateList>();
            listM.SetupGet(l => l.Count).Returns(2);
            Euclidean2DCalculator target = new Euclidean2DCalculator();

            Assert.Throws<ArgumentException>(() => target.CalculateArea(listM.Object));
        }
        public void ComputeArea_ReturnsCorrectAreaIfLastCoordinateIsSameAsFirst()
        {
            Coordinate[] coordinates = new Coordinate[] { new Coordinate(1, 1), new Coordinate(2, 0.5), new Coordinate(3, 1), new Coordinate(3, 2), new Coordinate(1, 2), new Coordinate(1, 1) };
            double expectedArea = 2.5;

            Mock<ICoordinateList> listM = new Mock<ICoordinateList>();
            listM.SetupGet(list => list.Count).Returns(6);
            listM.Setup(list => list[0]).Returns(coordinates[0]);
            listM.Setup(list => list[1]).Returns(coordinates[1]);
            listM.Setup(list => list[2]).Returns(coordinates[2]);
            listM.Setup(list => list[3]).Returns(coordinates[3]);
            listM.Setup(list => list[4]).Returns(coordinates[4]);
            listM.Setup(list => list[5]).Returns(coordinates[5]);
            Euclidean2DCalculator target = new Euclidean2DCalculator();

            double area = target.CalculateArea(listM.Object);
            Assert.Equal(expectedArea, area);
        }