static void TestLengths(double del, int j, Curve curve, double eps, double pi, double li) {
     var lj = del*j;
     var pj = curve.GetParameterAtLength(lj);
     Assert.IsTrue(Math.Abs(curve.Trim(0, pj).Length - lj) < eps);
     var trimJi = curve.Trim(pj, pi);
     var lenJi = trimJi.Length;
     Assert.IsTrue(Math.Abs(lenJi - (li - lj)) < eps);
 }
 /// <summary>
 ///
 /// </summary>
 /// <param name="length"></param>
 /// <returns></returns>
 public double GetParameterAtLength(double length)
 {
     return(curve.GetParameterAtLength(length));
 }
        public void LengthTestingForCurve() {
#if GDI_DEBUG_VIEWER
            GraphViewerGdi.DisplayGeometryGraph.SetShowFunctions();
#endif
            var curve = new Curve(Getsegs());
            var lengths = new List<double>();
            foreach (var seg in curve.Segments) {
                lengths.Add(seg.Length);
            }
            var curveLen = curve.Length;
            double eps = Curve.LineSegmentThreshold*10;
            
            Assert.IsTrue(ApproximateComparer.Close(lengths.Sum(), curveLen));
            var del = curveLen/1000;
            //special case 
            for (int i = 745; i < 746; i++) {
                var li = i*del;
                var pi = curve.GetParameterAtLength(li);
                Assert.IsTrue(Math.Abs(curve.Trim(0, pi).Length - li) < eps);
                for (int j = 724; j < 725; j++)
                    TestLengths(del, j, curve, eps, pi, li);
            }


            for (int i = 0; i < 1000; i++) {
                var li = i*del;
                var pi = curve.GetParameterAtLength(li);
                Assert.IsTrue(Math.Abs(curve.Trim(0, pi).Length - li) < eps);
                for (int j = 0; j < i; j++)
                    TestLengths(del, j, curve, eps, pi, li);
            }

        }