public void testDisjoint()
        {
            var builder = new S2PolygonBuilder(S2PolygonBuilderOptions.UndirectedXor);

            builder.AddPolygon(adj0);
            builder.AddPolygon(unAdj);
            var ab = new S2Polygon();

            assertTrue(builder.AssemblePolygon(ab, null));

            var union = new S2Polygon();

            union.InitToUnion(adj0, unAdj);
            assertEquals(2, union.NumLoops);

            checkEqual(ab, union);
            tryUnion(adj0, unAdj);
        }
        private void checkEqual(S2Polygon a, S2Polygon b)
        {
            var MAX_ERROR = 1e-31;

            if (a.IsNormalized && b.IsNormalized)
            {
                var r = a.BoundaryApproxEquals(b, MAX_ERROR);
                assertTrue(r);
            }
            else
            {
                var builder = new S2PolygonBuilder(S2PolygonBuilderOptions.UndirectedXor);
                var a2      = new S2Polygon();
                var b2      = new S2Polygon();
                builder.AddPolygon(a);
                assertTrue(builder.AssemblePolygon(a2, null));
                builder.AddPolygon(b);
                assertTrue(builder.AssemblePolygon(b2, null));
                assertTrue(a2.BoundaryApproxEquals(b2, MAX_ERROR));
            }
        }
        public void testDisjoint()
        {
            var builder = new S2PolygonBuilder(S2PolygonBuilderOptions.UndirectedXor);
            builder.AddPolygon(adj0);
            builder.AddPolygon(unAdj);
            var ab = new S2Polygon();
            assertTrue(builder.AssemblePolygon(ab, null));

            var union = new S2Polygon();
            union.InitToUnion(adj0, unAdj);
            assertEquals(2, union.NumLoops);

            checkEqual(ab, union);
            tryUnion(adj0, unAdj);
        }
        private void checkEqual(S2Polygon a, S2Polygon b)
        {
            var MAX_ERROR = 1e-31;

            if (a.IsNormalized && b.IsNormalized)
            {
                var r = a.BoundaryApproxEquals(b, MAX_ERROR);
                assertTrue(r);
            }
            else
            {
                var builder = new S2PolygonBuilder(S2PolygonBuilderOptions.UndirectedXor);
                var a2 = new S2Polygon();
                var b2 = new S2Polygon();
                builder.AddPolygon(a);
                assertTrue(builder.AssemblePolygon(a2, null));
                builder.AddPolygon(b);
                assertTrue(builder.AssemblePolygon(b2, null));
                assertTrue(a2.BoundaryApproxEquals(b2, MAX_ERROR));
            }
        }