PostGIS  3.4.0dev-r@@SVN_REVISION@@

◆ test_lwgeom_segmentize2d()

static void test_lwgeom_segmentize2d ( void  )
static

Definition at line 646 of file cu_measures.c.

647 {
648  LWGEOM *linein = lwgeom_from_wkt("LINESTRING(0 0,10 0)", LW_PARSER_CHECK_NONE);
649  LWGEOM *lineout = lwgeom_segmentize2d(linein, 5);
650  char *strout = lwgeom_to_ewkt(lineout);
651  ASSERT_STRING_EQUAL(strout, "LINESTRING(0 0,5 0,10 0)");
652  lwfree(strout);
653  lwgeom_free(linein);
654  lwgeom_free(lineout);
655 
656  /* test that segmentize is proportional - request every 6, get every 5 */
657  linein = lwgeom_from_wkt("LINESTRING(0 0, 20 0)", LW_PARSER_CHECK_NONE);
658  lineout = lwgeom_segmentize2d(linein, 6);
659  strout = lwgeom_to_ewkt(lineout);
660  ASSERT_STRING_EQUAL(strout, "LINESTRING(0 0,5 0,10 0,15 0,20 0)");
661  lwfree(strout);
662  lwgeom_free(linein);
663  lwgeom_free(lineout);
664 
665  /* test too many segments */
666  linein = lwgeom_from_wkt("LINESTRING(0 0,10 0)", LW_PARSER_CHECK_NONE);
667  lineout = lwgeom_segmentize2d(linein, 1e-100);
668  CU_ASSERT_EQUAL(lineout, NULL);
669  lwgeom_free(linein);
670 
671  /* test interruption */
672 
673  linein = lwgeom_from_wkt("LINESTRING(0 0,10 0)", LW_PARSER_CHECK_NONE);
675  lineout = lwgeom_segmentize2d(linein, INT32_MAX);
676  CU_ASSERT_EQUAL(lineout, NULL);
677  lwgeom_free(linein);
678 
679  linein = lwgeom_from_wkt("MULTILINESTRING((0 0,10 0),(20 0, 30 0))", LW_PARSER_CHECK_NONE);
681  lineout = lwgeom_segmentize2d(linein, INT32_MAX);
682  CU_ASSERT_EQUAL(lineout, NULL);
683  lwgeom_free(linein);
684 
685  linein = lwgeom_from_wkt(
686  "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)))"
689  lineout = lwgeom_segmentize2d(linein, INT32_MAX);
690  CU_ASSERT_EQUAL(lineout, NULL);
691  lwgeom_free(linein);
692 
693  linein = lwgeom_from_wkt(
694  "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))"
696  CU_ASSERT_FATAL(linein != NULL);
698  lineout = lwgeom_segmentize2d(linein, INT32_MAX);
699  CU_ASSERT_EQUAL(lineout, NULL);
700  lwgeom_free(linein);
701 
702  linein = lwgeom_from_wkt("LINESTRING(20 0, 30 0)", LW_PARSER_CHECK_NONE);
703  CU_ASSERT_FATAL(linein != NULL);
704  /* NOT INTERRUPTED */
705  lineout = lwgeom_segmentize2d(linein, 5);
706  CU_ASSERT_NOT_EQUAL_FATAL(lineout, NULL);
707  strout = lwgeom_to_ewkt(lineout);
708  ASSERT_STRING_EQUAL(strout, "LINESTRING(20 0,25 0,30 0)");
709  lwfree(strout);
710  lwgeom_free(linein);
711  lwgeom_free(lineout);
712 }
#define ASSERT_STRING_EQUAL(o, e)
void lwgeom_request_interrupt(void)
Request interruption of any running code.
Definition: lwgeom_api.c:663
void lwgeom_free(LWGEOM *geom)
Definition: lwgeom.c:1155
#define LW_PARSER_CHECK_NONE
Definition: liblwgeom.h:2114
LWGEOM * lwgeom_segmentize2d(const LWGEOM *line, double dist)
Definition: lwgeom.c:771
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_from_wkt(const char *wkt, const char check)
Definition: lwin_wkt.c:905
#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: