PostGIS  3.6.1dev-r@@SVN_REVISION@@

◆ test_lwgeom_segmentize2d()

static void test_lwgeom_segmentize2d ( void  )
static

Definition at line 659 of file cu_measures.c.

660 {
661  LWGEOM *linein = lwgeom_from_wkt("LINESTRING(0 0,10 0)", LW_PARSER_CHECK_NONE);
662  LWGEOM *lineout = lwgeom_segmentize2d(linein, 5);
663  char *strout = lwgeom_to_ewkt(lineout);
664  ASSERT_STRING_EQUAL(strout, "LINESTRING(0 0,5 0,10 0)");
665  lwfree(strout);
666  lwgeom_free(linein);
667  lwgeom_free(lineout);
668 
669  /* test that segmentize is proportional - request every 6, get every 5 */
670  linein = lwgeom_from_wkt("LINESTRING(0 0, 20 0)", LW_PARSER_CHECK_NONE);
671  lineout = lwgeom_segmentize2d(linein, 6);
672  strout = lwgeom_to_ewkt(lineout);
673  ASSERT_STRING_EQUAL(strout, "LINESTRING(0 0,5 0,10 0,15 0,20 0)");
674  lwfree(strout);
675  lwgeom_free(linein);
676  lwgeom_free(lineout);
677 
678  /* test too many segments */
679  linein = lwgeom_from_wkt("LINESTRING(0 0,10 0)", LW_PARSER_CHECK_NONE);
680  lineout = lwgeom_segmentize2d(linein, 1e-100);
681  CU_ASSERT_EQUAL(lineout, NULL);
682  lwgeom_free(linein);
683 
684  /* test interruption */
685 
686  linein = lwgeom_from_wkt("LINESTRING(0 0,10 0)", LW_PARSER_CHECK_NONE);
688  lineout = lwgeom_segmentize2d(linein, INT32_MAX);
689  CU_ASSERT_EQUAL(lineout, NULL);
690  lwgeom_free(linein);
691 
692  linein = lwgeom_from_wkt("MULTILINESTRING((0 0,10 0),(20 0, 30 0))", LW_PARSER_CHECK_NONE);
694  lineout = lwgeom_segmentize2d(linein, INT32_MAX);
695  CU_ASSERT_EQUAL(lineout, NULL);
696  lwgeom_free(linein);
697 
698  linein = lwgeom_from_wkt(
699  "MULTIPOLYGON(((0 0,20 0,20 20,0 20,0 0),(2 2,2 4,4 4,4 2,2 2),(6 6,6 8,8 8,8 6,6 6)),((40 0,40 20,60 20,60 0,40 0),(42 2,42 4,44 4,44 2,42 2)))"
702  lineout = lwgeom_segmentize2d(linein, INT32_MAX);
703  CU_ASSERT_EQUAL(lineout, NULL);
704  lwgeom_free(linein);
705 
706  linein = lwgeom_from_wkt(
707  "GEOMETRYCOLLECTION(MULTIPOLYGON(((0 0,20 0,20 20,0 20,0 0),(2 2,2 4,4 4,4 2,2 2),(6 6,6 8,8 8,8 6,6 6)),((40 0,40 20,60 20,60 0,40 0),(42 2,42 4,44 4,44 2,42 2))),MULTILINESTRING((0 0,10 0),(20 0, 30 0)),MULTIPOINT(0 0, 3 4))"
709  CU_ASSERT_FATAL(linein != NULL);
711  lineout = lwgeom_segmentize2d(linein, INT32_MAX);
712  CU_ASSERT_EQUAL(lineout, NULL);
713  lwgeom_free(linein);
714 
715  linein = lwgeom_from_wkt("LINESTRING(20 0, 30 0)", LW_PARSER_CHECK_NONE);
716  CU_ASSERT_FATAL(linein != NULL);
717  /* NOT INTERRUPTED */
718  lineout = lwgeom_segmentize2d(linein, 5);
719  CU_ASSERT_NOT_EQUAL_FATAL(lineout, NULL);
720  strout = lwgeom_to_ewkt(lineout);
721  ASSERT_STRING_EQUAL(strout, "LINESTRING(20 0,25 0,30 0)");
722  lwfree(strout);
723  lwgeom_free(linein);
724  lwgeom_free(lineout);
725 }
#define ASSERT_STRING_EQUAL(o, e)
void lwgeom_request_interrupt(void)
Request interruption of any running code.
Definition: lwgeom_api.c:658
void lwgeom_free(LWGEOM *geom)
Definition: lwgeom.c:1218
#define LW_PARSER_CHECK_NONE
Definition: liblwgeom.h:2146
LWGEOM * lwgeom_segmentize2d(const LWGEOM *line, double dist)
Definition: lwgeom.c:771
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_from_wkt(const char *wkt, const char check)
Definition: lwin_wkt.c:940
#define INT32_MAX
Definition: lwin_wkt_lex.c:334

References ASSERT_STRING_EQUAL, INT32_MAX, LW_PARSER_CHECK_NONE, lwfree(), lwgeom_free(), lwgeom_from_wkt(), lwgeom_request_interrupt(), lwgeom_segmentize2d(), and lwgeom_to_ewkt().

Referenced by measures_suite_setup().

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