PostGIS  3.3.9dev-r@@SVN_REVISION@@

◆ 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("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);
1171  modified = lwgeom_remove_repeated_points_in_place(g, 1);
1172  ASSERT_INT_EQUAL(modified, LW_TRUE);
1173  gn = lwgeom_normalize(g);
1174  ewkt = lwgeom_to_ewkt(gn);
1175  ASSERT_STRING_EQUAL(ewkt, "MULTIPOINT(10 10,10 0,5 5,0 10,0 0)");
1176  lwgeom_free(g);
1177  lwgeom_free(gn);
1178  lwfree(ewkt);
1179 
1180  g = lwgeom_from_wkt("LINESTRING(1612830.15445 4841287.12672,1612830.15824 4841287.12674,1612829.98813 4841274.56198)", LW_PARSER_CHECK_NONE);
1181  modified = lwgeom_remove_repeated_points_in_place(g, 0.01);
1182  ASSERT_INT_EQUAL(modified, LW_TRUE);
1183  ewkt = lwgeom_to_ewkt(g);
1184  ASSERT_STRING_EQUAL(ewkt, "LINESTRING(1612830.15445 4841287.12672,1612829.98813 4841274.56198)");
1185  lwgeom_free(g);
1186  lwfree(ewkt);
1187 
1188  /* remove points */
1189  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);
1190  modified = lwgeom_remove_repeated_points_in_place(g, 1);
1191  ASSERT_INT_EQUAL(modified, LW_TRUE);
1192  gn = lwgeom_normalize(g);
1193  ewkt = lwgeom_to_ewkt(gn);
1194  lwgeom_free(g);
1195  lwgeom_free(gn);
1196  /* build expected and normalize */
1197  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);
1198  gn = lwgeom_normalize(g);
1199  ewkt_exp = lwgeom_to_ewkt(gn);
1200  ASSERT_STRING_EQUAL(ewkt, ewkt_exp);
1201  lwgeom_free(g);
1202  lwgeom_free(gn);
1203  lwfree(ewkt);
1204  lwfree(ewkt_exp);
1205 
1206  g = lwgeom_from_wkt("POLYGON((0 0, 0 1, 1 1, 1 0, 0 0))", LW_PARSER_CHECK_NONE);
1207  modified = lwgeom_remove_repeated_points_in_place(g, 10000);
1208  ASSERT_INT_EQUAL(modified, LW_TRUE);
1209  ewkt = lwgeom_to_ewkt(g);
1210  ASSERT_STRING_EQUAL(ewkt, "POLYGON((0 0,1 1,1 0,0 0))");
1211  lwgeom_free(g);
1212  lwfree(ewkt);
1213 
1214  // Test the return value (modified or not)
1215  g = lwgeom_from_wkt("POINT(0 0)", LW_PARSER_CHECK_NONE);
1216  modified = lwgeom_remove_repeated_points_in_place(g, 10000);
1217  ASSERT_INT_EQUAL(modified, LW_FALSE);
1218  lwgeom_free(g);
1219 
1220  g = lwgeom_from_wkt("TRIANGLE((0 0, 5 0, 3 3, 0 0))", LW_PARSER_CHECK_NONE);
1221  modified = lwgeom_remove_repeated_points_in_place(g, 10000);
1222  ASSERT_INT_EQUAL(modified, LW_FALSE);
1223  lwgeom_free(g);
1224 
1225  g = lwgeom_from_wkt("POLYGON((0 0,0 1,1 1,1 0,0 0))", LW_PARSER_CHECK_NONE);
1226  modified = lwgeom_remove_repeated_points_in_place(g, 0.1);
1227  ASSERT_INT_EQUAL(modified, LW_FALSE);
1228  ewkt = lwgeom_to_ewkt(g);
1229  ASSERT_STRING_EQUAL(ewkt, "POLYGON((0 0,0 1,1 1,1 0,0 0))");
1230  lwgeom_free(g);
1231  lwfree(ewkt);
1232 
1233  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))",
1235  modified = lwgeom_remove_repeated_points_in_place(g, 0.1);
1236  ASSERT_INT_EQUAL(modified, LW_TRUE);
1237  ewkt = lwgeom_to_ewkt(g);
1238  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))");
1239  lwgeom_free(g);
1240  lwfree(ewkt);
1241 
1242  g = lwgeom_from_wkt("GEOMETRYCOLLECTION(POINT(2 0),POLYGON((0 0,1 0,1 1,0 1,0 0)))", LW_PARSER_CHECK_NONE);
1243  modified = lwgeom_remove_repeated_points_in_place(g, 0.1);
1244  ASSERT_INT_EQUAL(modified, LW_FALSE);
1245  ewkt = lwgeom_to_ewkt(g);
1246  ASSERT_STRING_EQUAL(ewkt, "GEOMETRYCOLLECTION(POINT(2 0),POLYGON((0 0,1 0,1 1,0 1,0 0)))");
1247  lwgeom_free(g);
1248  lwfree(ewkt);
1249 
1250  g = lwgeom_from_wkt("GEOMETRYCOLLECTION(POINT(2 0),POLYGON((0 0, 0 1, 1 1, 1 0, 0 0)))", LW_PARSER_CHECK_NONE);
1251  modified = lwgeom_remove_repeated_points_in_place(g, 10000);
1252  ASSERT_INT_EQUAL(modified, LW_TRUE);
1253  ewkt = lwgeom_to_ewkt(g);
1254  ASSERT_STRING_EQUAL(ewkt, "GEOMETRYCOLLECTION(POINT(2 0),POLYGON((0 0,1 1,1 0,0 0)))");
1255  lwgeom_free(g);
1256  lwfree(ewkt);
1257 
1258  g = lwgeom_from_wkt("GEOMETRYCOLLECTION(POLYGON((0 0, 0 1, 1 1, 1 0, 0 0)),POINT(2 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(POLYGON((0 0,1 1,1 0,0 0)),POINT(2 0))");
1263  lwgeom_free(g);
1264  lwfree(ewkt);
1265 }
#define ASSERT_INT_EQUAL(o, e)
#define ASSERT_STRING_EQUAL(o, e)
#define LW_FALSE
Definition: liblwgeom.h:109
void lwgeom_free(LWGEOM *geom)
Definition: lwgeom.c:1155
#define LW_PARSER_CHECK_NONE
Definition: liblwgeom.h:2096
int lwgeom_remove_repeated_points_in_place(LWGEOM *in, double tolerance)
Definition: lwgeom.c:1604
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:108

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: