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);
69 CU_ASSERT_STRING_EQUAL(
"POLYGON((0 0,0 4,-2 3,0 0))", wkt_out);
80 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);
82 CU_ASSERT_EQUAL(
count,13);
87 CU_ASSERT_EQUAL(
count,9);
92 CU_ASSERT_EQUAL(
count,9);
98 CU_ASSERT_EQUAL(
count,4);
103 CU_ASSERT_EQUAL(
count,9);
114 CU_ASSERT_DOUBLE_EQUAL(area, 0.0, 0.0001);
120 static char *wkb =
"010A0000000200000001080000000700000000000000000000C00000000000000000000000000000F0BF000000000000F0BF00000000000000000000000000000000000000000000F03F000000000000F0BF000000000000004000000000000000000000000000000000000000000000004000000000000000C00000000000000000010200000005000000000000000000F0BF00000000000000000000000000000000000000000000E03F000000000000F03F00000000000000000000000000000000000000000000F03F000000000000F0BF0000000000000000";
123 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))");
133 static char *wkt =
"MULTIPOLYGON(((0 0, 10 0, 10 10, 0 10, 0 0)))";
143 CU_ASSERT_STRING_EQUAL(
str,
"MULTIPOLYGON EMPTY");
149 static void do_grid_test(
const char *wkt_in,
const char *wkt_out,
double size)
151 char *wkt_result, *wkt_norm;
161 CU_ASSERT_STRING_EQUAL(wkt_result, wkt_norm);
171 "POINT ZM (5.1423999999 5.1423999999 5.1423999999 5.1423999999)",
172 "POINT(5.1424 5.1424 5.1424 5.1424)",
176 "MULTIPOLYGON(((0 0,10 0,10 10,0 10,0 0)))",
177 "MULTIPOLYGON EMPTY",
181 "MULTIPOLYGON(((0 0,10 0,10 10,0 10,0 0)))",
182 "MULTIPOLYGON(((0 0,10 0,10 10, 0 10,0 0)))",
186 "LINESTRING(0 0,1 1, 2 2, 3 3, 4 4, 5 5)",
187 "LINESTRING(0 0,2 2,4 4)",
191 "MULTIPOINT(0 0,1 1, 2 2, 3 3, 4 4, 5 5)",
193 "MULTIPOINT(0 0,0 0,2 2,4 4,4 4,4 4)",
197 "MULTIPOLYGON(((0 0,10 0,10 10,0 10,0 0),(4 4, 4 5, 5 5, 5 4, 4 4)))",
198 "MULTIPOLYGON(((0 0,10 0,10 10, 0 10,0 0)))",
202 "MULTIPOLYGON(((0 0,10 0,10 10,0 10,0 0),(4 4, 4 5, 5 5, 5 4, 4 4)))",
203 "MULTIPOLYGON EMPTY",
215 static char *wkt =
"GEOMETRYCOLLECTION(MULTIPOLYGON(((0 0, 10 0, 10 10, 0 10, 0 0))),POINT(1 1),LINESTRING(2 3,4 5))";
236 do_fn_test(to_points,
"MULTIPOLYGON (EMPTY)",
"MULTIPOINT EMPTY");
237 do_fn_test(to_points,
"POINT (30 10)",
"MULTIPOINT ((30 10))");
238 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)");
239 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)");
240 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)");
241 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)");
242 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)");
267 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_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_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)
LWGEOM * lwgeom_force_2d(const LWGEOM *geom)
Strip out the Z/M components of an LWGEOM.
void lwgeom_grid_in_place(LWGEOM *lwgeom, const gridspec *grid)