public void Constructor_IEnumerable_CreatesLineStringFromCoordinates()
        {
            LineString target = new LineString(_coordinatesXYZ);

            Assert.Equal(SRIDList.WSG84, target.Srid);
            CheckCoordinates(target, _coordinatesXYZ);
        }
        public void Constructor__CreatesEmptyLineStringWithWSG84()
        {
            LineString target = new LineString();

            Assert.Equal(0, target.Coordinates.Count);
            Assert.Equal(SRIDList.WSG84, target.Srid);
        }
        public void Constructor_SRIDIEnumerable_CreatesLineStringFromPointsWithSpecifiedSRID()
        {
            int srid = 1;
            LineString target = new LineString(srid, _coordinatesXYZ);

            Assert.Equal(srid, target.Srid);
            CheckCoordinates(target, _coordinatesXYZ);
        }
        public void Constructor_SRID_CreatesEmptyLineStringAndSetsCustomSRID()
        {
            int srid = 1;
            LineString target = new LineString(srid);

            Assert.Equal(0, target.Coordinates.Count);
            Assert.Equal(srid, target.Srid);
        }
        public void Is3D_ReturnsTrueForAll3DCoords()
        {
            LineString target = new LineString(_coordinatesXYZ);

            Assert.True(target.Is3D);
        }
        public void ComputeLength_MultiLineString_RetursSumOfLineStringsLengths()
        {
            Random generator = new Random();
            double segment1Length = generator.Next(100);
            double segment2Length = generator.Next(100);
            double sum = 2 * (segment1Length + segment2Length);

            LineString linestring = new LineString(new Coordinate[] { new Coordinate(10.1, 20.1), new Coordinate(10.2, 20.2), new Coordinate(10.3, 20.3) });
            MultiLineString multilinestring = new MultiLineString(new LineString[] { linestring, linestring });

            Mock<IDimensionsCalculator> calculatorM = new Mock<IDimensionsCalculator>();
            calculatorM.Setup(calc => calc.CalculateDistance(linestring.Coordinates[0], linestring.Coordinates[1])).Returns(segment1Length);
            calculatorM.Setup(calc => calc.CalculateDistance(linestring.Coordinates[1], linestring.Coordinates[2])).Returns(segment2Length);

            Measurements target = new Measurements(calculatorM.Object);
            double length = target.ComputeLength(multilinestring);

            Assert.Equal(sum, length);
        }
        private void CheckCoordinates(LineString target, Coordinate[] expectedPoints)
        {
            Assert.Equal(expectedPoints.Length, target.Coordinates.Count);

            for (int i = 0; i < expectedPoints.Length; i++) {
                Assert.Equal(expectedPoints[i], target.Coordinates[i]);
            }
        }
        public void Start_ReturnsFirstCoordinate()
        {
            LineString target = new LineString(_coordinatesXYZ);

            Assert.Equal(_coordinatesXYZ.First(), target.Start);
        }
        public void IsMeasured_ReturnsTrueForMeasuredCoords()
        {
            LineString target = new LineString(_coordinatesXYZM);

            Assert.True(target.IsMeasured);
        }
        public void IsMeasured_ReturnsFalseForNonMeasuredCoords()
        {
            LineString target = new LineString(_coordinatesXYZ);

            Assert.False(target.IsMeasured);
        }
        public void ComputeLength_LineString_RetursZeroForLineStringWithoutPoints()
        {
            LineString linestring = new LineString();

            Mock<IDimensionsCalculator> calculatorM = new Mock<IDimensionsCalculator>();
            Measurements target = new Measurements(calculatorM.Object);

            double length = target.ComputeLength(linestring);

            Assert.Equal(0, length);
        }
        public void GetBoundary_ReturnsEmptyMultiPointForClosedLineString()
        {
            LineString target = new LineString(_coordinatesXYZ);
            target.Coordinates.Add(target.Coordinates[0]);

            IMultiPoint boundary = target.GetBoundary() as IMultiPoint;

            Assert.NotNull(boundary);
            Assert.Empty(boundary.Geometries);
        }
        public void End_ReturnsEmptyCoordinateForEmptyLineString()
        {
            LineString target = new LineString();

            Assert.Equal(Coordinate.Empty, target.End);
        }
        public void Is3D_ReturnsFalseForAll2DCoords()
        {
            LineString target = new LineString(_coordinatesXY);

            Assert.False(target.Is3D);
        }
        public void GetEnvelope_ReturnsEnvelopeOfLineString()
        {
            LineString target = new LineString(_coordinatesXYZ);
            Envelope expected = new Envelope(_coordinatesXYZ);

            Assert.Equal(expected, target.GetEnvelope());
        }
        public void GetEnvelope_ReturnsEmptyEnvelopeForEmptyLineString()
        {
            LineString target = new LineString();
            Envelope envelope = target.GetEnvelope();

            Assert.Equal(Envelope.Empty, envelope);
        }
        public void GetBoundary_ReturnsMultipointWithStartAndEndPointsAndCorrectSRID()
        {
            int srid = 1111;
            LineString target = new LineString(srid, _coordinatesXYZM);
            IMultiPoint boundary = target.GetBoundary() as IMultiPoint;

            Assert.NotNull(boundary);
            Assert.Equal(srid, boundary.Srid);
            Assert.Equal(target.Start, boundary.Geometries.First().Position);
            Assert.Equal(target.End, boundary.Geometries.Last().Position);
        }
 private void CompareLineStrings(LineString linestring, LineString expected)
 {
     this.CompareCoordinateLists(linestring.Coordinates, expected.Coordinates);
 }
        public void ComputeDistance_PointLineString_ReturnsNaNIfLineStringIsEmpty()
        {
            Point point = new Point(new Coordinate(10.1, 20.1));
            LineString linestring = new LineString();

            Mock<IDimensionsCalculator> calculatorM = new Mock<IDimensionsCalculator>();

            Measurements target = new Measurements(calculatorM.Object);
            double distance = target.ComputeDistance(point, linestring);

            Assert.True(double.IsNaN(distance));
        }
        public void IsClosed_ReturnsFalseForOpenLineString()
        {
            LineString target = new LineString(_coordinatesXYZ);

            Assert.False(target.IsClosed);
        }
        public void IsClosed_ReturnsTrueForClosedLineString()
        {
            LineString target = new LineString(_coordinatesXYZ);
            target.Coordinates.Add(target.Coordinates[0]);

            Assert.True(target.IsClosed);
        }
        public void End_ReturnsLastCoordinate()
        {
            LineString target = new LineString(_coordinatesXYZ);

            Assert.Equal(_coordinatesXYZ.Last(), target.End);
        }
        public void IsMeasured_ReturnsFalseForEmptyLineString()
        {
            LineString target = new LineString();

            Assert.False(target.IsMeasured);
        }
 public void Write_WritesLinestringsOfAllDimensions(LineString toWrite, string expectedWkt)
 {
     this.TestWriteGeometry(toWrite, expectedWkt);
 }
        public void ComputeDistance_PointMultiLineString_ReturnsNaNIfPointIsEmpty()
        {
            Point point = new Point(Coordinate.Empty);
            LineString linestring = new LineString(new Coordinate[] { new Coordinate(10.1, 20.1), new Coordinate(10.2, 20.2), new Coordinate(10.3, 20.3) });
            MultiLineString multilinestring = new MultiLineString(new LineString[] { linestring, linestring });

            Mock<IDimensionsCalculator> calculatorM = new Mock<IDimensionsCalculator>();

            Measurements target = new Measurements(calculatorM.Object);
            double distance = target.ComputeDistance(point, multilinestring);

            Assert.True(double.IsNaN(distance));
        }