[test] add testcases, minor changes in existing testcases

This commit is contained in:
Barend Gehrels 2019-01-30 15:23:56 +01:00
parent e83b8060cc
commit e9b81ed877
9 changed files with 246 additions and 37 deletions

View File

@ -1323,6 +1323,18 @@ static std::string pie_7_2_1_0_15[2] =
"MULTIPOLYGON(((2500 2500,2791 3586,3062 3474,2500 2500)),((2500 2500,3474 3062,3586 2791,3625 2500,3586 2208,3474 1937,3295 1704,3062 1525,2791 1413,2499 1375,2208 1413,1937 1525,1704 1704,1525 1937,1413 2208,1375 2500,2500 2500)))"
};
static std::string case_precision_m1[2] =
{
"MULTIPOLYGON(((0 0,0 4,2 4,2 3,4 3,4 0,0 0)))",
"MULTIPOLYGON(((-1 -1,-1 8,2 8,2 7,2 3,4.0000005 2.9999995,4 7,4 8,8 8,8 -1,-1 -1)))"
};
static std::string case_precision_m2[2] =
{
"MULTIPOLYGON(((0 0,0 4,2 4,2 3,4 3,4 0,0 0)),((3 6,3 7.5,4.5 7.5,4.5 6,3 6)))",
"MULTIPOLYGON(((-1 -1,-1 8,8 8,8 -1,-1 -1),(2 7,2 3,4.0000005 2.9999995,4 7,2 7)))"
};
// Case, not literally on this list but derived, to mix polygon/multipolygon in call to difference
static std::string ggl_list_20111025_vd[4] =
{

View File

@ -700,6 +700,88 @@ static std::string dz_4[2] = {
"POLYGON((20.486696243286133 60.650150299072266,24.282432556152344 49.304500579833984,34.362251281738281 55.748767852783203,30.764263153076172 44.3388671875,42.706855773925781 43.627620697021484,33.089447021484375 36.511661529541016,42.333145141601563 28.916570663452148,30.369846343994141 28.81260871887207,33.383872985839844 17.234743118286133,23.644252777099609 24.182485580444336,19.277351379394531 13.044195175170898,15.48161506652832 24.389842987060547,5.40179443359375 17.945577621459961,8.9997835159301758 29.355476379394531,-2.9428071975708008 30.06672477722168,6.6745977401733398 37.182682037353516,-2.5690991878509521 44.777774810791016,9.394200325012207 44.881736755371094,6.3801741600036621 56.459602355957031,16.119794845581055 49.511859893798828,20.486696243286133 60.650150299072266))"
};
static std::string case_precision_1[2] =
{
"POLYGON((0 0,0 4,2 4,2 3,4 3,4 0,0 0))",
"POLYGON((2 7,4 7,4.000005 2.99999,2 3,2 7))"
};
static std::string case_precision_2[2] =
{
"POLYGON((0 0,0 4,2 4,2 3,4 3,4 0,0 0))",
"POLYGON((2 7,4 7,4 2.999995,2 3,2 7))"
};
static std::string case_precision_3[2] =
{
"POLYGON((0 0,0 4,2 4,2 3,4 3,4 0,0 0))",
"POLYGON((2 7,4 7,4.0000001 2.99999995,2 3,2 7))"
};
static std::string case_precision_4[2] =
{
"POLYGON((0 0,0 4,2 4,2 3,4 3,4 0,0 0))",
"POLYGON((2 7,4 7,4 3.00000001,2 3,2 7))"
};
static std::string case_precision_5[2] =
{
"POLYGON((0 0,0 4,2 4,2 3,4 3,4 0,0 0))",
"POLYGON((2 7,4 7,4 3,2.0000005 2.9999995,2 7))"
};
static std::string case_precision_6[2] =
{
"POLYGON((0 0,0 4,2 4,2 3,4 3,4 0,0 0))",
"POLYGON((-1 -1,-1 8,2 8,2 7,2 3,4.0000005 2.9999995,4 7,4 8,8 8,8 -1,-1 -1))"
};
static std::string case_precision_7[2] =
{
// Needs larger margin for sectionalize (long double only)
"POLYGON((0 0,0 4,2 4,2 3,4 3,4 0,0 0))",
"POLYGON((2 7,4 7,4 3.00000002,2 3,2 7))"
};
static std::string case_precision_8[2] =
{
"POLYGON((0 0,0 4,2 4,2 3,4 3,4 0,0 0))",
"POLYGON((-1 -1,-1 8,8 8,8 -1,-1 -1),(2 7,2 3,4.00000006 3.00000009,4 7,2 7))"
};
static std::string case_precision_9[2] =
{
"POLYGON((0 0,0 4,2 4,2 3,4 3,4 0,0 0))",
"POLYGON((-1 -1,-1 8,8 8,8 -1,-1 -1),(2 7,2 3,3.99999 2.999995,4 7,2 7))"
};
static std::string case_precision_10[2] =
{
// Needs 1.0e-5 for threshold in double
"POLYGON((0 0,0 4,2 4,2 3,4 3,4 0,0 0))",
"POLYGON((-1 -1,-1 8,8 8,8 -1,-1 -1),(2 7,2 3,4.000006 2.999991,4 7,2 7))"
};
static std::string case_precision_11[2] =
{
// Needs ~0.5 for threshold in side_by_generic_form
"POLYGON((0 0,0 4,2 4,2 3,4 3,4 0,0 0))",
"POLYGON((-1 -1,-1 8,8 8,8 -1,-1 -1),(2 7,2 3,4.00000000000000089 2.99999999999999201,4 7,2 7))"
};
static std::string case_precision_12[2] =
{
// Needs threshold for threshold a2
"POLYGON((0 0,0 4,2 4,2 3,4 3,4 0,0 0))",
"POLYGON((1 1,2.99999999999999731e-12 1.00000000001,2.99999999999999731e-12 3.00000000001,1 3,1 1))"
};
static std::string case_precision_13[2] =
{
// Needs threshold for threshold a2
"POLYGON((0 0,0 4,2 4,2 3,4 3,4 0,0 0))",
"POLYGON((1 1,9.99999999999999912e-06 1,9.99999999999999912e-06 3,1 3,1 1))"
};
// ticket_17 is keyholed, so has a hole formed by an deliberate intersection
// This will fail the intersection/traversal process

View File

@ -296,15 +296,17 @@ void test_all()
// Isovist - the # output polygons differ per compiler/pointtype, (very) small
// rings might be discarded. We check area only
// SQL Server gives: 0.279121891701124 and 224.889211358929
// PostGIS gives: 0.279121991127244 and 224.889205853156
// No robustness gives: 0.279121991127106 and 224.825363749290
test_one<polygon, polygon, polygon>("isovist",
isovist1[0], isovist1[1],
-1, -1, 0.279132,
-1, -1, 224.8892,
settings);
}
// SQL Server gives: 0.279121891701124 and 224.889211358929
// PostGIS gives: 0.279121991127244 and 224.889205853156
// No robustness gives: 0.279121991127106 and 224.825363749290
#ifdef BOOST_GEOMETRY_TEST_INCLUDE_FAILING_TESTS
test_one<polygon, polygon, polygon>("geos_1",

View File

@ -456,6 +456,11 @@ void test_areal()
TEST_DIFFERENCE(case_recursive_boxes_87, 4, 2.0, 4, 2.5, 8);
TEST_DIFFERENCE(case_recursive_boxes_88, 3, 4.75, 5, 6.75, 4);
// Output of A can be 0 or 1 polygons (with a very small area)
TEST_DIFFERENCE(case_precision_m1, -1, 0.0, 1, 57.0, -1);
// Output of A can be 1 or 2 polygons (one with a very small area)
TEST_DIFFERENCE(case_precision_m2, -1, 1.0, 1, 57.75, -1);
{
ut_settings sym_settings;
#if defined(BOOST_GEOMETRY_NO_ROBUSTNESS)

View File

@ -273,7 +273,15 @@ std::string test_difference(std::string const& caseid, G1 const& g1, G2 const& g
);
}
BOOST_CHECK_CLOSE(area, expected_area, settings.percentage);
if (expected_area > 0)
{
BOOST_CHECK_CLOSE(area, expected_area, settings.percentage);
}
else
{
// Compare 0 with 0 or a very small detected area
BOOST_CHECK_LE(area, settings.percentage);
}
#endif

View File

@ -46,6 +46,16 @@ BOOST_GEOMETRY_REGISTER_LINESTRING_TEMPLATED(std::vector)
(test_one<Polygon, Polygon, Polygon>) \
( #caseid, caseid[0], caseid[1], clips, points, area)
#define TEST_INTERSECTION_REV(caseid, clips, points, area) \
(test_one<Polygon, Polygon, Polygon>) \
( #caseid "_rev", caseid[1], caseid[0], clips, points, area)
#define TEST_INTERSECTION_WITH(caseid, index1, index2, \
clips, points, area, settings) \
(test_one<Polygon, Polygon, Polygon>) \
( #caseid #index1 "_" #index2, caseid[index1], caseid[index2], \
clips, points, area, settings)
#if defined(BOOST_GEOMETRY_NO_SELF_TURNS)
#define TEST_INTERSECTION_IGNORE(caseid, clips, points, area) \
{ ut_settings ignore_validity; ignore_validity.test_validity = false; \
@ -197,8 +207,7 @@ void test_areal()
// In most cases: 0 (no intersection)
// In some cases: 1.430511474609375e-05 (clang/gcc on Xubuntu using b2)
// In some cases: 5.6022983000000002e-05 (powerpc64le-gcc-6-0)
test_one<Polygon, Polygon, Polygon>("geos_2",
geos_2[0], geos_2[1],
test_one<Polygon, Polygon, Polygon>("geos_2", geos_2[0], geos_2[1],
0, 0, 6.0e-5, ut_settings(-1.0)); // -1 denotes: compare with <=
#if ! defined(BOOST_GEOMETRY_NO_ROBUSTNESS)
@ -276,12 +285,12 @@ void test_areal()
test_one<Polygon, Polygon, Polygon>("ticket_8652", ticket_8652[0], ticket_8652[1],
1, 4, 0.0003);
test_one<Polygon, Polygon, Polygon>("ticket_8310a", ticket_8310a[0], ticket_8310a[1],
1, 5, 0.3843747);
test_one<Polygon, Polygon, Polygon>("ticket_8310b", ticket_8310b[0], ticket_8310b[1],
1, 5, 0.3734379);
test_one<Polygon, Polygon, Polygon>("ticket_8310c", ticket_8310c[0], ticket_8310c[1],
1, 5, 0.4689541);
TEST_INTERSECTION(ticket_8310a, 1, 5, 0.3843747);
TEST_INTERSECTION(ticket_8310b, 1, 5, 0.3734379);
TEST_INTERSECTION(ticket_8310c, 1, 5, 0.4689541);
TEST_INTERSECTION_REV(ticket_8310a, 1, 5, 0.3843747);
TEST_INTERSECTION_REV(ticket_8310b, 1, 5, 0.3734379);
TEST_INTERSECTION_REV(ticket_8310c, 1, 5, 0.4689541);
test_one<Polygon, Polygon, Polygon>("ticket_9081_15",
ticket_9081_15[0], ticket_9081_15[1],
@ -296,7 +305,7 @@ void test_areal()
// mingw 5.6022954e-5
test_one<Polygon, Polygon, Polygon>("ticket_10108_b",
ticket_10108_b[0], ticket_10108_b[1],
0, 0, 5.6022983e-5);
0, 0, 5.6022983e-5, ut_settings(-1.0));
#endif
test_one<Polygon, Polygon, Polygon>("ticket_10747_a",
@ -355,6 +364,37 @@ void test_areal()
TEST_INTERSECTION(case_105, 1, 34, 76.0);
TEST_INTERSECTION(case_precision_1, 0, 0, 0.0);
TEST_INTERSECTION(case_precision_2, 0, 0, 0.0);
TEST_INTERSECTION(case_precision_3, 0, 0, 0.0);
TEST_INTERSECTION(case_precision_4, 0, 0, 0.0);
TEST_INTERSECTION(case_precision_5, 0, 0, 0.0);
TEST_INTERSECTION(case_precision_6, 1, -1, 14.0);
TEST_INTERSECTION(case_precision_7, 0, -1, 0.0);
TEST_INTERSECTION(case_precision_8, 1, -1, 14.0);
TEST_INTERSECTION(case_precision_9, 1, -1, 14.0);
TEST_INTERSECTION(case_precision_10, 1, -1, 14.0);
TEST_INTERSECTION(case_precision_11, 1, -1, 14.0);
TEST_INTERSECTION_REV(case_precision_1, 0, 0, 0.0);
TEST_INTERSECTION_REV(case_precision_2, 0, 0, 0.0);
TEST_INTERSECTION_REV(case_precision_3, 0, 0, 0.0);
TEST_INTERSECTION_REV(case_precision_4, 0, 0, 0.0);
TEST_INTERSECTION_REV(case_precision_5, 0, 0, 0.0);
TEST_INTERSECTION_REV(case_precision_6, 1, -1, 14.0);
TEST_INTERSECTION_REV(case_precision_7, 0, -1, 0.0);
TEST_INTERSECTION_REV(case_precision_8, 1, -1, 14.0);
TEST_INTERSECTION_REV(case_precision_9, 1, -1, 14.0);
TEST_INTERSECTION_REV(case_precision_10, 1, -1, 14.0);
TEST_INTERSECTION_REV(case_precision_11, 1, -1, 14.0);
{
ut_settings settings(0.01);
TEST_INTERSECTION_WITH(case_precision_12, 0, 1, 1, -1, 2.0, settings);
TEST_INTERSECTION_WITH(case_precision_13, 0, 1, 1, -1, 2.0, settings);
TEST_INTERSECTION_WITH(case_precision_12, 1, 0, 1, -1, 2.0, settings);
TEST_INTERSECTION_WITH(case_precision_13, 1, 0, 1, -1, 2.0, settings);
}
#ifndef BOOST_GEOMETRY_NO_SELF_TURNS
TEST_INTERSECTION(case_106, 2, -1, 3.5);
TEST_INTERSECTION(case_107, 3, -1, 3.0);
@ -890,7 +930,6 @@ int test_main(int, char* [])
test_all<bg::model::d2::point_xy<ttmath_big> >();
#endif
#endif
// Commented, because exception is now disabled:
// test_exception<bg::model::d2::point_xy<double> >();
@ -918,6 +957,7 @@ int test_main(int, char* [])
#if defined(BOOST_HAS_LONG_LONG)
test_ticket_10868<boost::long_long_type>("MULTIPOLYGON(((33520458 6878575,33480192 14931538,31446819 18947953,30772384 19615678,30101303 19612322,30114725 16928001,33520458 6878575)))");
#endif
#endif
#endif
return 0;

View File

@ -32,6 +32,10 @@
(test_one<Polygon, MultiPolygon, MultiPolygon>) \
( #caseid, caseid[0], caseid[1], clips, points, area)
#define TEST_INTERSECTION_REV(caseid, clips, points, area) \
(test_one<Polygon, MultiPolygon, MultiPolygon>) \
( #caseid "_rev", caseid[1], caseid[0], clips, points, area)
#define TEST_INTERSECTION_IGNORE(caseid, clips, points, area) \
{ ut_settings ignore_validity; ignore_validity.test_validity = false; \
(test_one<Polygon, MultiPolygon, MultiPolygon>) \
@ -368,6 +372,17 @@ void test_areal()
TEST_INTERSECTION(case_recursive_boxes_87, 0, -1, 0.0);
TEST_INTERSECTION(case_recursive_boxes_88, 4, -1, 3.5);
#ifndef BOOST_GEOMETRY_NO_ROBUSTNESS
TEST_INTERSECTION(case_precision_m1, 1, -1, 14.0);
TEST_INTERSECTION(case_precision_m2, 2, -1, 15.25);
TEST_INTERSECTION_REV(case_precision_m1, 1, -1, 14.0);
TEST_INTERSECTION_REV(case_precision_m2, 2, -1, 15.25);
#else
// Validity: false positives (very small triangles looking like a line)
TEST_INTERSECTION_IGNORE(case_precision_m1, 1, -1, 14.0);
TEST_INTERSECTION_IGNORE(case_precision_m2, 2, -1, 15.25);
#endif
test_one<Polygon, MultiPolygon, MultiPolygon>("ggl_list_20120915_h2_a",
ggl_list_20120915_h2[0], ggl_list_20120915_h2[1],
2, 10, 6.0); // Area from SQL Server

View File

@ -151,7 +151,15 @@ check_result(
double const detected_length_or_area = boost::numeric_cast<double>(length_or_area);
if (settings.percentage > 0.0)
{
BOOST_CHECK_CLOSE(detected_length_or_area, expected_length_or_area, settings.percentage);
if (expected_length_or_area > 0)
{
BOOST_CHECK_CLOSE(detected_length_or_area, expected_length_or_area, settings.percentage);
}
else
{
// Compare 0 with 0 or a very small detected area
BOOST_CHECK_LE(detected_length_or_area, settings.percentage);
}
}
else
{

View File

@ -26,6 +26,14 @@
#include <boost/geometry/geometries/point_xy.hpp>
#define TEST_UNION(caseid, clips, holes, points, area) \
(test_one<Polygon, Polygon, Polygon>) \
( #caseid, caseid[0], caseid[1], clips, holes, points, area)
#define TEST_UNION_REV(caseid, clips, holes, points, area) \
(test_one<Polygon, Polygon, Polygon>) \
( #caseid "_rev", caseid[1], caseid[0], clips, holes, points, area)
template <typename Ring, typename Polygon>
void test_areal()
@ -247,6 +255,34 @@ void test_areal()
test_one<Polygon, Polygon, Polygon>("108",
case_108[0], case_108[1], 1, 0, 13, 5.0);
TEST_UNION(case_precision_1, 1, 0, -1, 22.0);
TEST_UNION(case_precision_2, 1, 0, -1, 22.0);
TEST_UNION(case_precision_3, 1, 0, -1, 22.0);
TEST_UNION(case_precision_4, 1, 0, -1, 22.0);
TEST_UNION(case_precision_5, 1, 0, -1, 22.0);
TEST_UNION(case_precision_6, 1, 0, -1, 71.0);
TEST_UNION(case_precision_7, 1, 0, -1, 22.0);
TEST_UNION(case_precision_8, 1, 1, -1, 73.0);
TEST_UNION(case_precision_9, 1, 1, -1, 73.0);
TEST_UNION(case_precision_10, 1, 1, -1, 73.0);
TEST_UNION(case_precision_11, 1, 1, -1, 73.0);
TEST_UNION(case_precision_12, 1, 0, -1, 14.0);
TEST_UNION(case_precision_13, 1, 0, -1, 14.0);
TEST_UNION_REV(case_precision_1, 1, 0, -1, 22.0);
TEST_UNION_REV(case_precision_2, 1, 0, -1, 22.0);
TEST_UNION_REV(case_precision_3, 1, 0, -1, 22.0);
TEST_UNION_REV(case_precision_4, 1, 0, -1, 22.0);
TEST_UNION_REV(case_precision_5, 1, 0, -1, 22.0);
TEST_UNION_REV(case_precision_6, 1, 0, -1, 71.0);
TEST_UNION_REV(case_precision_7, 1, 0, -1, 22.0);
TEST_UNION_REV(case_precision_8, 1, 1, -1, 73.0);
TEST_UNION_REV(case_precision_9, 1, 1, -1, 73.0);
TEST_UNION_REV(case_precision_10, 1, 1, -1, 73.0);
TEST_UNION_REV(case_precision_11, 1, 1, -1, 73.0);
TEST_UNION_REV(case_precision_12, 1, 0, -1, 14.0);
TEST_UNION_REV(case_precision_13, 1, 0, -1, 14.0);
/*
test_one<Polygon, Polygon, Polygon>(102,
simplex_normal[0], simplex_reversed[1],
@ -342,22 +378,23 @@ void test_areal()
ticket_5103[0], ticket_5103[1],
1, 0, 25, 2515271327070.5);
test_one<Polygon, Polygon, Polygon>("ticket_8310a", ticket_8310a[0], ticket_8310a[1],
1, 0, 5, 10.5000019595);
test_one<Polygon, Polygon, Polygon>("ticket_8310b", ticket_8310b[0], ticket_8310b[1],
1, 0, 5, 10.5000019595);
test_one<Polygon, Polygon, Polygon>("ticket_8310c", ticket_8310c[0], ticket_8310c[1],
1, 0, 5, 10.5000019595);
TEST_UNION(ticket_8310a, 1, 0, 5, 10.5000019595);
TEST_UNION(ticket_8310b, 1, 0, 5, 10.5000019595);
TEST_UNION(ticket_8310c, 1, 0, 5, 10.5000019595);
TEST_UNION_REV(ticket_8310a, 1, 0, 5, 10.5000019595);
TEST_UNION_REV(ticket_8310b, 1, 0, 5, 10.5000019595);
TEST_UNION_REV(ticket_8310c, 1, 0, 5, 10.5000019595);
test_one<Polygon, Polygon, Polygon>("ticket_9081_15",
ticket_9081_15[0], ticket_9081_15[1],
1, 0, 10, 0.0403425433);
1, 0, -1, 0.0403425433);
test_one<Polygon, Polygon, Polygon>("ticket_9563", ticket_9563[0], ticket_9563[1],
1, 0, 13, 150.0);
// Float result is OK but a bit larger
test_one<Polygon, Polygon, Polygon>("ticket_9756", ticket_9756[0], ticket_9756[1],
1, 0, 10, 1289.08374);
1, 0, 10, if_typed<ct, float>(1291.5469, 1289.08374));
#if defined(BOOST_GEOMETRY_NO_ROBUSTNESS)
test_one<Polygon, Polygon, Polygon>("ticket_10108_a", ticket_10108_a[0], ticket_10108_a[1],
@ -373,7 +410,7 @@ void test_areal()
#endif
test_one<Polygon, Polygon, Polygon>("ticket_10866", ticket_10866[0], ticket_10866[1],
1, 0, 14, 332760303.5);
1, 0, 14, if_typed<ct, float>(332752493.0, 332760303.5));
test_one<Polygon, Polygon, Polygon>("ticket_11725", ticket_11725[0], ticket_11725[1],
1, 1, 10, 7.5);
@ -398,17 +435,17 @@ void test_areal()
// Robustness issues, followed out buffer-robustness-tests, test them also reverse
#if ! defined(BOOST_GEOMETRY_NO_ROBUSTNESS)
test_one<Polygon, Polygon, Polygon>("buffer_rt_f", buffer_rt_f[0], buffer_rt_f[1],
1, 0, 15, 4.60853);
1, 0, -1, 4.60853);
test_one<Polygon, Polygon, Polygon>("buffer_rt_f_rev", buffer_rt_f[1], buffer_rt_f[0],
1, 0, 15, 4.60853);
1, 0, -1, 4.60853);
test_one<Polygon, Polygon, Polygon>("buffer_rt_g", buffer_rt_g[0], buffer_rt_g[1],
1, 0, if_typed<ct, float>(16, 11), 16.571);
1, 0, -1, 16.571);
test_one<Polygon, Polygon, Polygon>("buffer_rt_g_rev", buffer_rt_g[1], buffer_rt_g[0],
1, 0, if_typed<ct, float>(16, 11), 16.571);
1, 0, -1, 16.571);
test_one<Polygon, Polygon, Polygon>("buffer_rt_i", buffer_rt_i[0], buffer_rt_i[1],
1, 0, if_typed<ct, float>(11, 13), 13.6569);
1, 0, -1, 13.6569);
test_one<Polygon, Polygon, Polygon>("buffer_rt_i_rev", buffer_rt_i[1], buffer_rt_i[0],
1, 0, 13, 13.6569);
1, 0, -1, 13.6569);
#endif
test_one<Polygon, Polygon, Polygon>("buffer_rt_j", buffer_rt_j[0], buffer_rt_j[1],
@ -429,23 +466,23 @@ void test_areal()
1, 0, 9, 19.4852);
test_one<Polygon, Polygon, Polygon>("buffer_rt_m2", buffer_rt_m2[0], buffer_rt_m2[1],
1, 0, 12, 21.4853);
1, 0, -1, 21.4853);
test_one<Polygon, Polygon, Polygon>("buffer_rt_m2_rev", buffer_rt_m2[1], buffer_rt_m2[0],
1, 0, 15, 21.4853);
#if ! defined(BOOST_GEOMETRY_NO_ROBUSTNESS)
test_one<Polygon, Polygon, Polygon>("buffer_rt_q", buffer_rt_q[0], buffer_rt_q[1],
1, 0, if_typed<ct, float>(16, 12), 18.5710);
1, 0, -1, 18.5710);
test_one<Polygon, Polygon, Polygon>("buffer_rt_q_rev", buffer_rt_q[1], buffer_rt_q[0],
1, 0, if_typed<ct, float>(16, 12), 18.5710);
1, 0, -1, 18.5710);
test_one<Polygon, Polygon, Polygon>("buffer_rt_r", buffer_rt_r[0], buffer_rt_r[1],
1, 0, if_typed<ct, float>(18, 14), 21.07612);
1, 0, -1, 21.07612);
test_one<Polygon, Polygon, Polygon>("buffer_rt_r_rev", buffer_rt_r[1], buffer_rt_r[0],
1, 0, if_typed<ct, float>(18, 14), 21.07612);
1, 0, -1, 21.07612);
test_one<Polygon, Polygon, Polygon>("buffer_rt_t", buffer_rt_t[0], buffer_rt_t[1],
1, 0, 9, 15.6569);
1, 0, -1, 15.6569);
test_one<Polygon, Polygon, Polygon>("buffer_rt_t_rev", buffer_rt_t[1], buffer_rt_t[0],
1, 0, 10, 15.6569);
1, 0, -1, 15.6569);
#endif
test_one<Polygon, Polygon, Polygon>("buffer_mp1", buffer_mp1[0], buffer_mp1[1],