PostGIS  2.2.7dev-r@@SVN_REVISION@@
void test_gbox_same_2d ( void  )

Definition at line 1052 of file cu_libgeom.c.

References LWGEOM::bbox, gbox_same_2d(), gbox_same_2d_float(), gserialized_from_lwgeom(), gserialized_read_gbox_p(), LW_FALSE, LW_PARSER_CHECK_NONE, lwfree(), lwgeom_add_bbox(), lwgeom_free(), and lwgeom_from_wkt().

Referenced by libgeom_suite_setup().

1053 {
1054  LWGEOM* g1 = lwgeom_from_wkt("LINESTRING(0 0, 1 1)", LW_PARSER_CHECK_NONE);
1055  LWGEOM* g2 = lwgeom_from_wkt("LINESTRING(0 0, 0 1, 1 1)", LW_PARSER_CHECK_NONE);
1056  LWGEOM* g3 = lwgeom_from_wkt("LINESTRING(0 0, 1 1.000000000001)", LW_PARSER_CHECK_NONE);
1057 
1058  lwgeom_add_bbox(g1);
1059  lwgeom_add_bbox(g2);
1060  lwgeom_add_bbox(g3);
1061 
1062  CU_ASSERT_TRUE(gbox_same_2d(g1->bbox, g2->bbox));
1063  CU_ASSERT_FALSE(gbox_same_2d(g1->bbox, g3->bbox));
1064 
1065  /* Serializing a GBOX with precise coordinates renders the boxes not strictly equal,
1066  * but still equal according to gbox_same_2d_float.
1067  */
1068  GSERIALIZED* s3 = gserialized_from_lwgeom(g3, LW_FALSE, NULL);
1069  GBOX s3box;
1070  gserialized_read_gbox_p(s3, &s3box);
1071 
1072  CU_ASSERT_FALSE(gbox_same_2d(g3->bbox, &s3box));
1073  CU_ASSERT_TRUE(gbox_same_2d_float(g3->bbox, &s3box));
1074 
1075  /* The serialized box equals itself by either the exact or closest-float compares */
1076  CU_ASSERT_TRUE(gbox_same_2d(&s3box, &s3box));
1077  CU_ASSERT_TRUE(gbox_same_2d_float(&s3box, &s3box));
1078 
1079  lwgeom_free(g1);
1080  lwgeom_free(g2);
1081  lwgeom_free(g3);
1082  lwfree(s3);
1083 }
int gserialized_read_gbox_p(const GSERIALIZED *g, GBOX *gbox)
Pull a GBOX from the header of a GSERIALIZED, if one is available.
Definition: g_serialized.c:158
GBOX * bbox
Definition: liblwgeom.h:382
void lwfree(void *mem)
Definition: lwutil.c:214
void lwgeom_free(LWGEOM *geom)
Definition: lwgeom.c:1050
LWGEOM * lwgeom_from_wkt(const char *wkt, const char check)
Definition: lwin_wkt.c:890
#define LW_PARSER_CHECK_NONE
Definition: liblwgeom.h:1869
#define LW_FALSE
Definition: liblwgeom.h:62
GSERIALIZED * gserialized_from_lwgeom(LWGEOM *geom, int is_geodetic, size_t *size)
Allocate a new GSERIALIZED from an LWGEOM.
Definition: g_serialized.c:906
int gbox_same_2d(const GBOX *g1, const GBOX *g2)
Check if 2 given GBOX are the same in x and y.
Definition: g_box.c:156
void lwgeom_add_bbox(LWGEOM *lwgeom)
Compute a bbox if not already computed.
Definition: lwgeom.c:599
int gbox_same_2d_float(const GBOX *g1, const GBOX *g2)
Check if two given GBOX are the same in x and y, or would round to the same GBOX in x and if serializ...
Definition: g_box.c:164

Here is the call graph for this function:

Here is the caller graph for this function: