PostGIS  3.4.0dev-r@@SVN_REVISION@@
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Macros Pages

◆ test_lwgeom_remove_repeated_points()

static void test_lwgeom_remove_repeated_points ( void  )
static

Definition at line 1163 of file cu_algorithm.c.

1164 {
1165  LWGEOM *g, *gn;
1166  char *ewkt;
1167  char *ewkt_exp;
1168  int modified = LW_FALSE;
1169 
1170  g = lwgeom_from_wkt("LINESTRING(0 0,1 1,1 1,1 1,1.707 1.707)", LW_PARSER_CHECK_NONE);
1171  modified = lwgeom_remove_repeated_points_in_place(g, 0.001);
1172  ASSERT_INT_EQUAL(modified, LW_TRUE);
1173  ewkt = lwgeom_to_ewkt(g);
1174  ASSERT_STRING_EQUAL(ewkt, "LINESTRING(0 0,1 1,1.707 1.707)");
1175  lwgeom_free(g);
1176  lwfree(ewkt);
1177 
1178  g = lwgeom_from_wkt("MULTIPOINT(0 0, 10 0, 10 10, 10 10, 0 10, 0 10, 0 10, 0 0, 0 0, 0 0, 5 5, 0 0, 5 5)", LW_PARSER_CHECK_NONE);
1179  modified = lwgeom_remove_repeated_points_in_place(g, 1);
1180  ASSERT_INT_EQUAL(modified, LW_TRUE);
1181  gn = lwgeom_normalize(g);
1182  ewkt = lwgeom_to_ewkt(gn);
1183  ASSERT_STRING_EQUAL(ewkt, "MULTIPOINT(10 10,10 0,5 5,0 10,0 0)");
1184  lwgeom_free(g);
1185  lwgeom_free(gn);
1186  lwfree(ewkt);
1187 
1188  g = lwgeom_from_wkt("LINESTRING(1612830.15445 4841287.12672,1612830.15824 4841287.12674,1612829.98813 4841274.56198)", LW_PARSER_CHECK_NONE);
1189  modified = lwgeom_remove_repeated_points_in_place(g, 0.01);
1190  ASSERT_INT_EQUAL(modified, LW_TRUE);
1191  ewkt = lwgeom_to_ewkt(g);
1192  ASSERT_STRING_EQUAL(ewkt, "LINESTRING(1612830.15445 4841287.12672,1612829.98813 4841274.56198)");
1193  lwgeom_free(g);
1194  lwfree(ewkt);
1195 
1196  /* remove points */
1197  g = lwgeom_from_wkt("MULTIPOINT(0 0,10 0,10 10,10 10,0 10,0 10,0 10,0 0,0 0,0 0,5 5,5 5,5 8,8 8,8 8,8 8,8 5,8 5,5 5,5 5,5 5,5 5,5 5,50 50,50 50,50 50,50 60,50 60,50 60,60 60,60 50,60 50,50 50,55 55,55 58,58 58,58 55,58 55,55 55)", LW_PARSER_CHECK_NONE);
1198  modified = lwgeom_remove_repeated_points_in_place(g, 1);
1199  ASSERT_INT_EQUAL(modified, LW_TRUE);
1200  gn = lwgeom_normalize(g);
1201  ewkt = lwgeom_to_ewkt(gn);
1202  lwgeom_free(g);
1203  lwgeom_free(gn);
1204  /* build expected and normalize */
1205  g = lwgeom_from_wkt("MULTIPOINT(0 0,0 10,5 5,5 8,8 5,8 8,10 0,10 10,50 50,50 60,55 55,55 58,58 55,58 58,60 50,60 60)", LW_PARSER_CHECK_NONE);
1206  gn = lwgeom_normalize(g);
1207  ewkt_exp = lwgeom_to_ewkt(gn);
1208  ASSERT_STRING_EQUAL(ewkt, ewkt_exp);
1209  lwgeom_free(g);
1210  lwgeom_free(gn);
1211  lwfree(ewkt);
1212  lwfree(ewkt_exp);
1213 
1214  g = lwgeom_from_wkt("POLYGON((0 0, 0 1, 1 1, 1 0, 0 0))", LW_PARSER_CHECK_NONE);
1215  modified = lwgeom_remove_repeated_points_in_place(g, 10000);
1216  ASSERT_INT_EQUAL(modified, LW_TRUE);
1217  ewkt = lwgeom_to_ewkt(g);
1218  ASSERT_STRING_EQUAL(ewkt, "POLYGON((0 0,1 1,1 0,0 0))");
1219  lwgeom_free(g);
1220  lwfree(ewkt);
1221 
1222  // Test the return value (modified or not)
1223  g = lwgeom_from_wkt("POINT(0 0)", LW_PARSER_CHECK_NONE);
1224  modified = lwgeom_remove_repeated_points_in_place(g, 10000);
1225  ASSERT_INT_EQUAL(modified, LW_FALSE);
1226  lwgeom_free(g);
1227 
1228  g = lwgeom_from_wkt("TRIANGLE((0 0, 5 0, 3 3, 0 0))", LW_PARSER_CHECK_NONE);
1229  modified = lwgeom_remove_repeated_points_in_place(g, 10000);
1230  ASSERT_INT_EQUAL(modified, LW_FALSE);
1231  lwgeom_free(g);
1232 
1233  g = lwgeom_from_wkt("POLYGON((0 0,0 1,1 1,1 0,0 0))", LW_PARSER_CHECK_NONE);
1234  modified = lwgeom_remove_repeated_points_in_place(g, 0.1);
1235  ASSERT_INT_EQUAL(modified, LW_FALSE);
1236  ewkt = lwgeom_to_ewkt(g);
1237  ASSERT_STRING_EQUAL(ewkt, "POLYGON((0 0,0 1,1 1,1 0,0 0))");
1238  lwgeom_free(g);
1239  lwfree(ewkt);
1240 
1241  g = lwgeom_from_wkt("POLYGON((0 0,0 1,1 1,1 0,0 0), (0.4 0.4, 0.4 0.4, 0.4 0.5, 0.5 0.5, 0.5 0.4, 0.4 0.4))",
1243  modified = lwgeom_remove_repeated_points_in_place(g, 0.1);
1244  ASSERT_INT_EQUAL(modified, LW_TRUE);
1245  ewkt = lwgeom_to_ewkt(g);
1246  ASSERT_STRING_EQUAL(ewkt, "POLYGON((0 0,0 1,1 1,1 0,0 0),(0.4 0.4,0.5 0.5,0.5 0.4,0.4 0.4))");
1247  lwgeom_free(g);
1248  lwfree(ewkt);
1249 
1250  g = lwgeom_from_wkt("GEOMETRYCOLLECTION(POINT(2 0),POLYGON((0 0,1 0,1 1,0 1,0 0)))", LW_PARSER_CHECK_NONE);
1251  modified = lwgeom_remove_repeated_points_in_place(g, 0.1);
1252  ASSERT_INT_EQUAL(modified, LW_FALSE);
1253  ewkt = lwgeom_to_ewkt(g);
1254  ASSERT_STRING_EQUAL(ewkt, "GEOMETRYCOLLECTION(POINT(2 0),POLYGON((0 0,1 0,1 1,0 1,0 0)))");
1255  lwgeom_free(g);
1256  lwfree(ewkt);
1257 
1258  g = lwgeom_from_wkt("GEOMETRYCOLLECTION(POINT(2 0),POLYGON((0 0, 0 1, 1 1, 1 0, 0 0)))", LW_PARSER_CHECK_NONE);
1259  modified = lwgeom_remove_repeated_points_in_place(g, 10000);
1260  ASSERT_INT_EQUAL(modified, LW_TRUE);
1261  ewkt = lwgeom_to_ewkt(g);
1262  ASSERT_STRING_EQUAL(ewkt, "GEOMETRYCOLLECTION(POINT(2 0),POLYGON((0 0,1 1,1 0,0 0)))");
1263  lwgeom_free(g);
1264  lwfree(ewkt);
1265 
1266  g = lwgeom_from_wkt("GEOMETRYCOLLECTION(POLYGON((0 0, 0 1, 1 1, 1 0, 0 0)),POINT(2 0))", LW_PARSER_CHECK_NONE);
1267  modified = lwgeom_remove_repeated_points_in_place(g, 10000);
1268  ASSERT_INT_EQUAL(modified, LW_TRUE);
1269  ewkt = lwgeom_to_ewkt(g);
1270  ASSERT_STRING_EQUAL(ewkt, "GEOMETRYCOLLECTION(POLYGON((0 0,1 1,1 0,0 0)),POINT(2 0))");
1271  lwgeom_free(g);
1272  lwfree(ewkt);
1273 }
#define ASSERT_INT_EQUAL(o, e)
#define ASSERT_STRING_EQUAL(o, e)
#define LW_FALSE
Definition: liblwgeom.h:94
void lwgeom_free(LWGEOM *geom)
Definition: lwgeom.c:1155
#define LW_PARSER_CHECK_NONE
Definition: liblwgeom.h:2114
int lwgeom_remove_repeated_points_in_place(LWGEOM *in, double tolerance)
Definition: lwgeom.c:1594
char * lwgeom_to_ewkt(const LWGEOM *lwgeom)
Return an alloced string.
Definition: lwgeom.c:565
void lwfree(void *mem)
Definition: lwutil.c:242
LWGEOM * lwgeom_normalize(const LWGEOM *geom)
LWGEOM * lwgeom_from_wkt(const char *wkt, const char check)
Definition: lwin_wkt.c:905
#define LW_TRUE
Return types for functions with status returns.
Definition: liblwgeom.h:93

References ASSERT_INT_EQUAL, ASSERT_STRING_EQUAL, LW_FALSE, LW_PARSER_CHECK_NONE, LW_TRUE, lwfree(), lwgeom_free(), lwgeom_from_wkt(), lwgeom_normalize(), lwgeom_remove_repeated_points_in_place(), and lwgeom_to_ewkt().

Referenced by algorithms_suite_setup().

Here is the call graph for this function:
Here is the caller graph for this function: