[Git][debian-gis-team/libosmium][buster-backports] 6 commits: New upstream version 2.15.6

Bas Couwenberg gitlab at salsa.debian.org
Fri Jul 3 06:04:13 BST 2020



Bas Couwenberg pushed to branch buster-backports at Debian GIS Project / libosmium


Commits:
d55ad323 by Bas Couwenberg at 2020-06-28T08:00:19+02:00
New upstream version 2.15.6
- - - - -
5a318041 by Bas Couwenberg at 2020-06-28T08:00:24+02:00
Update upstream source from tag 'upstream/2.15.6'

Update to upstream version '2.15.6'
with Debian dir 77503069d2271922a6e1d33afd273843b680c7a4
- - - - -
4d78d52c by Bas Couwenberg at 2020-06-28T08:00:35+02:00
New upstream release.

- - - - -
37d4217c by Bas Couwenberg at 2020-06-28T08:02:58+02:00
Set distribution to unstable.

- - - - -
95bc3b05 by Bas Couwenberg at 2020-07-03T06:46:38+02:00
Merge tag 'debian/2.15.6-1' into buster-backports

releasing package libosmium version 2.15.6-1

- - - - -
044ddf06 by Bas Couwenberg at 2020-07-03T06:46:45+02:00
Rebuild for buster-backports.

- - - - -


19 changed files:

- CHANGELOG.md
- CMakeLists.txt
- debian/changelog
- include/osmium/area/detail/basic_assembler.hpp
- include/osmium/area/problem_reporter.hpp
- include/osmium/index/id_set.hpp
- include/osmium/index/multimap/sparse_mem_multimap.hpp
- include/osmium/io/bzip2_compression.hpp
- include/osmium/io/compression.hpp
- include/osmium/io/detail/o5m_input_format.hpp
- include/osmium/io/detail/opl_input_format.hpp
- include/osmium/io/detail/output_format.hpp
- include/osmium/io/detail/pbf_input_format.hpp
- include/osmium/io/detail/xml_input_format.hpp
- include/osmium/io/gzip_compression.hpp
- include/osmium/version.hpp
- test/t/index/test_id_set.cpp
- test/t/io/test_reader_with_mock_decompression.cpp
- test/t/io/test_writer_with_mock_compression.cpp


Changes:

