PostGIS  3.7.0dev-r@@SVN_REVISION@@

◆ test_lwgeom_remove_repeated_points()

static void test_lwgeom_remove_repeated_points ( void  )
static

Definition at line 1162 of file cu_algorithm.c.

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