PostGIS  3.1.6dev-r@@SVN_REVISION@@

◆ test_lwgeom_segmentize2d()

static void test_lwgeom_segmentize2d ( void  )
static

Definition at line 645 of file cu_measures.c.

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