15 #include "CUnit/Basic.h"
30 CU_ASSERT_STRING_EQUAL(
"LINESTRING(0 0,0 51,50 20,30 20,7 32)",wkt_out);
38 CU_ASSERT_STRING_EQUAL(
"MULTILINESTRING((0 0,0 51,50 20,30 20,7 32))",wkt_out);
46 CU_ASSERT_STRING_EQUAL(
"POLYGON((0 0,0 4,-2 3,0 0))", wkt_out);
57 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);
59 CU_ASSERT_EQUAL(
count,13);
64 CU_ASSERT_EQUAL(
count,9);
69 CU_ASSERT_EQUAL(
count,9);
75 CU_ASSERT_EQUAL(
count,4);
80 CU_ASSERT_EQUAL(
count,9);
91 CU_ASSERT_DOUBLE_EQUAL(area, 0.0, 0.0001);
97 static char *wkb =
"010A0000000200000001080000000700000000000000000000C00000000000000000000000000000F0BF000000000000F0BF00000000000000000000000000000000000000000000F03F000000000000F0BF000000000000004000000000000000000000000000000000000000000000004000000000000000C00000000000000000010200000005000000000000000000F0BF00000000000000000000000000000000000000000000E03F000000000000F03F00000000000000000000000000000000000000000000F03F000000000000F0BF0000000000000000";
100 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))");
110 static char *wkt =
"MULTIPOLYGON(((0 0, 10 0, 10 10, 0 10, 0 0)))";
120 CU_ASSERT_STRING_EQUAL(
str,
"MULTIPOLYGON EMPTY");
126 static void do_grid_test(
const char *wkt_in,
const char *wkt_out,
double size)
128 char *wkt_result, *wkt_norm;
138 CU_ASSERT_STRING_EQUAL(wkt_result, wkt_norm);
148 "POINT ZM (5.1423999999 5.1423999999 5.1423999999 5.1423999999)",
149 "POINT(5.1424 5.1424 5.1424 5.1424)",
153 "MULTIPOLYGON(((0 0,10 0,10 10,0 10,0 0)))",
154 "MULTIPOLYGON EMPTY",
158 "MULTIPOLYGON(((0 0,10 0,10 10,0 10,0 0)))",
159 "MULTIPOLYGON(((0 0,10 0,10 10, 0 10,0 0)))",
163 "LINESTRING(0 0,1 1, 2 2, 3 3, 4 4, 5 5)",
164 "LINESTRING(0 0,2 2,4 4)",
168 "MULTIPOINT(0 0,1 1, 2 2, 3 3, 4 4, 5 5)",
170 "MULTIPOINT(0 0,0 0,2 2,4 4,4 4,4 4)",
174 "MULTIPOLYGON(((0 0,10 0,10 10,0 10,0 0),(4 4, 4 5, 5 5, 5 4, 4 4)))",
175 "MULTIPOLYGON(((0 0,10 0,10 10, 0 10,0 0)))",
179 "MULTIPOLYGON(((0 0,10 0,10 10,0 10,0 0),(4 4, 4 5, 5 5, 5 4, 4 4)))",
180 "MULTIPOLYGON EMPTY",
192 static char *wkt =
"GEOMETRYCOLLECTION(MULTIPOLYGON(((0 0, 10 0, 10 10, 0 10, 0 0))),POINT(1 1),LINESTRING(2 3,4 5))";
213 do_fn_test(to_points,
"MULTIPOLYGON (EMPTY)",
"MULTIPOINT EMPTY");
214 do_fn_test(to_points,
"POINT (30 10)",
"MULTIPOINT ((30 10))");
215 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)");
216 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)");
217 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)");
218 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)");
219 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)");
244 CU_pSuite suite = CU_add_suite(
"miscellaneous", NULL, NULL);
size_t gbox_serialized_size(lwflags_t flags)
Return the number of bytes necessary to hold a GBOX of this dimension in serialized form.
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_gbox_serialized_size(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)
Simplification.
LWGEOM * lwgeom_from_hexwkb(const char *hexwkb, const char check)
void lwgeom_free(LWGEOM *geom)
#define LW_PARSER_CHECK_NONE
#define FLAGS_SET_BBOX(flags, value)
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)
#define FLAGS_SET_GEODETIC(flags, value)
lwflags_t lwflags(int hasz, int hasm, int geodetic)
Construct a new flags bitmask.
#define FLAGS_SET_M(flags, value)
#define FLAGS_SET_Z(flags, value)
LWGEOM * lwgeom_grid(const LWGEOM *lwgeom, const gridspec *grid)
void lwgeom_grid_in_place(LWGEOM *lwgeom, const gridspec *grid)