1414
1515TEST_CASE (" wkb: nullgeom" , " [NoDB]" )
1616{
17- geom::geometry_t geom{};
17+ geom::geometry_t const geom{};
18+ REQUIRE (geom.is_null ());
1819
1920 auto const wkb = geom_to_ewkb (geom);
2021 REQUIRE (wkb.empty ());
@@ -25,25 +26,23 @@ TEST_CASE("wkb: nullgeom", "[NoDB]")
2526
2627TEST_CASE (" wkb: point" , " [NoDB]" )
2728{
28- geom::geometry_t geom{geom::point_t {3.14 , 2.17 }, 42 };
29+ geom::geometry_t const geom{geom::point_t {3.14 , 2.17 }, 42 };
2930
3031 auto const result = ewkb_to_geom (geom_to_ewkb (geom));
3132 REQUIRE (result.is_point ());
3233 REQUIRE (result.srid () == 42 );
33-
34- REQUIRE (result.get <geom::point_t >() == geom.get <geom::point_t >());
34+ REQUIRE (result == geom);
3535}
3636
3737TEST_CASE (" wkb: linestring" , " [NoDB]" )
3838{
39- geom::geometry_t geom{
39+ geom::geometry_t const geom{
4040 geom::linestring_t {{1.2 , 2.3 }, {3.4 , 4.5 }, {5.6 , 6.7 }}, 43 };
4141
4242 auto const result = ewkb_to_geom (geom_to_ewkb (geom));
4343 REQUIRE (result.is_linestring ());
4444 REQUIRE (result.srid () == 43 );
45-
46- REQUIRE (result.get <geom::linestring_t >() == geom.get <geom::linestring_t >());
45+ REQUIRE (result == geom);
4746}
4847
4948TEST_CASE (" wkb: polygon without inner ring" , " [NoDB]" )
@@ -56,10 +55,7 @@ TEST_CASE("wkb: polygon without inner ring", "[NoDB]")
5655 auto const result = ewkb_to_geom (geom_to_ewkb (geom));
5756 REQUIRE (result.is_polygon ());
5857 REQUIRE (result.srid () == 44 );
59- REQUIRE (result.get <geom::polygon_t >().inners ().empty ());
60-
61- REQUIRE (result.get <geom::polygon_t >().outer () ==
62- geom.get <geom::polygon_t >().outer ());
58+ REQUIRE (result == geom);
6359}
6460
6561TEST_CASE (" wkb: polygon with inner rings" , " [NoDB]" )
@@ -75,24 +71,19 @@ TEST_CASE("wkb: polygon with inner rings", "[NoDB]")
7571 auto const result = ewkb_to_geom (geom_to_ewkb (geom));
7672 REQUIRE (result.is_polygon ());
7773 REQUIRE (result.srid () == 45 );
78- REQUIRE (result.get <geom::polygon_t >().inners ().size () == 1 );
79-
80- REQUIRE (result.get <geom::polygon_t >().outer () ==
81- geom.get <geom::polygon_t >().outer ());
82- REQUIRE (result.get <geom::polygon_t >().inners ().front () ==
83- geom.get <geom::polygon_t >().inners ().front ());
74+ REQUIRE (result == geom);
8475}
8576
8677TEST_CASE (" wkb: point as multipoint" , " [NoDB]" )
8778{
88- geom::geometry_t geom{geom::point_t {1.2 , 2.3 }, 47 };
79+ geom::geometry_t const geom{geom::point_t {1.2 , 2.3 }, 47 };
8980
9081 auto const result = ewkb_to_geom (geom_to_ewkb (geom, true ));
9182 REQUIRE (result.is_multipoint ());
9283 REQUIRE (result.srid () == 47 );
84+
9385 auto const &rmp = result.get <geom::multipoint_t >();
9486 REQUIRE (rmp.num_geometries () == 1 );
95-
9687 REQUIRE (rmp[0 ] == geom.get <geom::point_t >());
9788}
9889
@@ -107,24 +98,20 @@ TEST_CASE("wkb: multipoint", "[NoDB]")
10798 auto const result = ewkb_to_geom (geom_to_ewkb (geom));
10899 REQUIRE (result.is_multipoint ());
109100 REQUIRE (result.srid () == 46 );
110- auto const &rmp = result.get <geom::multipoint_t >();
111- REQUIRE (rmp.num_geometries () == 2 );
112-
113- REQUIRE (rmp[0 ] == mp[0 ]);
114- REQUIRE (rmp[1 ] == mp[1 ]);
101+ REQUIRE (result == geom);
115102}
116103
117104TEST_CASE (" wkb: linestring as multilinestring" , " [NoDB]" )
118105{
119- geom::geometry_t geom{
106+ geom::geometry_t const geom{
120107 geom::linestring_t {{1.2 , 2.3 }, {3.4 , 4.5 }, {5.6 , 6.7 }}, 43 };
121108
122109 auto const result = ewkb_to_geom (geom_to_ewkb (geom, true ));
123110 REQUIRE (result.is_multilinestring ());
124111 REQUIRE (result.srid () == 43 );
112+
125113 auto const &rml = result.get <geom::multilinestring_t >();
126114 REQUIRE (rml.num_geometries () == 1 );
127-
128115 REQUIRE (rml[0 ] == geom.get <geom::linestring_t >());
129116}
130117
@@ -139,11 +126,7 @@ TEST_CASE("wkb: multilinestring", "[NoDB]")
139126 auto const result = ewkb_to_geom (geom_to_ewkb (geom));
140127 REQUIRE (result.is_multilinestring ());
141128 REQUIRE (result.srid () == 46 );
142- auto const &rml = result.get <geom::multilinestring_t >();
143- REQUIRE (rml.num_geometries () == 2 );
144-
145- REQUIRE (rml[0 ] == ml[0 ]);
146- REQUIRE (rml[1 ] == ml[1 ]);
129+ REQUIRE (result == geom);
147130}
148131
149132TEST_CASE (" wkb: polygon as multipolygon" , " [NoDB]" )
@@ -156,11 +139,10 @@ TEST_CASE("wkb: polygon as multipolygon", "[NoDB]")
156139 auto const result = ewkb_to_geom (geom_to_ewkb (geom, true ));
157140 REQUIRE (result.is_multipolygon ());
158141 REQUIRE (result.srid () == 44 );
142+
159143 auto const &rmp = result.get <geom::multipolygon_t >();
160144 REQUIRE (rmp.num_geometries () == 1 );
161-
162- REQUIRE (rmp[0 ].outer () == geom.get <geom::polygon_t >().outer ());
163- REQUIRE (rmp[0 ].inners ().empty ());
145+ REQUIRE (rmp[0 ] == geom.get <geom::polygon_t >());
164146}
165147
166148TEST_CASE (" wkb: multipolygon" , " [NoDB]" )
@@ -181,22 +163,32 @@ TEST_CASE("wkb: multipolygon", "[NoDB]")
181163 auto const result = ewkb_to_geom (geom_to_ewkb (geom));
182164 REQUIRE (result.is_multipolygon ());
183165 REQUIRE (result.srid () == 47 );
184- auto const &rmp = result.get <geom::multipolygon_t >();
185- REQUIRE (rmp.num_geometries () == 2 );
186-
187- REQUIRE (rmp[0 ].outer () == mp[0 ].outer ());
188- REQUIRE (rmp[0 ].inners ().size () == 1 );
189- REQUIRE (rmp[0 ].inners ().front () == mp[0 ].inners ().front ());
190-
191- REQUIRE (rmp[1 ].outer () == mp[1 ].outer ());
192- REQUIRE (rmp[1 ].inners ().empty ());
166+ REQUIRE (result == geom);
193167}
194168
195- TEST_CASE (" wkb: invalid " , " [NoDB]" )
169+ TEST_CASE (" wkb: geometrycollection " , " [NoDB]" )
196170{
197- REQUIRE_THROWS (ewkb_to_geom (" INVALID" ));
171+ geom::geometry_t geom1{geom::point_t {1.0 , 2.0 }};
172+ geom::geometry_t geom2{geom::linestring_t {{1.2 , 2.3 }, {3.4 , 4.5 }}};
173+ geom::geometry_t geom3{geom::multipolygon_t {}};
174+
175+ geom3.get <geom::multipolygon_t >().emplace_back (geom::ring_t {
176+ {4.0 , 4.0 }, {5.0 , 4.0 }, {5.0 , 5.0 }, {4.0 , 5.0 }, {4.0 , 4.0 }});
177+
178+ geom::geometry_t geom{geom::collection_t {}, 49 };
179+ auto &c = geom.get <geom::collection_t >();
180+ c.add_geometry (std::move (geom1));
181+ c.add_geometry (std::move (geom2));
182+ c.add_geometry (std::move (geom3));
183+
184+ auto const result = ewkb_to_geom (geom_to_ewkb (geom));
185+ REQUIRE (result.is_collection ());
186+ REQUIRE (result.srid () == 49 );
187+ REQUIRE (result == geom);
198188}
199189
190+ TEST_CASE (" wkb: invalid" , " [NoDB]" ) { REQUIRE_THROWS (ewkb_to_geom (" INVALID" )); }
191+
200192TEST_CASE (" wkb hex decode of valid hex characters" )
201193{
202194 REQUIRE (decode_hex_char (' 0' ) == 0 );
0 commit comments