PostGIS  3.2.2dev-r@@SVN_REVISION@@

◆ test_lwgeom_segmentize2d()

static void test_lwgeom_segmentize2d ( void  )
static

Definition at line 653 of file cu_measures.c.

654 {
655  LWGEOM *linein = lwgeom_from_wkt("LINESTRING(0 0,10 0)", LW_PARSER_CHECK_NONE);
656  LWGEOM *lineout = lwgeom_segmentize2d(linein, 5);
657  char *strout = lwgeom_to_ewkt(lineout);
658  ASSERT_STRING_EQUAL(strout, "LINESTRING(0 0,5 0,10 0)");
659  lwfree(strout);
660  lwgeom_free(linein);
661  lwgeom_free(lineout);
662 
663  /* test that segmentize is proportional - request every 6, get every 5 */
664  linein = lwgeom_from_wkt("LINESTRING(0 0, 20 0)", LW_PARSER_CHECK_NONE);
665  lineout = lwgeom_segmentize2d(linein, 6);
666  strout = lwgeom_to_ewkt(lineout);
667  ASSERT_STRING_EQUAL(strout, "LINESTRING(0 0,5 0,10 0,15 0,20 0)");
668  lwfree(strout);
669  lwgeom_free(linein);
670  lwgeom_free(lineout);
671 
672  /* test too many segments */
673  linein = lwgeom_from_wkt("LINESTRING(0 0,10 0)", LW_PARSER_CHECK_NONE);
674  lineout = lwgeom_segmentize2d(linein, 1e-100);
675  CU_ASSERT_EQUAL(lineout, NULL);
676  lwgeom_free(linein);
677 
678  /* test interruption */
679 
680  linein = lwgeom_from_wkt("LINESTRING(0 0,10 0)", LW_PARSER_CHECK_NONE);
682  lineout = lwgeom_segmentize2d(linein, INT32_MAX);
683  CU_ASSERT_EQUAL(lineout, NULL);
684  lwgeom_free(linein);
685 
686  linein = lwgeom_from_wkt("MULTILINESTRING((0 0,10 0),(20 0, 30 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(
693  "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)))"
696  lineout = lwgeom_segmentize2d(linein, INT32_MAX);
697  CU_ASSERT_EQUAL(lineout, NULL);
698  lwgeom_free(linein);
699 
700  linein = lwgeom_from_wkt(
701  "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))"
703  CU_ASSERT_FATAL(linein != NULL);
705  lineout = lwgeom_segmentize2d(linein, INT32_MAX);
706  CU_ASSERT_EQUAL(lineout, NULL);
707  lwgeom_free(linein);
708 
709  linein = lwgeom_from_wkt("LINESTRING(20 0, 30 0)", LW_PARSER_CHECK_NONE);
710  CU_ASSERT_FATAL(linein != NULL);
711  /* NOT INTERRUPTED */
712  lineout = lwgeom_segmentize2d(linein, 5);
713  CU_ASSERT_NOT_EQUAL_FATAL(lineout, NULL);
714  strout = lwgeom_to_ewkt(lineout);
715  ASSERT_STRING_EQUAL(strout, "LINESTRING(20 0,25 0,30 0)");
716  lwfree(strout);
717  lwgeom_free(linein);
718  lwgeom_free(lineout);
719 }
#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:2095
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: