public static void test2()
        {
            com.esri.core.geometry.MultiPoint multipoint = new com.esri.core.geometry.MultiPoint
                                                               ();
            for (int i = 0; i < 100; i++)
            {
                for (int j = 0; j < 100; j++)
                {
                    multipoint.add(i, j);
                }
            }
            com.esri.core.geometry.Envelope2D extent = new com.esri.core.geometry.Envelope2D(
                );
            multipoint.queryEnvelope2D(extent);
            com.esri.core.geometry.MultiPointImpl multipointImpl = (com.esri.core.geometry.MultiPointImpl
                                                                    )multipoint._getImpl();
            com.esri.core.geometry.QuadTree quadtree = buildQuadTree_(multipointImpl);
            com.esri.core.geometry.QuadTree.QuadTreeIterator qtIter = quadtree.getIterator();
            NUnit.Framework.Assert.IsTrue(qtIter.next() == -1);
            int count = 0;

            qtIter.resetIterator(extent, 0.0);
            while (qtIter.next() != -1)
            {
                count++;
            }
            NUnit.Framework.Assert.IsTrue(count == 10000);
        }
        public static void test1()
        {
            com.esri.core.geometry.Polyline polyline;
            polyline = makePolyline();
            com.esri.core.geometry.MultiPathImpl polylineImpl = (com.esri.core.geometry.MultiPathImpl
                                                                 )polyline._getImpl();
            com.esri.core.geometry.QuadTree quadtree  = buildQuadTree_(polylineImpl);
            com.esri.core.geometry.Line     queryline = new com.esri.core.geometry.Line(34, 9, 66
                                                                                        , 46);
            com.esri.core.geometry.QuadTree.QuadTreeIterator qtIter = quadtree.getIterator();
            NUnit.Framework.Assert.IsTrue(qtIter.next() == -1);
            qtIter.resetIterator(queryline, 0.0);
            int element_handle = qtIter.next();

            while (element_handle > 0)
            {
                int index = quadtree.getElement(element_handle);
                NUnit.Framework.Assert.IsTrue(index == 6 || index == 8 || index == 14);
                element_handle = qtIter.next();
            }
            com.esri.core.geometry.Envelope2D envelope = new com.esri.core.geometry.Envelope2D
                                                             (34, 9, 66, 46);
            com.esri.core.geometry.Polygon queryPolygon = new com.esri.core.geometry.Polygon(
                );
            queryPolygon.addEnvelope(envelope, true);
            qtIter.resetIterator(queryline, 0.0);
            element_handle = qtIter.next();
            while (element_handle > 0)
            {
                int index = quadtree.getElement(element_handle);
                NUnit.Framework.Assert.IsTrue(index == 6 || index == 8 || index == 14);
                element_handle = qtIter.next();
            }
        }
        public static void testRandom()
        {
            int passcount   = 10;
            int figureSize  = 100;
            int figureSize2 = 100;

            com.esri.core.geometry.Envelope extent1 = new com.esri.core.geometry.Envelope();
            com.esri.core.geometry.Envelope extent2 = new com.esri.core.geometry.Envelope();
            com.esri.core.geometry.Envelope extent3 = new com.esri.core.geometry.Envelope();
            com.esri.core.geometry.Envelope extent4 = new com.esri.core.geometry.Envelope();
            extent1.setCoords(-10000, 5000, 10000, 25000);
            // red
            extent2.setCoords(-10000, 2000, 10000, 8000);
            // blue
            extent3.setCoords(-10000, -8000, 10000, -2000);
            // blue
            extent4.setCoords(-10000, -25000, 10000, -5000);
            // red
            com.esri.core.geometry.RandomCoordinateGenerator generator1 = new com.esri.core.geometry.RandomCoordinateGenerator
                                                                              (System.Math.max(figureSize, 10000), extent1, 0.001);
            com.esri.core.geometry.RandomCoordinateGenerator generator2 = new com.esri.core.geometry.RandomCoordinateGenerator
                                                                              (System.Math.max(figureSize, 10000), extent2, 0.001);
            com.esri.core.geometry.RandomCoordinateGenerator generator3 = new com.esri.core.geometry.RandomCoordinateGenerator
                                                                              (System.Math.max(figureSize, 10000), extent3, 0.001);
            com.esri.core.geometry.RandomCoordinateGenerator generator4 = new com.esri.core.geometry.RandomCoordinateGenerator
                                                                              (System.Math.max(figureSize, 10000), extent4, 0.001);
            java.util.Random random = new java.util.Random(1982);
            int rand_max            = 511;
            int qCount = 0;
            int eCount = 0;
            int bCount = 0;

            for (int c = 0; c < passcount; c++)
            {
                com.esri.core.geometry.Polygon polyRed  = new com.esri.core.geometry.Polygon();
                com.esri.core.geometry.Polygon polyBlue = new com.esri.core.geometry.Polygon();
                int r = figureSize;
                if (r < 3)
                {
                    continue;
                }
                com.esri.core.geometry.Point pt;
                for (int j = 0; j < r; j++)
                {
                    int  rand       = random.nextInt(rand_max);
                    bool bRandomNew = (r > 10) && ((1.0 * rand) / rand_max > 0.95);
                    pt = generator1.GetRandomCoord();
                    if (j == 0 || bRandomNew)
                    {
                        polyRed.startPath(pt);
                    }
                    else
                    {
                        polyRed.lineTo(pt);
                    }
                }
                for (int j_1 = 0; j_1 < r; j_1++)
                {
                    int  rand       = random.nextInt(rand_max);
                    bool bRandomNew = (r > 10) && ((1.0 * rand) / rand_max > 0.95);
                    pt = generator4.GetRandomCoord();
                    if (j_1 == 0 || bRandomNew)
                    {
                        polyRed.startPath(pt);
                    }
                    else
                    {
                        polyRed.lineTo(pt);
                    }
                }
                r = figureSize2;
                if (r < 3)
                {
                    continue;
                }
                for (int j_2 = 0; j_2 < r; j_2++)
                {
                    int  rand       = random.nextInt(rand_max);
                    bool bRandomNew = (r > 10) && ((1.0 * rand) / rand_max > 0.95);
                    pt = generator2.GetRandomCoord();
                    if (j_2 == 0 || bRandomNew)
                    {
                        polyBlue.startPath(pt);
                    }
                    else
                    {
                        polyBlue.lineTo(pt);
                    }
                }
                for (int j_3 = 0; j_3 < r; j_3++)
                {
                    int  rand       = random.nextInt(rand_max);
                    bool bRandomNew = (r > 10) && ((1.0 * rand) / rand_max > 0.95);
                    pt = generator3.GetRandomCoord();
                    if (j_3 == 0 || bRandomNew)
                    {
                        polyBlue.startPath(pt);
                    }
                    else
                    {
                        polyBlue.lineTo(pt);
                    }
                }
                com.esri.core.geometry.Envelope2D env = new com.esri.core.geometry.Envelope2D();
                // Quad_tree
                com.esri.core.geometry.QuadTree quadTree = buildQuadTree(polyBlue);
                com.esri.core.geometry.QuadTree.QuadTreeIterator iterator = quadTree.getIterator(
                    );
                com.esri.core.geometry.SegmentIteratorImpl _segIterRed = ((com.esri.core.geometry.MultiPathImpl
                                                                           )polyRed._getImpl()).querySegmentIterator();
                while (_segIterRed.nextPath())
                {
                    while (_segIterRed.hasNextSegment())
                    {
                        com.esri.core.geometry.Segment segmentRed = _segIterRed.nextSegment();
                        segmentRed.queryEnvelope2D(env);
                        iterator.resetIterator(env, 0.001);
                        while (iterator.next() != -1)
                        {
                            qCount++;
                        }
                    }
                }
                // Envelope_2D_intersector
                System.Collections.Generic.List <com.esri.core.geometry.Envelope2D> envelopes_red =
                    new System.Collections.Generic.List <com.esri.core.geometry.Envelope2D>();
                System.Collections.Generic.List <com.esri.core.geometry.Envelope2D> envelopes_blue
                    = new System.Collections.Generic.List <com.esri.core.geometry.Envelope2D>();
                com.esri.core.geometry.SegmentIterator segIterRed = polyRed.querySegmentIterator(
                    );
                while (segIterRed.nextPath())
                {
                    while (segIterRed.hasNextSegment())
                    {
                        com.esri.core.geometry.Segment segment = segIterRed.nextSegment();
                        env = new com.esri.core.geometry.Envelope2D();
                        segment.queryEnvelope2D(env);
                        envelopes_red.add(env);
                    }
                }
                com.esri.core.geometry.SegmentIterator segIterBlue = polyBlue.querySegmentIterator
                                                                         ();
                while (segIterBlue.nextPath())
                {
                    while (segIterBlue.hasNextSegment())
                    {
                        com.esri.core.geometry.Segment segment = segIterBlue.nextSegment();
                        env = new com.esri.core.geometry.Envelope2D();
                        segment.queryEnvelope2D(env);
                        envelopes_blue.add(env);
                    }
                }
                com.esri.core.geometry.Envelope2DIntersectorImpl intersector = new com.esri.core.geometry.Envelope2DIntersectorImpl
                                                                                   ();
                intersector.setTolerance(0.001);
                intersector.startRedConstruction();
                for (int i = 0; i < envelopes_red.Count; i++)
                {
                    intersector.addRedEnvelope(i, envelopes_red[i]);
                }
                intersector.endRedConstruction();
                intersector.startBlueConstruction();
                for (int i_1 = 0; i_1 < envelopes_blue.Count; i_1++)
                {
                    intersector.addBlueEnvelope(i_1, envelopes_blue[i_1]);
                }
                intersector.endBlueConstruction();
                while (intersector.next())
                {
                    eCount++;
                }
                NUnit.Framework.Assert.IsTrue(qCount == eCount);
            }
        }