PostGIS  3.0.6dev-r@@SVN_REVISION@@

◆ test_lwgeom_segmentize2d()

static void test_lwgeom_segmentize2d ( void  )
static

Definition at line 638 of file cu_measures.c.

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