1 #include "catch.hpp" 2 3 #include <osmium/builder/osm_object_builder.hpp> 4 #include <osmium/memory/buffer.hpp> 5 #include <osmium/osm/tag.hpp> 6 7 #include <iterator> 8 9 TEST_CASE("Equality comparison of tags") { 10 osmium::memory::Buffer buffer1{10240}; 11 { 12 osmium::builder::TagListBuilder tl_builder{buffer1}; 13 tl_builder.add_tag("highway", "primary"); 14 tl_builder.add_tag("name", "Main Street"); 15 tl_builder.add_tag("source", "GPS"); 16 } 17 buffer1.commit(); 18 19 osmium::memory::Buffer buffer2{10240}; 20 { 21 osmium::builder::TagListBuilder tl_builder{buffer2}; 22 tl_builder.add_tag("highway", "primary"); 23 } 24 buffer2.commit(); 25 26 const auto& tl1 = buffer1.get<const osmium::TagList>(0); 27 const auto& tl2 = buffer2.get<const osmium::TagList>(0); 28 29 auto tagit1 = tl1.begin(); 30 auto tagit2 = tl2.begin(); 31 REQUIRE(*tagit1 == *tagit2); 32 ++tagit1; 33 REQUIRE_FALSE(*tagit1 == *tagit2); 34 } 35 36 TEST_CASE("Ordering of tags") { 37 osmium::memory::Buffer buffer{10240}; 38 { 39 osmium::builder::TagListBuilder tl_builder{buffer}; 40 tl_builder.add_tag("highway", "residential"); 41 tl_builder.add_tag("highway", "primary"); 42 tl_builder.add_tag("name", "Main Street"); 43 tl_builder.add_tag("amenity", "post_box"); 44 } 45 buffer.commit(); 46 47 const auto& tl = buffer.get<const osmium::TagList>(0); 48 const osmium::Tag& t1 = *(tl.begin()); 49 const osmium::Tag& t2 = *(std::next(tl.begin(), 1)); 50 const osmium::Tag& t3 = *(std::next(tl.begin(), 2)); 51 const osmium::Tag& t4 = *(std::next(tl.begin(), 3)); 52 53 REQUIRE(t2 < t1); 54 REQUIRE(t1 < t3); 55 REQUIRE(t2 < t3); 56 REQUIRE(t4 < t1); 57 } 58 59