15 #include "CUnit/Basic.h"
55 static void cu_twkb(
char *wkt, int8_t prec_xy, int8_t prec_z, int8_t prec_m, uint8_t
variant)
58 if ( ! g )
lwnotice(
"input wkt is invalid: %s", wkt);
70 static void cu_twkb_idlist(
char *wkt, int64_t *idlist, int8_t prec_xy, int8_t prec_z, int8_t prec_m, uint8_t
variant)
74 if ( ! g )
lwnotice(
"input wkt is invalid: %s", wkt);
91 cu_twkb(
"POINT EMPTY", 0, 0, 0, 0);
92 CU_ASSERT_STRING_EQUAL(
s,
"0110");
94 cu_twkb(
"POINT(0 0)", 0, 0, 0, 0);
95 CU_ASSERT_STRING_EQUAL(
s,
"01000000");
97 cu_twkb(
"POINT(0 0 0 0)", 0, 0, 0, 0);
98 CU_ASSERT_STRING_EQUAL(
s,
"01080300000000");
102 CU_ASSERT_STRING_EQUAL(
s,
"0101000000000000");
107 CU_ASSERT_STRING_EQUAL(
s,
"0102020000");
111 CU_ASSERT_STRING_EQUAL(
s,
"010A0203000000");
115 CU_ASSERT_STRING_EQUAL(
s,
"010A030400000000");
118 cu_twkb(
"POINTZ(1 1 1)", 0,1,2, 0);
119 CU_ASSERT_STRING_EQUAL(
s,
"010845020214");
122 cu_twkb(
"POINTM(1 1 1)", 0,1,2, 0);
124 CU_ASSERT_STRING_EQUAL(
s,
"0108460202C801");
130 cu_twkb(
"LINESTRING(0 0,1 1)", 0, 0, 0, 0);
131 CU_ASSERT_STRING_EQUAL(
s,
"02000200000202");
134 cu_twkb(
"LINESTRING(0 0 1,1 1 2,2 2 3)", 0, 0, 0, 0);
135 CU_ASSERT_STRING_EQUAL(
s,
"02080103000002020202020202");
140 CU_ASSERT_STRING_EQUAL(
s,
"02010004000403000002020202");
143 cu_twkb(
"LINESTRING EMPTY", 0, 0, 0, 0);
144 CU_ASSERT_STRING_EQUAL(
s,
"0210");
150 cu_twkb(
"SRID=4;POLYGON((0 0 0, 0 1 0,1 1 0,1 0 0, 0 0 0))", 0, 0, 0, 0);
151 CU_ASSERT_STRING_EQUAL(
s,
"0308010105000000000200020000000100010000");
154 cu_twkb(
"SRID=14;POLYGON((0 0 0 1, 0 1 0 2,1 1 0 3,1 0 0 4, 0 0 0 5))", 0, 0, 0, 0);
155 CU_ASSERT_STRING_EQUAL(
s,
"03080301050000000200020002020000020001000201000002");
158 cu_twkb(
"POLYGON EMPTY", 0, 0, 0, 0);
159 CU_ASSERT_STRING_EQUAL(
s,
"0310");
165 cu_twkb(
"MULTIPOINT(0 0 0, 0 1 0,1 1 0,1 0 0, 0 0 0)", 0, 0, 0, 0);
166 CU_ASSERT_STRING_EQUAL(
s,
"04080105000000000200020000000100010000");
168 cu_twkb(
"MULTIPOINT(0 0 0, 0.26794919243112270647255365849413 1 3)",7 ,7 , 0, 0);
170 CU_ASSERT_STRING_EQUAL(
s,
"E4081D02000000888BC70280DAC409808ECE1C");
178 cu_twkb(
"MULTIPOLYGON(((0 0 0, 0 1 0,1 1 0,1 0 0, 0 0 0)),((-1 -1 0,-1 2 0,2 2 0,2 -1 0,-1 -1 0),(0 0 0, 0 1 0,1 1 0,1 0 0, 0 0 0)))", 0, 0, 0, 0);
179 CU_ASSERT_STRING_EQUAL(
s,
"060801020105000000000200020000000100010000020501010000060006000000050005000005020200000200020000000100010000");
184 cu_twkb(
"GEOMETRYCOLLECTION(LINESTRING(1 1, 2 2), LINESTRING(3 3, 4 4), LINESTRING(5 5, 6 6))", 0, 0, 0, 0);
186 CU_ASSERT_STRING_EQUAL(
s,
"07000302000202020202020002060602020200020A0A0202");
188 cu_twkb(
"GEOMETRYCOLLECTION(POLYGON((0 0 0, 0 1 0,1 1 0,1 0 0, 0 0 0)),POINT(1 1 1))", 0, 0, 0, 0);
190 CU_ASSERT_STRING_EQUAL(
s,
"070801020308010105000000000200020000000100010000010801020202");
192 cu_twkb(
"GEOMETRYCOLLECTION EMPTY", 0, 0, 0, 0);
193 CU_ASSERT_STRING_EQUAL(
s,
"0710");
205 CU_ASSERT_STRING_EQUAL(
s,
"040402040802020101");
206 CU_ASSERT_STRING_EQUAL(
w,
"MULTIPOINT(1 1,0 0)");
221 CU_ASSERT_STRING_EQUAL(
s,
"04060702040802020101");
222 CU_ASSERT_STRING_EQUAL(
w,
"MULTIPOINT(1 1,0 0)");
238 CU_ASSERT_STRING_EQUAL(
s,
"04070B0002000202040802020101");
239 CU_ASSERT_STRING_EQUAL(
w,
"MULTIPOINT(1 1,0 0)");
250 cu_twkb_idlist(
"GEOMETRYCOLLECTION(POINT(1 1),POINT(0 0))",idlist, 0, 0, 0, 0);
252 CU_ASSERT_STRING_EQUAL(
s,
"07040204080100020201000000");
253 CU_ASSERT_STRING_EQUAL(
w,
"GEOMETRYCOLLECTION(POINT(1 1),POINT(0 0))");
267 CU_ASSERT_STRING_EQUAL(
s,
"07060D02040801020202020102020000");
268 CU_ASSERT_STRING_EQUAL(
w,
"GEOMETRYCOLLECTION(POINT(1 1),POINT(0 0))");
static void cu_twkb_idlist(char *wkt, int64_t *idlist, int8_t prec_xy, int8_t prec_z, int8_t prec_m, uint8_t variant)
static void test_twkb_out_polygon(void)
static void cu_twkb(char *wkt, int8_t prec_xy, int8_t prec_z, int8_t prec_m, uint8_t variant)
static int init_twkb_out_suite(void)
static void test_twkb_out_multipolygon(void)
static void test_twkb_out_multipoint(void)
void twkb_out_suite_setup(void)
static void test_twkb_out_point(void)
static void test_twkb_out_multilinestring(void)
static void test_twkb_out_idlist(void)
static void test_twkb_out_linestring(void)
static int clean_twkb_out_suite(void)
static void test_twkb_out_collection(void)
#define PG_ADD_TEST(suite, testfunc)
void lwgeom_free(LWGEOM *geom)
char * hexbytes_from_bytes(const uint8_t *bytes, size_t size)
#define LW_PARSER_CHECK_NONE
LWGEOM * lwgeom_from_twkb(const uint8_t *twkb, size_t twkb_size, char check)
WKB inputs must have a declared size, to prevent malformed WKB from reading off the end of the memory...
#define LWSIZE_GET(varsize)
Macro for reading the size from the GSERIALIZED size attribute.
lwvarlena_t * lwgeom_to_twkb(const LWGEOM *geom, uint8_t variant, int8_t precision_xy, int8_t precision_z, int8_t precision_m)
char * lwgeom_to_ewkt(const LWGEOM *lwgeom)
Return an alloced string.
LWGEOM * lwgeom_from_wkt(const char *wkt, const char check)
lwvarlena_t * lwgeom_to_twkb_with_idlist(const LWGEOM *geom, int64_t *idlist, uint8_t variant, int8_t precision_xy, int8_t precision_z, int8_t precision_m)
Convert LWGEOM to a char* in TWKB format.
void lwnotice(const char *fmt,...)
Write a notice out to the notice handler.