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