PostGIS  3.0.6dev-r@@SVN_REVISION@@

◆ test_lwgeom_remove_repeated_points()

static void test_lwgeom_remove_repeated_points ( void  )
static

Definition at line 1158 of file cu_algorithm.c.

1159 {
1160  LWGEOM *g;
1161  char *ewkt;
1162  int modified = LW_FALSE;
1163 
1164  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);
1165  modified = lwgeom_remove_repeated_points_in_place(g, 1);
1166  ASSERT_INT_EQUAL(modified, LW_TRUE);
1167  ewkt = lwgeom_to_ewkt(g);
1168  ASSERT_STRING_EQUAL(ewkt, "MULTIPOINT(0 0,10 0,10 10,0 10,5 5)");
1169  lwgeom_free(g);
1170  lwfree(ewkt);
1171 
1172  g = lwgeom_from_wkt("LINESTRING(1612830.15445 4841287.12672,1612830.15824 4841287.12674,1612829.98813 4841274.56198)", LW_PARSER_CHECK_NONE);
1173  modified = lwgeom_remove_repeated_points_in_place(g, 0.01);
1174  ASSERT_INT_EQUAL(modified, LW_TRUE);
1175  ewkt = lwgeom_to_ewkt(g);
1176  ASSERT_STRING_EQUAL(ewkt, "LINESTRING(1612830.15445 4841287.12672,1612829.98813 4841274.56198)");
1177  lwgeom_free(g);
1178  lwfree(ewkt);
1179 
1180  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);
1181  modified = lwgeom_remove_repeated_points_in_place(g, 1);
1182  ASSERT_INT_EQUAL(modified, LW_TRUE);
1183  ewkt = lwgeom_to_ewkt(g);
1185  ewkt, "MULTIPOINT(0 0,10 0,10 10,0 10,5 5,5 8,8 8,8 5,50 50,50 60,60 60,60 50,55 55,55 58,58 58,58 55)");
1186  lwgeom_free(g);
1187  lwfree(ewkt);
1188 
1189  g = lwgeom_from_wkt("POLYGON((0 0, 0 1, 1 1, 1 0, 0 0))", LW_PARSER_CHECK_NONE);
1190  modified = lwgeom_remove_repeated_points_in_place(g, 10000);
1191  ASSERT_INT_EQUAL(modified, LW_TRUE);
1192  ewkt = lwgeom_to_ewkt(g);
1193  ASSERT_STRING_EQUAL(ewkt, "POLYGON((0 0,1 1,1 0,0 0))");
1194  lwgeom_free(g);
1195  lwfree(ewkt);
1196 
1197  // Test the return value (modified or not)
1198  g = lwgeom_from_wkt("POINT(0 0)", LW_PARSER_CHECK_NONE);
1199  modified = lwgeom_remove_repeated_points_in_place(g, 10000);
1200  ASSERT_INT_EQUAL(modified, LW_FALSE);
1201  lwgeom_free(g);
1202 
1203  g = lwgeom_from_wkt("TRIANGLE((0 0, 5 0, 3 3, 0 0))", LW_PARSER_CHECK_NONE);
1204  modified = lwgeom_remove_repeated_points_in_place(g, 10000);
1205  ASSERT_INT_EQUAL(modified, LW_FALSE);
1206  lwgeom_free(g);
1207 
1208  g = lwgeom_from_wkt("POLYGON((0 0,0 1,1 1,1 0,0 0))", LW_PARSER_CHECK_NONE);
1209  modified = lwgeom_remove_repeated_points_in_place(g, 0.1);
1210  ASSERT_INT_EQUAL(modified, LW_FALSE);
1211  ewkt = lwgeom_to_ewkt(g);
1212  ASSERT_STRING_EQUAL(ewkt, "POLYGON((0 0,0 1,1 1,1 0,0 0))");
1213  lwgeom_free(g);
1214  lwfree(ewkt);
1215 
1216  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))",
1218  modified = lwgeom_remove_repeated_points_in_place(g, 0.1);
1219  ASSERT_INT_EQUAL(modified, LW_TRUE);
1220  ewkt = lwgeom_to_ewkt(g);
1221  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))");
1222  lwgeom_free(g);
1223  lwfree(ewkt);
1224 
1225  g = lwgeom_from_wkt("GEOMETRYCOLLECTION(POINT(2 0),POLYGON((0 0,1 0,1 1,0 1,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, "GEOMETRYCOLLECTION(POINT(2 0),POLYGON((0 0,1 0,1 1,0 1,0 0)))");
1230  lwgeom_free(g);
1231  lwfree(ewkt);
1232 
1233  g = lwgeom_from_wkt("GEOMETRYCOLLECTION(POINT(2 0),POLYGON((0 0, 0 1, 1 1, 1 0, 0 0)))", LW_PARSER_CHECK_NONE);
1234  modified = lwgeom_remove_repeated_points_in_place(g, 10000);
1235  ASSERT_INT_EQUAL(modified, LW_TRUE);
1236  ewkt = lwgeom_to_ewkt(g);
1237  ASSERT_STRING_EQUAL(ewkt, "GEOMETRYCOLLECTION(POINT(2 0),POLYGON((0 0,1 1,1 0,0 0)))");
1238  lwgeom_free(g);
1239  lwfree(ewkt);
1240 
1241  g = lwgeom_from_wkt("GEOMETRYCOLLECTION(POLYGON((0 0, 0 1, 1 1, 1 0, 0 0)),POINT(2 0))", LW_PARSER_CHECK_NONE);
1242  modified = lwgeom_remove_repeated_points_in_place(g, 10000);
1243  ASSERT_INT_EQUAL(modified, LW_TRUE);
1244  ewkt = lwgeom_to_ewkt(g);
1245  ASSERT_STRING_EQUAL(ewkt, "GEOMETRYCOLLECTION(POLYGON((0 0,1 1,1 0,0 0)),POINT(2 0))");
1246  lwgeom_free(g);
1247  lwfree(ewkt);
1248 }
#define ASSERT_INT_EQUAL(o, e)
#define ASSERT_STRING_EQUAL(o, e)
#define LW_FALSE
Definition: liblwgeom.h:108
void lwgeom_free(LWGEOM *geom)
Definition: lwgeom.c:1138
#define LW_PARSER_CHECK_NONE
Definition: liblwgeom.h:2060
int lwgeom_remove_repeated_points_in_place(LWGEOM *in, double tolerance)
Definition: lwgeom.c:1554
char * lwgeom_to_ewkt(const LWGEOM *lwgeom)
Return an alloced string.
Definition: lwgeom.c:547
void lwfree(void *mem)
Definition: lwutil.c:242
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:107

References ASSERT_INT_EQUAL, ASSERT_STRING_EQUAL, LW_FALSE, LW_PARSER_CHECK_NONE, LW_TRUE, lwfree(), lwgeom_free(), lwgeom_from_wkt(), 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: