public void CanGetMonotonicitySequencesEmpty()
        {
            var polyline = (IPolyline)CurveConstruction.StartLine(CreatePoint(0, 0, 100))
                           .LineTo(CreatePoint(50, 0, double.NaN))
                           .LineTo(CreatePoint(100, 0, 100))
                           .LineTo(CreatePoint(50, 0, double.NaN))
                           .Curve;

            polyline.SpatialReference = CreateSpatialReference(_mTolerance, _xyTolerance);
            GeometryUtils.MakeMAware(polyline);

            IEnumerable <MMonotonicitySequence> result =
                MeasureUtils.GetMonotonicitySequences((ISegmentCollection)polyline,
                                                      esriMonotinicityEnum.esriValuesEmpty);

            Assert.IsTrue(1 == result.Count());

            MMonotonicitySequence[] sequences = result.ToArray();

            Assert.IsTrue(sequences[0].MonotonicityType ==
                          esriMonotinicityEnum.esriValuesEmpty);

            Assert.IsTrue(sequences[0].Segments.Count == 3);

            Assert.IsTrue(sequences[0].Segments[0].FromPoint.M == 100);
            Assert.IsTrue(double.IsNaN(sequences[0].Segments[0].ToPoint.M));
            Assert.IsTrue(double.IsNaN(sequences[0].Segments[1].FromPoint.M));
            Assert.IsTrue(sequences[0].Segments[1].ToPoint.M == 100);
            Assert.IsTrue(sequences[0].Segments[2].FromPoint.M == 100);
            Assert.IsTrue(double.IsNaN(sequences[0].Segments[2].ToPoint.M));
        }
        public void CanGetMonotonicitySequencesDecreasing2()
        {
            var polyline = (IPolyline)CurveConstruction.StartLine(CreatePoint(0, 0, -100))
                           .LineTo(CreatePoint(1, 0, -200))
                           .LineTo(CreatePoint(2, 0, -300))
                           .LineTo(CreatePoint(3, 0, -400))
                           .LineTo(CreatePoint(4, 0, -300))
                           .LineTo(CreatePoint(5, 0, -200))
                           .LineTo(CreatePoint(6, 0, -300))
                           .Curve;

            polyline.SpatialReference = CreateSpatialReference(_mTolerance, _xyTolerance);
            GeometryUtils.MakeMAware(polyline);

            IEnumerable <MMonotonicitySequence> result =
                MeasureUtils.GetMonotonicitySequences((ISegmentCollection)polyline,
                                                      esriMonotinicityEnum.esriValueDecreases);

            Assert.IsTrue(2 == result.Count());

            MMonotonicitySequence[] sequences = result.ToArray();

            Assert.IsTrue(sequences[0].MonotonicityType ==
                          esriMonotinicityEnum.esriValueDecreases);

            Assert.IsTrue(sequences[0].Segments.Count == 3);

            Assert.IsTrue(sequences[0].Segments[0].FromPoint.M == -100);
            Assert.IsTrue(sequences[0].Segments[0].ToPoint.M == -200);
            Assert.IsTrue(sequences[0].Segments[1].FromPoint.M == -200);
            Assert.IsTrue(sequences[0].Segments[1].ToPoint.M == -300);
            Assert.IsTrue(sequences[0].Segments[2].FromPoint.M == -300);
            Assert.IsTrue(sequences[0].Segments[2].ToPoint.M == -400);

            Assert.IsTrue(sequences[1].MonotonicityType ==
                          esriMonotinicityEnum.esriValueDecreases);

            Assert.IsTrue(sequences[1].Segments.Count == 1);

            Assert.IsTrue(sequences[1].Segments[0].FromPoint.M == -200);
            Assert.IsTrue(sequences[1].Segments[0].ToPoint.M == -300);
        }