=====================================
CHANGELOG.md
=====================================
@@ -13,6 +13,23 @@ This project adheres to [Semantic Versioning](https://semver.org/).
 ### Fixed
 
 
+## [2.15.6] - 2020-06-27
+
+### Added
+
+* Add `IdSetSmall::merge_sorted` function.
+
+### Changed
+
+* Little optimization for IdSetSmall: Don't add the same id twice in a row.
+
+### Fixed
+
+* Do not build areas with "recursion depth > 20". This happens when there
+  are complex multipolygon with many rings touching in single points. This
+  is a quick fix that hopefully keeps us going until we find a better
+  solution.
+
 ## [2.15.5] - 2020-04-21
 
 ### Added
@@ -1015,7 +1032,8 @@ This project adheres to [Semantic Versioning](https://semver.org/).
   Doxygen (up to version 1.8.8). This version contains a workaround to fix
   this.
 
-[unreleased]: https://github.com/osmcode/libosmium/compare/v2.15.5...HEAD
+[unreleased]: https://github.com/osmcode/libosmium/compare/v2.15.6...HEAD
+[2.15.6]: https://github.com/osmcode/libosmium/compare/v2.15.5...v2.15.6
 [2.15.5]: https://github.com/osmcode/libosmium/compare/v2.15.4...v2.15.5
 [2.15.4]: https://github.com/osmcode/libosmium/compare/v2.15.3...v2.15.4
 [2.15.3]: https://github.com/osmcode/libosmium/compare/v2.15.2...v2.15.3


=====================================
CMakeLists.txt
=====================================
@@ -40,7 +40,7 @@ project(libosmium)
 
 set(LIBOSMIUM_VERSION_MAJOR 2)
 set(LIBOSMIUM_VERSION_MINOR 15)
-set(LIBOSMIUM_VERSION_PATCH 5)
+set(LIBOSMIUM_VERSION_PATCH 6)
 
 set(LIBOSMIUM_VERSION
     "${LIBOSMIUM_VERSION_MAJOR}.${LIBOSMIUM_VERSION_MINOR}.${LIBOSMIUM_VERSION_PATCH}")


=====================================
debian/changelog
=====================================
@@ -1,3 +1,15 @@
+libosmium (2.15.6-1~bpo10+1) buster-backports; urgency=medium
+
+  * Rebuild for buster-backports.
+
+ -- Bas Couwenberg <sebastic at debian.org>  Fri, 03 Jul 2020 06:46:41 +0200
+
+libosmium (2.15.6-1) unstable; urgency=medium
+
+  * New upstream release.
+
+ -- Bas Couwenberg <sebastic at debian.org>  Sun, 28 Jun 2020 08:02:49 +0200
+
 libosmium (2.15.5-1~bpo10+1) buster-backports; urgency=medium
 
   * Rebuild for buster-backports.


=====================================
include/osmium/area/detail/basic_assembler.hpp
=====================================
@@ -105,6 +105,12 @@ namespace osmium {
 
                 static constexpr const std::size_t max_split_locations = 100ULL;
 
+                // Maximum recursion depth, stops complex multipolygons from
+                // breaking everything.
+                enum : unsigned {
+                    max_depth = 20U
+                };
+
                 struct slocation {
 
                     enum {
@@ -713,7 +719,13 @@ namespace osmium {
 
                 };
 
+                struct exceeded_max_depth {};
+
                 void find_candidates(std::vector<candidate>& candidates, std::unordered_set<osmium::Location>& loc_done, const std::vector<location_to_ring_map>& xrings, const candidate& cand, unsigned depth = 0) {
+                    if (depth > max_depth) {
+                        throw exceeded_max_depth{};
+                    }
+
                     if (debug()) {
                         std::cerr << "      find_candidates sum=" << cand.sum << " start=" << cand.start_location << " stop=" << cand.stop_location << "\n";
                         for (const auto& ring : cand.rings) {
@@ -826,7 +838,14 @@ namespace osmium {
                     loc_done.insert(cand.stop_location);
 
                     std::vector<candidate> candidates;
-                    find_candidates(candidates, loc_done, xrings, cand);
+                    try {
+                        find_candidates(candidates, loc_done, xrings, cand);
+                    } catch (const exceeded_max_depth&) {
+                        if (m_config.debug_level > 0) {
+                            std::cerr << "    Exceeded max depth (" << static_cast<unsigned>(max_depth) << ")\n";
+                        }
+                        return false;
+                    }
 
                     if (candidates.empty()) {
                         if (debug()) {


=====================================
include/osmium/area/problem_reporter.hpp
=====================================
@@ -93,6 +93,10 @@ namespace osmium {
                 m_object_id = object_id;
             }
 
+            osmium::object_id_type object_id() const noexcept {
+                return m_object_id;
+            }
+
             void set_nodes(size_t nodes) noexcept {
                 m_nodes = nodes;
             }


=====================================
include/osmium/index/id_set.hpp
=====================================
@@ -387,7 +387,9 @@ namespace osmium {
              * Add the given Id to the set.
              */
             void set(T id) final {
-                m_data.push_back(id);
+                if (m_data.empty() || m_data.back() != id) {
+                    m_data.push_back(id);
+                }
             }
 
             /**
@@ -430,7 +432,8 @@ namespace osmium {
 
             /**
              * Sort the internal vector and remove any duplicates. Call this
-             * before using size(), get_binary_search() or using an iterator.
+             * before using size(), get_binary_search(), merge_sorted() or
+             * using an iterator.
              */
             void sort_unique() {
                 std::sort(m_data.begin(), m_data.end());
@@ -453,6 +456,22 @@ namespace osmium {
                 return m_data.capacity() * sizeof(T);
             }
 
+            /**
+             * Merge the other set into this one. The result is sorted.
+             *
+             * @pre Both sets must be sorted and must not contain any
+             *      duplicates. Call sort_unique() if you are not sure.
+             */
+            void merge_sorted(const IdSetSmall<T>& other) {
+                std::vector<T> new_data;
+                new_data.reserve(m_data.size() + other.m_data.size());
+                std::set_union(m_data.cbegin(), m_data.cend(),
+                               other.m_data.cbegin(), other.m_data.cend(),
+                               std::back_inserter(new_data));
+                using std::swap;
+                swap(new_data, m_data);
+            }
+
             /// Iterator type. There is no non-const iterator.
             using const_iterator = typename std::vector<T>::const_iterator;
 


=====================================
include/osmium/index/multimap/sparse_mem_multimap.hpp
=====================================
@@ -53,7 +53,7 @@ namespace osmium {
              * lot of memory, but might make sense for small maps.
              */
             template <typename TId, typename TValue>
-            class SparseMemMultimap : public osmium::index::multimap::Multimap<TId, TValue> {
+            class SparseMemMultimap final : public osmium::index::multimap::Multimap<TId, TValue> {
 
                 // This is a rough estimate for the memory needed for each
                 // element in the map (id + value + pointers to left, right,
@@ -79,13 +79,13 @@ namespace osmium {
 
                 SparseMemMultimap() = default;
 
-                ~SparseMemMultimap() noexcept final = default;
+                ~SparseMemMultimap() noexcept = default;
 
                 void unsorted_set(const TId id, const TValue value) {
                     m_elements.emplace(id, value);
                 }
 
-                void set(const TId id, const TValue value) final {
+                void set(const TId id, const TValue value) override {
                     m_elements.emplace(id, value);
                 }
 
@@ -115,15 +115,15 @@ namespace osmium {
                     return m_elements.end();
                 }
 
-                size_t size() const final {
+                size_t size() const override {
                     return m_elements.size();
                 }
 
-                size_t used_memory() const final {
+                size_t used_memory() const override {
                     return element_size * m_elements.size();
                 }
 
-                void clear() final {
+                void clear() override {
                     m_elements.clear();
                 }
 
@@ -131,7 +131,7 @@ namespace osmium {
                     // intentionally left blank
                 }
 
-                void dump_as_list(const int fd) final {
+                void dump_as_list(const int fd) override {
                     std::vector<element_type> v;
                     v.reserve(m_elements.size());
                     for (const auto& element : m_elements) {


=====================================
include/osmium/io/bzip2_compression.hpp
=====================================
@@ -165,7 +165,7 @@ namespace osmium {
 
         } // namespace detail
 
-        class Bzip2Compressor : public Compressor {
+        class Bzip2Compressor final : public Compressor {
 
             detail::file_wrapper m_file;
             BZFILE* m_bzfile = nullptr;
@@ -191,7 +191,7 @@ namespace osmium {
             Bzip2Compressor(Bzip2Compressor&&) = delete;
             Bzip2Compressor& operator=(Bzip2Compressor&&) = delete;
 
-            ~Bzip2Compressor() noexcept final {
+            ~Bzip2Compressor() noexcept {
                 try {
                     close();
                 } catch (...) {
@@ -199,7 +199,7 @@ namespace osmium {
                 }
             }
 
-            void write(const std::string& data) final {
+            void write(const std::string& data) override {
                 assert(data.size() < std::numeric_limits<int>::max());
                 assert(m_bzfile);
 #ifdef _MSC_VER
@@ -212,7 +212,7 @@ namespace osmium {
                 }
             }
 
-            void close() final {
+            void close() override {
                 if (m_bzfile) {
 #ifdef _MSC_VER
                     osmium::detail::disable_invalid_parameter_handler diph;
@@ -232,7 +232,7 @@ namespace osmium {
 
         }; // class Bzip2Compressor
 
-        class Bzip2Decompressor : public Decompressor {
+        class Bzip2Decompressor final : public Decompressor {
 
             detail::file_wrapper m_file;
             BZFILE* m_bzfile = nullptr;
@@ -258,7 +258,7 @@ namespace osmium {
             Bzip2Decompressor(Bzip2Decompressor&&) = delete;
             Bzip2Decompressor& operator=(Bzip2Decompressor&&) = delete;
 
-            ~Bzip2Decompressor() noexcept final {
+            ~Bzip2Decompressor() noexcept {
                 try {
                     close();
                 } catch (...) {
@@ -266,7 +266,7 @@ namespace osmium {
                 }
             }
 
-            std::string read() final {
+            std::string read() override {
 #ifdef _MSC_VER
                 osmium::detail::disable_invalid_parameter_handler diph;
 #endif
@@ -311,7 +311,7 @@ namespace osmium {
                 return buffer;
             }
 
-            void close() final {
+            void close() override {
                 if (m_bzfile) {
 #ifdef _MSC_VER
                     osmium::detail::disable_invalid_parameter_handler diph;
@@ -328,7 +328,7 @@ namespace osmium {
 
         }; // class Bzip2Decompressor
 
-        class Bzip2BufferDecompressor : public Decompressor {
+        class Bzip2BufferDecompressor final : public Decompressor {
 
             const char* m_buffer;
             std::size_t m_buffer_size;
@@ -355,7 +355,7 @@ namespace osmium {
             Bzip2BufferDecompressor(Bzip2BufferDecompressor&&) = delete;
             Bzip2BufferDecompressor& operator=(Bzip2BufferDecompressor&&) = delete;
 
-            ~Bzip2BufferDecompressor() noexcept final {
+            ~Bzip2BufferDecompressor() noexcept {
                 try {
                     close();
                 } catch (...) {
@@ -363,7 +363,7 @@ namespace osmium {
                 }
             }
 
-            std::string read() final {
+            std::string read() override {
                 std::string output;
 
                 if (m_buffer) {
@@ -388,7 +388,7 @@ namespace osmium {
                 return output;
             }
 
-            void close() final {
+            void close() override {
                 BZ2_bzDecompressEnd(&m_bzstream);
             }
 


=====================================
include/osmium/io/compression.hpp
=====================================
@@ -216,7 +216,7 @@ namespace osmium {
 
         }; // class CompressionFactory
 
-        class NoCompressor : public Compressor {
+        class NoCompressor final : public Compressor {
 
             int m_fd;
 
@@ -233,7 +233,7 @@ namespace osmium {
             NoCompressor(NoCompressor&&) = delete;
             NoCompressor& operator=(NoCompressor&&) = delete;
 
-            ~NoCompressor() noexcept final {
+            ~NoCompressor() noexcept {
                 try {
                     close();
                 } catch (...) {
@@ -241,11 +241,11 @@ namespace osmium {
                 }
             }
 
-            void write(const std::string& data) final {
+            void write(const std::string& data) override {
                 osmium::io::detail::reliable_write(m_fd, data.data(), data.size());
             }
 
-            void close() final {
+            void close() override {
                 if (m_fd >= 0) {
                     const int fd = m_fd;
                     m_fd = -1;
@@ -264,7 +264,7 @@ namespace osmium {
 
         }; // class NoCompressor
 
-        class NoDecompressor : public Decompressor {
+        class NoDecompressor final : public Decompressor {
 
             int m_fd = -1;
             const char* m_buffer = nullptr;
@@ -288,7 +288,7 @@ namespace osmium {
             NoDecompressor(NoDecompressor&&) = delete;
             NoDecompressor& operator=(NoDecompressor&&) = delete;
 
-            ~NoDecompressor() noexcept final {
+            ~NoDecompressor() noexcept {
                 try {
                     close();
                 } catch (...) {
@@ -296,7 +296,7 @@ namespace osmium {
                 }
             }
 
-            std::string read() final {
+            std::string read() override {
                 std::string buffer;
 
                 if (m_buffer) {
@@ -317,7 +317,7 @@ namespace osmium {
                 return buffer;
             }
 
-            void close() final {
+            void close() override {
                 if (m_fd >= 0) {
                     const int fd = m_fd;
                     m_fd = -1;


=====================================
include/osmium/io/detail/o5m_input_format.hpp
=====================================
@@ -150,7 +150,7 @@ namespace osmium {
 
             }; // class ReferenceTable
 
-            class O5mParser : public Parser {
+            class O5mParser final : public Parser {
 
                 enum {
                     initial_buffer_size = 1024UL * 1024UL
@@ -617,9 +617,9 @@ namespace osmium {
                 O5mParser(O5mParser&&) = delete;
                 O5mParser& operator=(O5mParser&&) = delete;
 
-                ~O5mParser() noexcept final = default;
+                ~O5mParser() noexcept = default;
 
-                void run() final {
+                void run() override {
                     osmium::thread::set_thread_name("_osmium_o5m_in");
 
                     decode_header();


=====================================
include/osmium/io/detail/opl_input_format.hpp
=====================================
@@ -98,7 +98,7 @@ namespace osmium {
                 }
             }
 
-            class OPLParser : public Parser {
+            class OPLParser final : public Parser {
 
                 enum {
                     initial_buffer_size = 1024UL * 1024UL
@@ -122,7 +122,7 @@ namespace osmium {
                 OPLParser(OPLParser&&) = delete;
                 OPLParser& operator=(OPLParser&&) = delete;
 
-                ~OPLParser() noexcept final = default;
+                ~OPLParser() noexcept = default;
 
                 void parse_line(const char* data) {
                     if (opl_parse_line(m_line_count, data, m_buffer, read_types())) {
@@ -134,7 +134,7 @@ namespace osmium {
                     ++m_line_count;
                 }
 
-                void run() final {
+                void run() override {
                     osmium::thread::set_thread_name("_osmium_opl_in");
 
                     line_by_line(*this);


=====================================
include/osmium/io/detail/output_format.hpp
=====================================
@@ -199,7 +199,7 @@ namespace osmium {
 
             }; // class OutputFormatFactory
 
-            class BlackholeOutputFormat : public osmium::io::detail::OutputFormat {
+            class BlackholeOutputFormat final : public osmium::io::detail::OutputFormat {
 
             public:
 
@@ -213,9 +213,9 @@ namespace osmium {
                 BlackholeOutputFormat(BlackholeOutputFormat&&) = delete;
                 BlackholeOutputFormat& operator=(BlackholeOutputFormat&&) = delete;
 
-                ~BlackholeOutputFormat() noexcept final = default;
+                ~BlackholeOutputFormat() noexcept = default;
 
-                void write_buffer(osmium::memory::Buffer&& /*buffer*/) final {
+                void write_buffer(osmium::memory::Buffer&& /*buffer*/) override {
                 }
 
             }; // class BlackholeOutputFormat


=====================================
include/osmium/io/detail/pbf_input_format.hpp
=====================================
@@ -62,7 +62,7 @@ namespace osmium {
 
         namespace detail {
 
-            class PBFParser : public Parser {
+            class PBFParser final : public Parser {
 
                 std::string m_input_buffer{};
 
@@ -203,9 +203,9 @@ namespace osmium {
                 PBFParser(PBFParser&&) = delete;
                 PBFParser& operator=(PBFParser&&) = delete;
 
-                ~PBFParser() noexcept final = default;
+                ~PBFParser() noexcept = default;
 
-                void run() final {
+                void run() override {
                     osmium::thread::set_thread_name("_osmium_pbf_in");
 
                     parse_header_blob();


=====================================
include/osmium/io/detail/xml_input_format.hpp
=====================================
@@ -125,7 +125,7 @@ namespace osmium {
 
         namespace detail {
 
-            class XMLParser : public Parser {
+            class XMLParser final : public Parser {
 
                 enum {
                     initial_buffer_size = 1024UL * 1024UL
@@ -768,9 +768,9 @@ namespace osmium {
                 XMLParser(XMLParser&&) = delete;
                 XMLParser& operator=(XMLParser&&) = delete;
 
-                ~XMLParser() noexcept final = default;
+                ~XMLParser() noexcept = default;
 
-                void run() final {
+                void run() override {
                     osmium::thread::set_thread_name("_osmium_xml_in");
 
                     ExpatXMLParser parser{this};


=====================================
include/osmium/io/gzip_compression.hpp
=====================================
@@ -102,7 +102,7 @@ namespace osmium {
 
         } // namespace detail
 
-        class GzipCompressor : public Compressor {
+        class GzipCompressor final : public Compressor {
 
             int m_fd;
             gzFile m_gzfile;
@@ -127,7 +127,7 @@ namespace osmium {
             GzipCompressor(GzipCompressor&&) = delete;
             GzipCompressor& operator=(GzipCompressor&&) = delete;
 
-            ~GzipCompressor() noexcept final {
+            ~GzipCompressor() noexcept {
                 try {
                     close();
                 } catch (...) {
@@ -135,7 +135,7 @@ namespace osmium {
                 }
             }
 
-            void write(const std::string& data) final {
+            void write(const std::string& data) override {
 #ifdef _MSC_VER
                 osmium::detail::disable_invalid_parameter_handler diph;
 #endif
@@ -149,7 +149,7 @@ namespace osmium {
                 }
             }
 
-            void close() final {
+            void close() override {
                 if (m_gzfile) {
 #ifdef _MSC_VER
                     osmium::detail::disable_invalid_parameter_handler diph;
@@ -174,7 +174,7 @@ namespace osmium {
 
         }; // class GzipCompressor
 
-        class GzipDecompressor : public Decompressor {
+        class GzipDecompressor final : public Decompressor {
 
             gzFile m_gzfile = nullptr;
 
@@ -200,7 +200,7 @@ namespace osmium {
             GzipDecompressor(GzipDecompressor&&) = delete;
             GzipDecompressor& operator=(GzipDecompressor&&) = delete;
 
-            ~GzipDecompressor() noexcept final {
+            ~GzipDecompressor() noexcept {
                 try {
                     close();
                 } catch (...) {
@@ -208,7 +208,7 @@ namespace osmium {
                 }
             }
 
-            std::string read() final {
+            std::string read() override {
 #ifdef _MSC_VER
                 osmium::detail::disable_invalid_parameter_handler diph;
 #endif
@@ -226,7 +226,7 @@ namespace osmium {
                 return buffer;
             }
 
-            void close() final {
+            void close() override {
                 if (m_gzfile) {
 #ifdef _MSC_VER
                     osmium::detail::disable_invalid_parameter_handler diph;
@@ -241,7 +241,7 @@ namespace osmium {
 
         }; // class GzipDecompressor
 
-        class GzipBufferDecompressor : public Decompressor {
+        class GzipBufferDecompressor final : public Decompressor {
 
             const char* m_buffer;
             std::size_t m_buffer_size;
@@ -272,7 +272,7 @@ namespace osmium {
             GzipBufferDecompressor(GzipBufferDecompressor&&) = delete;
             GzipBufferDecompressor& operator=(GzipBufferDecompressor&&) = delete;
 
-            ~GzipBufferDecompressor() noexcept final {
+            ~GzipBufferDecompressor() noexcept {
                 try {
                     close();
                 } catch (...) {
@@ -280,7 +280,7 @@ namespace osmium {
                 }
             }
 
-            std::string read() final {
+            std::string read() override {
                 std::string output;
 
                 if (m_buffer) {
@@ -309,7 +309,7 @@ namespace osmium {
                 return output;
             }
 
-            void close() final {
+            void close() override {
                 inflateEnd(&m_zstream);
             }
 


=====================================
include/osmium/version.hpp
=====================================
@@ -35,8 +35,8 @@ DEALINGS IN THE SOFTWARE.
 
 #define LIBOSMIUM_VERSION_MAJOR 2
 #define LIBOSMIUM_VERSION_MINOR 15
-#define LIBOSMIUM_VERSION_PATCH 5
+#define LIBOSMIUM_VERSION_PATCH 6
 
-#define LIBOSMIUM_VERSION_STRING "2.15.5"
+#define LIBOSMIUM_VERSION_STRING "2.15.6"
 
 #endif // OSMIUM_VERSION_HPP


=====================================
test/t/index/test_id_set.cpp
=====================================
@@ -147,6 +147,14 @@ TEST_CASE("Basic functionality of IdSetSmall") {
     REQUIRE(s.get(17));
     REQUIRE(s.get(28));
     REQUIRE_FALSE(s.empty());
+    const auto size = s.size();
+
+    // Setting the same id as last time doesn't grow the size
+    s.set(28);
+    REQUIRE(s.get(17));
+    REQUIRE(s.get(28));
+    REQUIRE_FALSE(s.empty());
+    REQUIRE(size == s.size());
 
     s.clear();
     REQUIRE(s.empty());
@@ -216,3 +224,31 @@ TEST_CASE("Iterating over IdSetSmall") {
     REQUIRE(it == s.end());
 }
 
+TEST_CASE("Merge two IdSetSmall") {
+    osmium::index::IdSetSmall<osmium::unsigned_object_id_type> s1;
+    osmium::index::IdSetSmall<osmium::unsigned_object_id_type> s2;
+
+    s1.set(23);
+    s1.set(2);
+    s1.set(7);
+    s1.set(55);
+    s1.set(42);
+    s1.set(7);
+
+    s2.set(2);
+    s2.set(32);
+    s2.set(8);
+    s2.set(55);
+    s2.set(1);
+
+    s1.sort_unique();
+    REQUIRE(s1.size() == 5);
+    s2.sort_unique();
+    REQUIRE(s2.size() == 5);
+    s1.merge_sorted(s2);
+    REQUIRE(s1.size() == 8);
+
+    const auto ids = {1, 2, 7, 8, 23, 32, 42, 55};
+    REQUIRE(std::equal(s1.cbegin(), s1.cend(), ids.begin()));
+}
+


=====================================
test/t/io/test_reader_with_mock_decompression.cpp
=====================================
@@ -14,7 +14,7 @@
 // constructor it can be instructed to throw an exception in specific parts
 // of its code. This is then used to test the internals of the Reader.
 
-class MockDecompressor : public osmium::io::Decompressor {
+class MockDecompressor final : public osmium::io::Decompressor {
 
     std::string m_fail_in;
     int m_read_count = 0;
@@ -34,7 +34,7 @@ public:
     MockDecompressor(MockDecompressor&&) = delete;
     MockDecompressor& operator=(MockDecompressor&&) = delete;
 
-    ~MockDecompressor() noexcept final = default;
+    ~MockDecompressor() noexcept = default;
 
     static void add_node(std::string& s, int i) {
         s += "<node id='";
@@ -42,7 +42,7 @@ public:
         s += "' version='1' timestamp='2014-01-01T00:00:00Z' uid='1' user='test' changeset='1' lon='1.02' lat='1.02'/>\n";
     }
 
-    std::string read() final {
+    std::string read() override {
         std::string buffer;
         ++m_read_count;
 
@@ -68,7 +68,7 @@ public:
         return buffer;
     }
 
-    void close() final {
+    void close() override {
         if (m_fail_in == "close") {
             throw std::runtime_error{"error close"};
         }


=====================================
test/t/io/test_writer_with_mock_compression.cpp
=====================================
@@ -10,7 +10,7 @@
 #include <string>
 #include <utility>
 
-class MockCompressor : public osmium::io::Compressor {
+class MockCompressor final : public osmium::io::Compressor {
 
     std::string m_fail_in;
 
@@ -30,15 +30,15 @@ public:
     MockCompressor(MockCompressor&&) = delete;
     MockCompressor& operator=(MockCompressor&&) = delete;
 
-    ~MockCompressor() noexcept final = default;
+    ~MockCompressor() noexcept = default;
 
-    void write(const std::string& /*data*/) final {
+    void write(const std::string& /*data*/) override {
         if (m_fail_in == "write") {
             throw std::logic_error{"write"};
         }
     }
 
-    void close() final {
+    void close() override {
         if (m_fail_in == "close") {
             throw std::logic_error{"close"};
         }



View it on GitLab: https://salsa.debian.org/debian-gis-team/libosmium/-/compare/369a2119f1c9021714c27a39f9c539382e0afd40...044ddf0643320771d8e89609ef772e52398ff355

-- 
View it on GitLab: https://salsa.debian.org/debian-gis-team/libosmium/-/compare/369a2119f1c9021714c27a39f9c539382e0afd40...044ddf0643320771d8e89609ef772e52398ff355
You're receiving this email because of your account on salsa.debian.org.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://alioth-lists.debian.net/pipermail/pkg-grass-devel/attachments/20200703/897964b7/attachment-0001.html>


More information about the Pkg-grass-devel mailing list