osrm-backend/test/t/osm/test_way.cpp
Patrick Niklaus 6eb4f090f9 Squashed 'third_party/libosmium/' content from commit ce865381f
git-subtree-dir: third_party/libosmium
git-subtree-split: ce865381fb752323ff1e66181f5a49b7f500ffa3
2017-08-30 09:30:27 +00:00

102 lines
2.9 KiB
C++

#include "catch.hpp"
#include <boost/crc.hpp>
#include <osmium/builder/attr.hpp>
#include <osmium/builder/osm_object_builder.hpp>
#include <osmium/osm/crc.hpp>
#include <osmium/osm/way.hpp>
using namespace osmium::builder::attr;
TEST_CASE("Build way") {
osmium::memory::Buffer buffer{10000};
osmium::builder::add_way(buffer,
_id(17),
_version(3),
_visible(true),
_cid(333),
_uid(21),
_timestamp(time_t(123)),
_user("foo"),
_tag("highway", "residential"),
_tag("name", "High Street"),
_nodes({1, 3, 2})
);
const osmium::Way& way = buffer.get<osmium::Way>(0);
REQUIRE(osmium::item_type::way == way.type());
REQUIRE(way.type_is_in(osmium::osm_entity_bits::way));
REQUIRE(way.type_is_in(osmium::osm_entity_bits::node | osmium::osm_entity_bits::way));
REQUIRE(17 == way.id());
REQUIRE(3 == way.version());
REQUIRE(true == way.visible());
REQUIRE(333 == way.changeset());
REQUIRE(21 == way.uid());
REQUIRE(std::string("foo") == way.user());
REQUIRE(123 == uint32_t(way.timestamp()));
REQUIRE(2 == way.tags().size());
REQUIRE(3 == way.nodes().size());
REQUIRE(1 == way.nodes()[0].ref());
REQUIRE(3 == way.nodes()[1].ref());
REQUIRE(2 == way.nodes()[2].ref());
REQUIRE_FALSE(way.is_closed());
osmium::CRC<boost::crc_32_type> crc32;
crc32.update(way);
REQUIRE(crc32().checksum() == 0x65f6ba91);
}
TEST_CASE("build closed way") {
osmium::memory::Buffer buffer{10000};
osmium::builder::add_way(buffer,
_tag("highway", "residential"),
_tag("name", "High Street"),
_nodes({1, 3, 1})
);
const osmium::Way& way = buffer.get<osmium::Way>(0);
REQUIRE(way.is_closed());
}
TEST_CASE("build way with helpers") {
osmium::memory::Buffer buffer{10000};
{
osmium::builder::WayBuilder builder(buffer);
builder.set_user("username");
builder.add_tags({
{"amenity", "restaurant"},
{"name", "Zum goldenen Schwanen"}
});
builder.add_node_refs({
{22, {3.5, 4.7}},
{67, {4.1, 2.2}}
});
}
buffer.commit();
const osmium::Way& way = buffer.get<osmium::Way>(0);
REQUIRE(std::string("username") == way.user());
REQUIRE(2 == way.tags().size());
REQUIRE(std::string("amenity") == way.tags().begin()->key());
REQUIRE(std::string("Zum goldenen Schwanen") == way.tags()["name"]);
REQUIRE(2 == way.nodes().size());
REQUIRE(22 == way.nodes()[0].ref());
REQUIRE(4.1 == Approx(way.nodes()[1].location().lon()));
const osmium::Box envelope = way.envelope();
REQUIRE(envelope.bottom_left().lon() == Approx(3.5));
REQUIRE(envelope.bottom_left().lat() == Approx(2.2));
REQUIRE(envelope.top_right().lon() == Approx(4.1));
REQUIRE(envelope.top_right().lat() == Approx(4.7));
}