79 lines
2.0 KiB
C++
79 lines
2.0 KiB
C++
#include "catch.hpp"
|
|
|
|
#include <boost/crc.hpp>
|
|
|
|
#include <osmium/builder/attr.hpp>
|
|
#include <osmium/osm/crc.hpp>
|
|
#include <osmium/osm/area.hpp>
|
|
|
|
using namespace osmium::builder::attr;
|
|
|
|
TEST_CASE("Build area") {
|
|
osmium::memory::Buffer buffer(10000);
|
|
|
|
osmium::builder::add_area(buffer,
|
|
_id(17),
|
|
_version(3),
|
|
_visible(),
|
|
_cid(333),
|
|
_uid(21),
|
|
_timestamp(time_t(123)),
|
|
_user("foo"),
|
|
_tag("landuse", "forest"),
|
|
_tag("name", "Sherwood Forest"),
|
|
_outer_ring({
|
|
{1, {3.2, 4.2}},
|
|
{2, {3.5, 4.7}},
|
|
{3, {3.6, 4.9}},
|
|
{1, {3.2, 4.2}}
|
|
}),
|
|
_inner_ring({
|
|
{5, {1.0, 1.0}},
|
|
{6, {8.0, 1.0}},
|
|
{7, {8.0, 8.0}},
|
|
{8, {1.0, 8.0}},
|
|
{5, {1.0, 1.0}}
|
|
})
|
|
);
|
|
|
|
const osmium::Area& area = buffer.get<osmium::Area>(0);
|
|
|
|
REQUIRE(17 == area.id());
|
|
REQUIRE(3 == area.version());
|
|
REQUIRE(true == area.visible());
|
|
REQUIRE(333 == area.changeset());
|
|
REQUIRE(21 == area.uid());
|
|
REQUIRE(std::string("foo") == area.user());
|
|
REQUIRE(123 == uint32_t(area.timestamp()));
|
|
REQUIRE(2 == area.tags().size());
|
|
|
|
int inner = 0;
|
|
int outer = 0;
|
|
for (const auto& subitem : area) {
|
|
switch (subitem.type()) {
|
|
case osmium::item_type::outer_ring: {
|
|
const auto& ring = static_cast<const osmium::OuterRing&>(subitem);
|
|
REQUIRE(ring.size() == 4);
|
|
++outer;
|
|
}
|
|
break;
|
|
case osmium::item_type::inner_ring: {
|
|
const auto& ring = static_cast<const osmium::OuterRing&>(subitem);
|
|
REQUIRE(ring.size() == 5);
|
|
++inner;
|
|
}
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
REQUIRE(outer == 1);
|
|
REQUIRE(inner == 1);
|
|
|
|
osmium::CRC<boost::crc_32_type> crc32;
|
|
crc32.update(area);
|
|
REQUIRE(crc32().checksum() == 0x2b2b7fa0);
|
|
}
|
|
|