15 #include "CUnit/Basic.h"
30 CU_ASSERT_STRING_EQUAL(
"CIRCULARSTRING(-5 0,0 5,5 0,10 -5,15 0)",wkt_out);
35 geom =
lwgeom_from_wkt(
"GEOMETRYCOLLECTION(POINT(0 0 0),LINESTRING(1 1 1,2 2 2),POLYGON((0 0 1,0 1 1,1 1 1,1 0 1,0 0 1)),CURVEPOLYGON(CIRCULARSTRING(0 0 0,1 1 1,2 2 2,1 1 1,0 0 0)))",
LW_PARSER_CHECK_NONE);
38 CU_ASSERT_STRING_EQUAL(
"GEOMETRYCOLLECTION(POINT(0 0),LINESTRING(1 1,2 2),POLYGON((0 0,0 1,1 1,1 0,0 0)),CURVEPOLYGON(CIRCULARSTRING(0 0,1 1,2 2,1 1,0 0)))",wkt_out);
53 CU_ASSERT_STRING_EQUAL(
"LINESTRING(0 0,0 51,50 20,30 20,7 32)",wkt_out);
61 CU_ASSERT_STRING_EQUAL(
"MULTILINESTRING((0 0,0 51,50 20,30 20,7 32))",wkt_out);
72 geom =
lwgeom_from_wkt(
"GEOMETRYCOLLECTION(POINT(0 0),LINESTRING(0 0,1 1),POLYGON((0 0,0 1,1 0,0 0)),CIRCULARSTRING(0 0,0 1,1 1),CURVEPOLYGON(CIRCULARSTRING(0 0,0 1,1 1)))",
LW_PARSER_CHECK_NONE);
74 CU_ASSERT_EQUAL(
count,13);
79 CU_ASSERT_EQUAL(
count,9);
84 CU_ASSERT_EQUAL(
count,9);
90 CU_ASSERT_EQUAL(
count,4);
95 CU_ASSERT_EQUAL(
count,9);
106 CU_ASSERT_DOUBLE_EQUAL(
area, 0.0, 0.0001);
112 static char *wkb =
"010A0000000200000001080000000700000000000000000000C00000000000000000000000000000F0BF000000000000F0BF00000000000000000000000000000000000000000000F03F000000000000F0BF000000000000004000000000000000000000000000000000000000000000004000000000000000C00000000000000000010200000005000000000000000000F0BF00000000000000000000000000000000000000000000E03F000000000000F03F00000000000000000000000000000000000000000000F03F000000000000F0BF0000000000000000";
115 CU_ASSERT_STRING_EQUAL(str,
"CURVEPOLYGON(CIRCULARSTRING(-2 0,-1 -1,0 0,1 -1,2 0,0 2,-2 0),(-1 0,0 0.5,1 0,0 1,-1 0))");
125 static char *wkt =
"MULTIPOLYGON(((0 0, 10 0, 10 10, 0 10, 0 0)))";
135 CU_ASSERT_STRING_EQUAL(str,
"MULTIPOLYGON EMPTY");
141 static void do_grid_test(
const char *wkt_in,
const char *wkt_out,
double size)
143 char *wkt_result, *wkt_norm;
153 CU_ASSERT_STRING_EQUAL(wkt_result, wkt_norm);
163 "POINT ZM (5.1423999999 5.1423999999 5.1423999999 5.1423999999)",
164 "POINT(5.1424 5.1424 5.1424 5.1424)",
168 "MULTIPOLYGON(((0 0,10 0,10 10,0 10,0 0)))",
169 "MULTIPOLYGON EMPTY",
173 "MULTIPOLYGON(((0 0,10 0,10 10,0 10,0 0)))",
174 "MULTIPOLYGON(((0 0,10 0,10 10, 0 10,0 0)))",
178 "LINESTRING(0 0,1 1, 2 2, 3 3, 4 4, 5 5)",
179 "LINESTRING(0 0,2 2,4 4)",
183 "MULTIPOINT(0 0,1 1, 2 2, 3 3, 4 4, 5 5)",
185 "MULTIPOINT(0 0,0 0,2 2,4 4,4 4,4 4)",
189 "MULTIPOLYGON(((0 0,10 0,10 10,0 10,0 0),(4 4, 4 5, 5 5, 5 4, 4 4)))",
190 "MULTIPOLYGON(((0 0,10 0,10 10, 0 10,0 0)))",
194 "MULTIPOLYGON(((0 0,10 0,10 10,0 10,0 0),(4 4, 4 5, 5 5, 5 4, 4 4)))",
195 "MULTIPOLYGON EMPTY",
207 static char *wkt =
"GEOMETRYCOLLECTION(MULTIPOLYGON(((0 0, 10 0, 10 10, 0 10, 0 0))),POINT(1 1),LINESTRING(2 3,4 5))";
228 do_fn_test(to_points,
"MULTIPOLYGON (EMPTY)",
"MULTIPOINT EMPTY");
229 do_fn_test(to_points,
"POINT (30 10)",
"MULTIPOINT ((30 10))");
230 do_fn_test(to_points,
"LINESTRING Z (30 10 4,10 30 5,40 40 6)",
"MULTIPOINT Z (30 10 4,10 30 5, 40 40 6)");
231 do_fn_test(to_points,
"POLYGON((35 10,45 45,15 40,10 20,35 10),(20 30,35 35,30 20,20 30))",
"MULTIPOINT(35 10,45 45,15 40,10 20,35 10,20 30,35 35,30 20,20 30)");
232 do_fn_test(to_points,
"MULTIPOINT M (10 40 1,40 30 2,20 20 3,30 10 4)",
"MULTIPOINT M (10 40 1,40 30 2,20 20 3,30 10 4)");
233 do_fn_test(to_points,
"COMPOUNDCURVE(CIRCULARSTRING(0 0,2 0, 2 1, 2 3, 4 3),(4 3, 4 5, 1 4, 0 0))",
"MULTIPOINT(0 0, 2 0, 2 1, 2 3, 4 3, 4 3, 4 5, 1 4, 0 0)");
234 do_fn_test(to_points,
"TIN(((80 130,50 160,80 70,80 130)),((50 160,10 190,10 70,50 160)))",
"MULTIPOINT (80 130, 50 160, 80 70, 80 130, 50 160, 10 190, 10 70, 50 160)");
243 CU_pSuite suite = CU_add_suite(
"miscellaneous", NULL, NULL);
static void test_misc_force_2d(void)
static void test_lwmpoint_from_lwgeom(void)
static void test_clone(void)
static void test_misc_area(void)
void misc_suite_setup(void)
static void do_grid_test(const char *wkt_in, const char *wkt_out, double size)
static void test_misc_simplify(void)
static void test_grid_in_place(void)
static void test_misc_wkb(void)
static void test_misc_count_vertices(void)
static void test_grid(void)
void do_fn_test(LWGEOM *(*transfn)(LWGEOM *), char *input_wkt, char *expected_wkt)
#define PG_ADD_TEST(suite, testfunc)
#define LW_PARSER_CHECK_ALL
LWGEOM * lwgeom_simplify(const LWGEOM *igeom, double dist, int preserve_collapsed)
LWGEOM * lwgeom_from_hexwkb(const char *hexwkb, const char check)
void lwgeom_free(LWGEOM *geom)
#define LW_PARSER_CHECK_NONE
char * lwgeom_to_ewkt(const LWGEOM *lwgeom)
Return an alloced string.
double lwgeom_area(const LWGEOM *geom)
uint32_t lwgeom_count_vertices(const LWGEOM *geom)
Count the total number of vertices in any LWGEOM.
char * lwgeom_to_wkt(const LWGEOM *geom, uint8_t variant, int precision, size_t *size_out)
WKT emitter function.
LWGEOM * lwgeom_clone(const LWGEOM *lwgeom)
Clone LWGEOM object.
LWGEOM * lwgeom_from_wkt(const char *wkt, const char check)
LWMPOINT * lwmpoint_from_lwgeom(const LWGEOM *g)
LWGEOM * lwgeom_force_2d(const LWGEOM *geom)
Strip out the Z/M components of an LWGEOM.
LWGEOM * lwgeom_grid(const LWGEOM *lwgeom, const gridspec *grid)
void lwgeom_grid_in_place(LWGEOM *lwgeom, const gridspec *grid)
Datum area(PG_FUNCTION_ARGS)