diff --git a/.clang-tidy b/.clang-tidy index dc9af97..d893bff 100644 --- a/.clang-tidy +++ b/.clang-tidy @@ -1,11 +1,17 @@ --- -Checks: '*,-altera-*,-bugprone-easily-swappable-parameters,-cert-dcl21-cpp,-cert-err60-cpp,-clang-analyzer-core.CallAndMessage,-cppcoreguidelines-avoid-magic-numbers,-cppcoreguidelines-non-private-member-variables-in-classes,-cppcoreguidelines-owning-memory,-cppcoreguidelines-pro-bounds-array-to-pointer-decay,-cppcoreguidelines-pro-bounds-pointer-arithmetic,-fuchsia-*,-google-runtime-references,-hicpp-no-array-decay,-hicpp-vararg,-llvmlibc-*,-misc-non-private-member-variables-in-classes,-modernize-use-trailing-return-type,-readability-avoid-const-params-in-decls,-readability-function-cognitive-complexity,-readability-identifier-length,-readability-implicit-bool-cast,-readability-implicit-bool-conversion,-readability-magic-numbers' +Checks: '*,-altera-*,-boost-use-ranges,-bugprone-chained-comparison,-bugprone-easily-swappable-parameters,-cert-dcl21-cpp,-cert-err60-cpp,-clang-analyzer-core.CallAndMessage,-cppcoreguidelines-avoid-magic-numbers,-cppcoreguidelines-non-private-member-variables-in-classes,-cppcoreguidelines-owning-memory,-cppcoreguidelines-pro-bounds-array-to-pointer-decay,-cppcoreguidelines-pro-bounds-pointer-arithmetic,-fuchsia-*,-google-runtime-references,-hicpp-no-array-decay,-hicpp-vararg,-llvmlibc-*,-misc-non-private-member-variables-in-classes,-modernize-use-trailing-return-type,-readability-avoid-const-params-in-decls,-readability-function-cognitive-complexity,-readability-identifier-length,-readability-implicit-bool-cast,-readability-implicit-bool-conversion,-readability-magic-numbers' # # Disabled checks: # # altera-* # Not applicable # +# boost-use-ranges +# Would introduce extra dependency on boost. +# +# bugprone-chained-comparison +# These are generated by our test framework. +# # bugprone-easily-swappable-parameters # When you need them, you need them. # @@ -71,7 +77,6 @@ Checks: '*,-altera-*,-bugprone-easily-swappable-parameters,-cert-dcl21-cpp,-cert # readability-implicit-bool-conversion # I don't think this makes the code more readable. # -WarningsAsErrors: '*' +#WarningsAsErrors: '*' HeaderFilterRegex: '\/include\/' -AnalyzeTemporaryDtors: false ... diff --git a/.github/workflows/clang-tidy.yml b/.github/workflows/clang-tidy.yml new file mode 100644 index 0000000..db7a922 --- /dev/null +++ b/.github/workflows/clang-tidy.yml @@ -0,0 +1,52 @@ +name: clang-tidy + +on: [ push, pull_request ] + +jobs: + clang-tidy: + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + image: ["debian:bookworm", "debian:testing", "debian:experimental"] + include: + - image: "debian:bookworm" + clang: 15 + - image: "debian:testing" + clang: 19 + - image: "debian:experimental" + clang: 20 + container: + image: ${{ matrix.image }} + env: + BUILD_TYPE: Debug + CC: clang-${{ matrix.clang }} + CXX: clang++-${{ matrix.clang }} + CXXFLAGS: -Wno-c++20-extensions + CPP_VERSION: 14 + APT_LISTCHANGES_FRONTEND: none + DEBIAN_FRONTEND: noninteractive + steps: + - name: Prepare container (apt) + run: | + apt-get update -qq + apt-get install -yq \ + clang-${{ matrix.clang }} \ + clang-tidy-${{ matrix.clang }} \ + cmake \ + git \ + make + shell: bash + - uses: actions/checkout@v4 + - uses: ./.github/actions/install-protozero + - uses: ./.github/actions/cmake + - name: Run clang-tidy + run: make clang-tidy | tee vtzero-${{ github.sha }}-clang-tidy-${{ matrix.clang }}.log + shell: bash + working-directory: build + - name: Upload clang-tidy log + uses: actions/upload-artifact@v4 + if: always() + with: + name: vtzero-${{ github.sha }}-clang-tidy-${{ matrix.clang }}-log + path: build/vtzero-${{ github.sha }}-clang-tidy-${{ matrix.clang }}.log diff --git a/CMakeLists.txt b/CMakeLists.txt index 2857d68..ac0ba92 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -75,7 +75,7 @@ find_package(Boost) # #----------------------------------------------------------------------------- message(STATUS "Looking for clang-tidy") -find_program(CLANG_TIDY NAMES clang-tidy clang-tidy-16 clang-tidy-15 clang-tidy-14) +find_program(CLANG_TIDY NAMES clang-tidy clang-tidy-20 clang-tidy-19 clang-tidy-18 clang-tidy-17 clang-tidy-16 clang-tidy-15) if(CLANG_TIDY) message(STATUS "Looking for clang-tidy - found ${CLANG_TIDY}") diff --git a/examples/utils.cpp b/examples/utils.cpp index f0fb933..60a42d0 100644 --- a/examples/utils.cpp +++ b/examples/utils.cpp @@ -9,6 +9,7 @@ #include #include #include +#include #include #include #include diff --git a/examples/vtzero-check.cpp b/examples/vtzero-check.cpp index 2e01f26..356f428 100644 --- a/examples/vtzero-check.cpp +++ b/examples/vtzero-check.cpp @@ -10,11 +10,14 @@ #include +#include +#include #include #include -#include #include +namespace { + class result { int m_return_code = 0; @@ -47,7 +50,7 @@ class result { class CheckGeomHandler { - vtzero::point m_prev_point{}; + vtzero::point m_prev_point; int m_layer_num; int m_feature_num; int64_t m_extent; @@ -164,13 +167,15 @@ class CheckGeomHandler { }; // class CheckGeomHandler +} // anonymous namespace + int main(int argc, char* argv[]) { if (argc != 2) { std::cerr << "Usage: " << argv[0] << " TILE\n"; return 1; } - std::string input_file{argv[1]}; + const std::string input_file{argv[1]}; const auto data = read_file(input_file); std::set layer_names; @@ -186,7 +191,7 @@ int main(int argc, char* argv[]) { result.has_error(); } - std::string name(layer.name()); + const std::string name{layer.name()}; if (layer_names.count(name) > 0) { std::cerr << "Error in layer " << layer_num << ": name is duplicate of previous layer ('" << name << "') (spec 4.1)\n"; result.has_error(); diff --git a/examples/vtzero-create.cpp b/examples/vtzero-create.cpp index c0a8124..0967f9a 100644 --- a/examples/vtzero-create.cpp +++ b/examples/vtzero-create.cpp @@ -12,6 +12,8 @@ #include #include +#include +#include #include #include #include @@ -21,7 +23,7 @@ int main() { vtzero::tile_builder tile; vtzero::layer_builder layer_points{tile, "points"}; vtzero::layer_builder layer_lines{tile, "lines"}; - vtzero::layer_builder layer_polygons{tile, "polygons"}; + const vtzero::layer_builder layer_polygons{tile, "polygons"}; vtzero::key_index idx{layer_points}; @@ -75,7 +77,7 @@ int main() { feature.set_point(10, 10); feature.set_point(10, 20); feature.set_point(vtzero::point{20, 20}); - std::vector points = {{11, 11}, {12, 13}}; + const std::vector points = {{11, 11}, {12, 13}}; feature.add_linestring_from_container(points); feature.add_property("highway", "primary"); feature.add_property(std::string{"maxspeed"}, maxspeed_index(50)); diff --git a/examples/vtzero-encode-geom.cpp b/examples/vtzero-encode-geom.cpp index 60200ce..8715028 100644 --- a/examples/vtzero-encode-geom.cpp +++ b/examples/vtzero-encode-geom.cpp @@ -13,12 +13,15 @@ #include #include +#include #include #include #include #include #include +namespace { + int64_t get_int(const char* arg) { char* endptr = nullptr; const int64_t value = std::strtoll(arg, &endptr, 10); @@ -76,6 +79,8 @@ uint32_t number(const char* arg) { return protozero::encode_zigzag32(num); } +} // anonymous namespace + int main(int argc, char* argv[]) { if (argc < 2) { std::cerr << "Usage: " << argv[0] << " GEOMETRY ELEMENTS...\n" diff --git a/examples/vtzero-filter.cpp b/examples/vtzero-filter.cpp index e09f8d5..04f1033 100644 --- a/examples/vtzero-filter.cpp +++ b/examples/vtzero-filter.cpp @@ -16,8 +16,8 @@ #include #include #include +#include #include -#include #include int main(int argc, char* argv[]) { @@ -64,7 +64,7 @@ int main(int argc, char* argv[]) { } const auto data = read_file(filename); - vtzero::vector_tile tile{data}; + const vtzero::vector_tile tile{data}; auto layer = get_layer(tile, layer_num_or_name); std::cerr << "Found layer: " << std::string(layer.name()) << "\n"; @@ -95,7 +95,7 @@ int main(int argc, char* argv[]) { layer_builder.add_feature(feature); } - std::string output = tb.serialize(); + const std::string output = tb.serialize(); write_data_to_file(output, output_file); } catch (const std::exception& e) { diff --git a/examples/vtzero-show.cpp b/examples/vtzero-show.cpp index f8c77d2..74b043f 100644 --- a/examples/vtzero-show.cpp +++ b/examples/vtzero-show.cpp @@ -19,7 +19,7 @@ class geom_handler { - std::string output{}; + std::string output; uint64_t num = 0; public: @@ -119,7 +119,9 @@ struct print_value { }; // struct print_value -static void print_layer(vtzero::layer& layer, bool print_tables, bool print_value_types, int layer_num, int& feature_num) { +namespace { + +void print_layer(vtzero::layer& layer, bool print_tables, bool print_value_types, int layer_num, int& feature_num) { std::cout << "=============================================================\n" << "layer: " << layer_num << '\n' << " name: " << std::string(layer.name()) << '\n' @@ -171,10 +173,12 @@ static void print_layer(vtzero::layer& layer, bool print_tables, bool print_valu } } -static void print_layer_overview(const vtzero::layer& layer) { +void print_layer_overview(const vtzero::layer& layer) { std::cout << layer.name() << ' ' << layer.num_features() << '\n'; } +} // anonymous namespace + int main(int argc, char* argv[]) { std::string filename; std::string layer_num_or_name; diff --git a/examples/vtzero-stats.cpp b/examples/vtzero-stats.cpp index 48e5f9f..ea984cc 100644 --- a/examples/vtzero-stats.cpp +++ b/examples/vtzero-stats.cpp @@ -10,11 +10,14 @@ #include +#include +#include #include -#include #include -static std::size_t geometries_size(const vtzero::layer& layer) { +namespace { + +std::size_t geometries_size(const vtzero::layer& layer) { std::size_t sum = 0; layer.for_each_feature([&sum](vtzero::feature&& feature) { @@ -25,6 +28,8 @@ static std::size_t geometries_size(const vtzero::layer& layer) { return sum; } +} // anonymous namespace + int main(int argc, char* argv[]) { if (argc != 2) { std::cerr << "Usage: " << argv[0] << " TILE\n"; @@ -33,7 +38,7 @@ int main(int argc, char* argv[]) { std::cout << "layer,num_features,raw_size,raw_geometries_size,key_table_size,value_table_size\n"; try { - std::string input_file{argv[1]}; + const std::string input_file{argv[1]}; const auto data = read_file(input_file); vtzero::vector_tile tile{data}; diff --git a/examples/vtzero-streets.cpp b/examples/vtzero-streets.cpp index 2d1dbbe..f67d1b7 100644 --- a/examples/vtzero-streets.cpp +++ b/examples/vtzero-streets.cpp @@ -13,10 +13,13 @@ #include #include +#include #include #include -static bool keep_feature(const vtzero::feature& feature) { +namespace { + +bool keep_feature(const vtzero::feature& feature) { static const std::string key{"class"}; static const std::string val{"street"}; @@ -30,19 +33,21 @@ static bool keep_feature(const vtzero::feature& feature) { return found; } +} // anonymous namespace + int main(int argc, char* argv[]) { if (argc != 2) { std::cerr << "Usage: " << argv[0] << " TILE\n"; return 1; } - std::string input_file{argv[1]}; - std::string output_file{"streets.mvt"}; + const std::string input_file{argv[1]}; + const std::string output_file{"streets.mvt"}; const auto data = read_file(input_file); try { - vtzero::vector_tile tile{data}; + const vtzero::vector_tile tile{data}; auto layer = get_layer(tile, "road_label"); if (!layer) { @@ -69,7 +74,7 @@ int main(int argc, char* argv[]) { } } - std::string output = tb.serialize(); + const std::string output = tb.serialize(); write_data_to_file(output, output_file); } catch (const std::exception& e) { std::cerr << "Error: " << e.what() << '\n'; diff --git a/include/vtzero/builder.hpp b/include/vtzero/builder.hpp index 781758e..94f14a7 100644 --- a/include/vtzero/builder.hpp +++ b/include/vtzero/builder.hpp @@ -188,7 +188,7 @@ namespace vtzero { } template - using is_layer = std::is_same::type>::type, layer>; + using is_layer = std::is_same>, layer>; public: @@ -213,7 +213,7 @@ namespace vtzero { * @param version The vector tile spec version of the new layer. * @param extent The extent of the new layer. */ - template ::value, int>::type = 0> + template ::value, int> = 0> layer_builder(vtzero::tile_builder& tile, TString&& name, uint32_t version = 2, uint32_t extent = 4096) : m_layer(tile.add_layer(std::forward(name), version, extent)) { } @@ -359,7 +359,7 @@ namespace vtzero { protected: /// Encoded geometry. - protozero::packed_field_uint32 m_pbf_geometry{}; + protozero::packed_field_uint32 m_pbf_geometry; /// Number of points still to be set for the geometry to be complete. countdown_value m_num_points; diff --git a/include/vtzero/builder_impl.hpp b/include/vtzero/builder_impl.hpp index 1b348df..d634886 100644 --- a/include/vtzero/builder_impl.hpp +++ b/include/vtzero/builder_impl.hpp @@ -37,7 +37,7 @@ namespace vtzero { // If this layer is copied from an existing layer, this points // to the data of the original layer. For newly built layers, // this is empty. - data_view m_data_view{}; + data_view m_data_view; // Buffer containing the encoded layer metadata and features std::string m_data; @@ -48,9 +48,9 @@ namespace vtzero { // Buffer containing the encoded values table std::string m_values_data; - protozero::pbf_builder m_pbf_message_layer{}; - protozero::pbf_builder m_pbf_message_keys{}; - protozero::pbf_builder m_pbf_message_values{}; + protozero::pbf_builder m_pbf_message_layer; + protozero::pbf_builder m_pbf_message_keys; + protozero::pbf_builder m_pbf_message_values; // The number of features in the layer std::size_t m_num_features = 0; diff --git a/include/vtzero/feature.hpp b/include/vtzero/feature.hpp index 745d49a..86016df 100644 --- a/include/vtzero/feature.hpp +++ b/include/vtzero/feature.hpp @@ -44,10 +44,10 @@ namespace vtzero { const layer* m_layer = nullptr; uint64_t m_id = 0; // defaults to 0, see https://github.com/mapbox/vector-tile-spec/blob/master/2.1/vector_tile.proto#L32 - uint32_it_range m_properties{}; - protozero::pbf_reader::const_uint32_iterator m_property_iterator{}; + uint32_it_range m_properties; + protozero::pbf_reader::const_uint32_iterator m_property_iterator; std::size_t m_num_properties = 0; - data_view m_geometry{}; + data_view m_geometry; GeomType m_geometry_type = GeomType::UNKNOWN; // defaults to UNKNOWN, see https://github.com/mapbox/vector-tile-spec/blob/master/2.1/vector_tile.proto#L41 bool m_has_id = false; diff --git a/include/vtzero/feature_builder_impl.hpp b/include/vtzero/feature_builder_impl.hpp index 3067418..7f378ec 100644 --- a/include/vtzero/feature_builder_impl.hpp +++ b/include/vtzero/feature_builder_impl.hpp @@ -53,7 +53,7 @@ namespace vtzero { template void add_value_internal(T&& value) { - encoded_property_value v{std::forward(value)}; + const encoded_property_value v{std::forward(value)}; add_value_internal(m_layer->add_value(v)); } diff --git a/include/vtzero/geometry.hpp b/include/vtzero/geometry.hpp index 42af623..41163fb 100644 --- a/include/vtzero/geometry.hpp +++ b/include/vtzero/geometry.hpp @@ -70,12 +70,12 @@ namespace vtzero { } /// Points are equal if their coordinates are - inline constexpr bool operator==(const point a, const point b) noexcept { + constexpr bool operator==(const point a, const point b) noexcept { return a.x == b.x && a.y == b.y; } /// Points are not equal if their coordinates aren't - inline constexpr bool operator!=(const point a, const point b) noexcept { + constexpr bool operator!=(const point a, const point b) noexcept { return !(a == b); } @@ -88,38 +88,38 @@ namespace vtzero { CLOSE_PATH = 7 }; - inline constexpr uint32_t command_integer(CommandId id, const uint32_t count) noexcept { + constexpr uint32_t command_integer(CommandId id, const uint32_t count) noexcept { return (static_cast(id) & 0x7U) | (count << 3U); } - inline constexpr uint32_t command_move_to(const uint32_t count) noexcept { + constexpr uint32_t command_move_to(const uint32_t count) noexcept { return command_integer(CommandId::MOVE_TO, count); } - inline constexpr uint32_t command_line_to(const uint32_t count) noexcept { + constexpr uint32_t command_line_to(const uint32_t count) noexcept { return command_integer(CommandId::LINE_TO, count); } - inline constexpr uint32_t command_close_path() noexcept { + constexpr uint32_t command_close_path() noexcept { return command_integer(CommandId::CLOSE_PATH, 1); } - inline constexpr uint32_t get_command_id(const uint32_t command_integer) noexcept { + constexpr uint32_t get_command_id(const uint32_t command_integer) noexcept { return command_integer & 0x7U; } - inline constexpr uint32_t get_command_count(const uint32_t command_integer) noexcept { + constexpr uint32_t get_command_count(const uint32_t command_integer) noexcept { return command_integer >> 3U; } // The maximum value for the command count according to the spec. - inline constexpr uint32_t max_command_count() noexcept { + constexpr uint32_t max_command_count() noexcept { return get_command_count(std::numeric_limits::max()); } - inline constexpr int64_t det(const point a, const point b) noexcept { - return static_cast(a.x) * static_cast(b.y) - - static_cast(b.x) * static_cast(a.y); + constexpr int64_t det(const point a, const point b) noexcept { + return (static_cast(a.x) * static_cast(b.y)) - + (static_cast(b.x) * static_cast(a.y)); } template @@ -134,7 +134,7 @@ namespace vtzero { }; template - struct get_result().result()), void>::value>::type> { + struct get_result().result()), void>::value>> { using type = decltype(std::declval().result()); diff --git a/include/vtzero/layer.hpp b/include/vtzero/layer.hpp index 8556851..a1526bc 100644 --- a/include/vtzero/layer.hpp +++ b/include/vtzero/layer.hpp @@ -55,11 +55,11 @@ namespace vtzero { */ class layer { - data_view m_data{}; + data_view m_data; uint32_t m_version = 1; // defaults to 1, see https://github.com/mapbox/vector-tile-spec/blob/master/2.1/vector_tile.proto#L55 uint32_t m_extent = 4096; // defaults to 4096, see https://github.com/mapbox/vector-tile-spec/blob/master/2.1/vector_tile.proto#L70 std::size_t m_num_features = 0; - data_view m_name{}; + data_view m_name; protozero::pbf_message m_layer_reader{m_data}; mutable std::vector m_key_table; mutable std::vector m_value_table; diff --git a/include/vtzero/property.hpp b/include/vtzero/property.hpp index e00d722..b7a560c 100644 --- a/include/vtzero/property.hpp +++ b/include/vtzero/property.hpp @@ -28,8 +28,8 @@ namespace vtzero { */ class property { - data_view m_key{}; - property_value m_value{}; + data_view m_key; + property_value m_value; public: @@ -75,12 +75,12 @@ namespace vtzero { }; // class property /// properties are equal if they contain the same key & value data. - inline constexpr bool operator==(const property& lhs, const property& rhs) noexcept { + constexpr bool operator==(const property& lhs, const property& rhs) noexcept { return lhs.key() == rhs.key() && lhs.value() == rhs.value(); } /// properties are unequal if they do not contain them same key and value data. - inline constexpr bool operator!=(const property& lhs, const property& rhs) noexcept { + constexpr bool operator!=(const property& lhs, const property& rhs) noexcept { return !(lhs == rhs); } diff --git a/include/vtzero/property_value.hpp b/include/vtzero/property_value.hpp index c359fd3..d884946 100644 --- a/include/vtzero/property_value.hpp +++ b/include/vtzero/property_value.hpp @@ -35,7 +35,7 @@ namespace vtzero { */ class property_value { - data_view m_value{}; + data_view m_value; static bool check_tag_and_type(protozero::pbf_tag_type tag, protozero::pbf_wire_type type) noexcept { static constexpr const std::array types{{ @@ -230,12 +230,12 @@ namespace vtzero { }; // class property_value /// property_values are equal if they contain the same data. - inline constexpr bool operator==(const property_value lhs, const property_value rhs) noexcept { + constexpr bool operator==(const property_value lhs, const property_value rhs) noexcept { return lhs.data() == rhs.data(); } /// property_values are unequal if they do not contain the same data. - inline constexpr bool operator!=(const property_value lhs, const property_value rhs) noexcept { + constexpr bool operator!=(const property_value lhs, const property_value rhs) noexcept { return lhs.data() != rhs.data(); } diff --git a/include/vtzero/types.hpp b/include/vtzero/types.hpp index 78c0293..121d2f7 100644 --- a/include/vtzero/types.hpp +++ b/include/vtzero/types.hpp @@ -125,7 +125,7 @@ namespace vtzero { /// @endcond /// value - data_view value{}; + data_view value; /// Construct empty string_value_type constexpr string_value_type() noexcept = default; @@ -336,8 +336,8 @@ namespace vtzero { */ class index_value_pair { - index_value m_key{}; - index_value m_value{}; + index_value m_key; + index_value m_value; public: @@ -386,7 +386,7 @@ namespace vtzero { */ class geometry { - data_view m_data{}; + data_view m_data; GeomType m_type = GeomType::UNKNOWN; public: diff --git a/test/fixture_tests.cpp b/test/fixture_tests.cpp index 0bddd43..6239ab4 100644 --- a/test/fixture_tests.cpp +++ b/test/fixture_tests.cpp @@ -9,10 +9,15 @@ #include #include #include +#include +#include #include #include +#include -static std::string open_tile(const std::string& path) { +namespace { + +std::string open_tile(const std::string& path) { // NOLINTNEXTLINE(concurrency-mt-unsafe) const auto* fixtures_dir = std::getenv("FIXTURES_DIR"); if (fixtures_dir == nullptr) { @@ -33,11 +38,26 @@ static std::string open_tile(const std::string& path) { return message; } +vtzero::feature check_layer(vtzero::vector_tile& tile) { + REQUIRE_FALSE(tile.empty()); + REQUIRE(tile.count_layers() == 1); + + auto layer = tile.next_layer(); + REQUIRE(layer.name() == "hello"); + REQUIRE(layer.version() == 2); + REQUIRE(layer.extent() == 4096); + REQUIRE(layer.num_features() == 1); + + return layer.next_feature(); +} + +} // anonymous namespace + // --------------------------------------------------------------------------- struct point_handler { - std::vector data{}; + std::vector data; void points_begin(uint32_t count) { data.reserve(count); @@ -54,7 +74,7 @@ struct point_handler { struct linestring_handler { - std::vector> data{}; + std::vector> data; void linestring_begin(uint32_t count) { data.emplace_back(); @@ -72,7 +92,7 @@ struct linestring_handler { struct polygon_handler { - std::vector> data{}; + std::vector> data; void ring_begin(uint32_t count) { data.emplace_back(); @@ -92,8 +112,8 @@ struct polygon_handler { struct geom_handler { - std::vector point_data{}; - std::vector> line_data{}; + std::vector point_data; + std::vector> line_data; void points_begin(uint32_t count) { point_data.reserve(count); @@ -134,31 +154,16 @@ struct geom_handler { // --------------------------------------------------------------------------- -static vtzero::feature check_layer(vtzero::vector_tile& tile) { - REQUIRE_FALSE(tile.empty()); - REQUIRE(tile.count_layers() == 1); - - auto layer = tile.next_layer(); - REQUIRE(layer.name() == "hello"); - REQUIRE(layer.version() == 2); - REQUIRE(layer.extent() == 4096); - REQUIRE(layer.num_features() == 1); - - return layer.next_feature(); -} - -// --------------------------------------------------------------------------- - TEST_CASE("MVT test 001: Empty tile") { - std::string buffer{open_tile("001/tile.mvt")}; - vtzero::vector_tile tile{buffer}; + const std::string buffer{open_tile("001/tile.mvt")}; + const vtzero::vector_tile tile{buffer}; REQUIRE(tile.empty()); REQUIRE(tile.count_layers() == 0); // NOLINT(readability-container-size-empty) } TEST_CASE("MVT test 002: Tile with single point feature without id") { - std::string buffer{open_tile("002/tile.mvt")}; + const std::string buffer{open_tile("002/tile.mvt")}; vtzero::vector_tile tile{buffer}; const auto feature = check_layer(tile); @@ -170,12 +175,12 @@ TEST_CASE("MVT test 002: Tile with single point feature without id") { point_handler handler; vtzero::decode_point_geometry(feature.geometry(), handler); - std::vector expected = {{25, 17}}; + const std::vector expected = {{25, 17}}; REQUIRE(handler.data == expected); } TEST_CASE("MVT test 003: Tile with single point with missing geometry type") { - std::string buffer{open_tile("003/tile.mvt")}; + const std::string buffer{open_tile("003/tile.mvt")}; vtzero::vector_tile tile{buffer}; const auto feature = check_layer(tile); @@ -185,14 +190,14 @@ TEST_CASE("MVT test 003: Tile with single point with missing geometry type") { } TEST_CASE("MVT test 004: Tile with single point with missing geometry") { - std::string buffer{open_tile("004/tile.mvt")}; + const std::string buffer{open_tile("004/tile.mvt")}; vtzero::vector_tile tile{buffer}; REQUIRE_THROWS_AS(check_layer(tile), vtzero::format_exception); } TEST_CASE("MVT test 005: Tile with single point with broken tags array") { - std::string buffer{open_tile("005/tile.mvt")}; + const std::string buffer{open_tile("005/tile.mvt")}; vtzero::vector_tile tile{buffer}; REQUIRE_FALSE(tile.empty()); @@ -204,7 +209,7 @@ TEST_CASE("MVT test 005: Tile with single point with broken tags array") { } TEST_CASE("MVT test 006: Tile with single point with invalid GeomType") { - std::string buffer{open_tile("006/tile.mvt")}; + const std::string buffer{open_tile("006/tile.mvt")}; vtzero::vector_tile tile{buffer}; REQUIRE(tile.count_layers() == 1); @@ -215,15 +220,15 @@ TEST_CASE("MVT test 006: Tile with single point with invalid GeomType") { } TEST_CASE("MVT test 007: Layer version as string instead of as an int") { - std::string buffer{open_tile("007/tile.mvt")}; - vtzero::vector_tile tile{buffer}; + const std::string buffer{open_tile("007/tile.mvt")}; + const vtzero::vector_tile tile{buffer}; REQUIRE(tile.count_layers() == 1); REQUIRE_THROWS_AS(tile.get_layer(0), vtzero::format_exception); } TEST_CASE("MVT test 008: Tile layer extent encoded as string") { - std::string buffer{open_tile("008/tile.mvt")}; + const std::string buffer{open_tile("008/tile.mvt")}; vtzero::vector_tile tile{buffer}; REQUIRE(tile.count_layers() == 1); @@ -231,7 +236,7 @@ TEST_CASE("MVT test 008: Tile layer extent encoded as string") { } TEST_CASE("MVT test 009: Tile layer extent missing") { - std::string buffer{open_tile("009/tile.mvt")}; + const std::string buffer{open_tile("009/tile.mvt")}; vtzero::vector_tile tile{buffer}; REQUIRE(tile.count_layers() == 1); @@ -247,7 +252,7 @@ TEST_CASE("MVT test 009: Tile layer extent missing") { } TEST_CASE("MVT test 010: Tile layer value is encoded as int, but pretends to be string") { - std::string buffer{open_tile("010/tile.mvt")}; + const std::string buffer{open_tile("010/tile.mvt")}; vtzero::vector_tile tile{buffer}; REQUIRE(tile.count_layers() == 1); @@ -259,7 +264,7 @@ TEST_CASE("MVT test 010: Tile layer value is encoded as int, but pretends to be } TEST_CASE("MVT test 011: Tile layer value is encoded as unknown type") { - std::string buffer{open_tile("011/tile.mvt")}; + const std::string buffer{open_tile("011/tile.mvt")}; vtzero::vector_tile tile{buffer}; REQUIRE(tile.count_layers() == 1); @@ -271,7 +276,7 @@ TEST_CASE("MVT test 011: Tile layer value is encoded as unknown type") { } TEST_CASE("MVT test 012: Unknown layer version") { - std::string buffer{open_tile("012/tile.mvt")}; + const std::string buffer{open_tile("012/tile.mvt")}; vtzero::vector_tile tile{buffer}; REQUIRE(tile.count_layers() == 1); @@ -279,7 +284,7 @@ TEST_CASE("MVT test 012: Unknown layer version") { } TEST_CASE("MVT test 013: Tile with key in table encoded as int") { - std::string buffer{open_tile("013/tile.mvt")}; + const std::string buffer{open_tile("013/tile.mvt")}; vtzero::vector_tile tile{buffer}; REQUIRE(tile.count_layers() == 1); @@ -287,7 +292,7 @@ TEST_CASE("MVT test 013: Tile with key in table encoded as int") { } TEST_CASE("MVT test 014: Tile layer without a name") { - std::string buffer{open_tile("014/tile.mvt")}; + const std::string buffer{open_tile("014/tile.mvt")}; vtzero::vector_tile tile{buffer}; REQUIRE(tile.count_layers() == 1); @@ -295,7 +300,7 @@ TEST_CASE("MVT test 014: Tile layer without a name") { } TEST_CASE("MVT test 015: Two layers with the same name") { - std::string buffer{open_tile("015/tile.mvt")}; + const std::string buffer{open_tile("015/tile.mvt")}; vtzero::vector_tile tile{buffer}; REQUIRE(tile.count_layers() == 2); @@ -309,7 +314,7 @@ TEST_CASE("MVT test 015: Two layers with the same name") { } TEST_CASE("MVT test 016: Valid unknown geometry") { - std::string buffer{open_tile("016/tile.mvt")}; + const std::string buffer{open_tile("016/tile.mvt")}; vtzero::vector_tile tile{buffer}; const auto feature = check_layer(tile); @@ -317,7 +322,7 @@ TEST_CASE("MVT test 016: Valid unknown geometry") { } TEST_CASE("MVT test 017: Valid point geometry") { - std::string buffer{open_tile("017/tile.mvt")}; + const std::string buffer{open_tile("017/tile.mvt")}; vtzero::vector_tile tile{buffer}; const auto feature = check_layer(tile); @@ -343,7 +348,7 @@ TEST_CASE("MVT test 017: Valid point geometry") { } TEST_CASE("MVT test 018: Valid linestring geometry") { - std::string buffer = open_tile("018/tile.mvt"); + const std::string buffer = open_tile("018/tile.mvt"); vtzero::vector_tile tile{buffer}; const auto feature = check_layer(tile); @@ -366,7 +371,7 @@ TEST_CASE("MVT test 018: Valid linestring geometry") { } TEST_CASE("MVT test 019: Valid polygon geometry") { - std::string buffer = open_tile("019/tile.mvt"); + const std::string buffer = open_tile("019/tile.mvt"); vtzero::vector_tile tile{buffer}; const auto feature = check_layer(tile); @@ -389,7 +394,7 @@ TEST_CASE("MVT test 019: Valid polygon geometry") { } TEST_CASE("MVT test 020: Valid multipoint geometry") { - std::string buffer = open_tile("020/tile.mvt"); + const std::string buffer = open_tile("020/tile.mvt"); vtzero::vector_tile tile{buffer}; const auto feature = check_layer(tile); @@ -405,7 +410,7 @@ TEST_CASE("MVT test 020: Valid multipoint geometry") { } TEST_CASE("MVT test 021: Valid multilinestring geometry") { - std::string buffer = open_tile("021/tile.mvt"); + const std::string buffer = open_tile("021/tile.mvt"); vtzero::vector_tile tile{buffer}; const auto feature = check_layer(tile); @@ -421,7 +426,7 @@ TEST_CASE("MVT test 021: Valid multilinestring geometry") { } TEST_CASE("MVT test 022: Valid multipolygon geometry") { - std::string buffer = open_tile("022/tile.mvt"); + const std::string buffer = open_tile("022/tile.mvt"); vtzero::vector_tile tile{buffer}; const auto feature = check_layer(tile); @@ -441,7 +446,7 @@ TEST_CASE("MVT test 022: Valid multipolygon geometry") { } TEST_CASE("MVT test 023: Invalid layer: missing layer name") { - std::string buffer = open_tile("023/tile.mvt"); + const std::string buffer = open_tile("023/tile.mvt"); vtzero::vector_tile tile{buffer}; REQUIRE(tile.count_layers() == 1); @@ -450,7 +455,7 @@ TEST_CASE("MVT test 023: Invalid layer: missing layer name") { } TEST_CASE("MVT test 024: Missing layer version") { - std::string buffer = open_tile("024/tile.mvt"); + const std::string buffer = open_tile("024/tile.mvt"); vtzero::vector_tile tile{buffer}; REQUIRE(tile.count_layers() == 1); @@ -459,7 +464,7 @@ TEST_CASE("MVT test 024: Missing layer version") { } TEST_CASE("MVT test 025: Layer without features") { - std::string buffer = open_tile("025/tile.mvt"); + const std::string buffer = open_tile("025/tile.mvt"); vtzero::vector_tile tile{buffer}; REQUIRE(tile.count_layers() == 1); @@ -469,7 +474,7 @@ TEST_CASE("MVT test 025: Layer without features") { } TEST_CASE("MVT test 026: Extra value type") { - std::string buffer = open_tile("026/tile.mvt"); + const std::string buffer = open_tile("026/tile.mvt"); vtzero::vector_tile tile{buffer}; REQUIRE(tile.count_layers() == 1); @@ -488,7 +493,7 @@ TEST_CASE("MVT test 026: Extra value type") { } TEST_CASE("MVT test 027: Layer with unused bool property value") { - std::string buffer{open_tile("027/tile.mvt")}; + const std::string buffer{open_tile("027/tile.mvt")}; vtzero::vector_tile tile{buffer}; REQUIRE(tile.count_layers() == 1); @@ -504,7 +509,7 @@ TEST_CASE("MVT test 027: Layer with unused bool property value") { } TEST_CASE("MVT test 030: Two geometry fields") { - std::string buffer = open_tile("030/tile.mvt"); + const std::string buffer = open_tile("030/tile.mvt"); vtzero::vector_tile tile{buffer}; auto layer = tile.next_layer(); @@ -514,7 +519,7 @@ TEST_CASE("MVT test 030: Two geometry fields") { } TEST_CASE("MVT test 032: Layer with single feature with string property value") { - std::string buffer{open_tile("032/tile.mvt")}; + const std::string buffer{open_tile("032/tile.mvt")}; vtzero::vector_tile tile{buffer}; REQUIRE_FALSE(tile.empty()); @@ -551,7 +556,7 @@ TEST_CASE("MVT test 032: Layer with single feature with string property value") } TEST_CASE("MVT test 033: Layer with single feature with float property value") { - std::string buffer{open_tile("033/tile.mvt")}; + const std::string buffer{open_tile("033/tile.mvt")}; vtzero::vector_tile tile{buffer}; REQUIRE(tile.count_layers() == 1); @@ -567,7 +572,7 @@ TEST_CASE("MVT test 033: Layer with single feature with float property value") { } TEST_CASE("MVT test 034: Layer with single feature with double property value") { - std::string buffer{open_tile("034/tile.mvt")}; + const std::string buffer{open_tile("034/tile.mvt")}; vtzero::vector_tile tile{buffer}; REQUIRE(tile.count_layers() == 1); @@ -583,7 +588,7 @@ TEST_CASE("MVT test 034: Layer with single feature with double property value") } TEST_CASE("MVT test 035: Layer with single feature with int property value") { - std::string buffer{open_tile("035/tile.mvt")}; + const std::string buffer{open_tile("035/tile.mvt")}; vtzero::vector_tile tile{buffer}; REQUIRE(tile.count_layers() == 1); @@ -599,7 +604,7 @@ TEST_CASE("MVT test 035: Layer with single feature with int property value") { } TEST_CASE("MVT test 036: Layer with single feature with uint property value") { - std::string buffer{open_tile("036/tile.mvt")}; + const std::string buffer{open_tile("036/tile.mvt")}; vtzero::vector_tile tile{buffer}; REQUIRE(tile.count_layers() == 1); @@ -615,7 +620,7 @@ TEST_CASE("MVT test 036: Layer with single feature with uint property value") { } TEST_CASE("MVT test 037: Layer with single feature with sint property value") { - std::string buffer{open_tile("037/tile.mvt")}; + const std::string buffer{open_tile("037/tile.mvt")}; vtzero::vector_tile tile{buffer}; REQUIRE(tile.count_layers() == 1); @@ -631,7 +636,7 @@ TEST_CASE("MVT test 037: Layer with single feature with sint property value") { } TEST_CASE("MVT test 038: Layer with all types of property value") { - std::string buffer{open_tile("038/tile.mvt")}; + const std::string buffer{open_tile("038/tile.mvt")}; vtzero::vector_tile tile{buffer}; REQUIRE(tile.count_layers() == 1); @@ -657,7 +662,7 @@ TEST_CASE("MVT test 038: Layer with all types of property value") { } TEST_CASE("MVT test 039: Default values are actually encoded in the tile") { - std::string buffer{open_tile("039/tile.mvt")}; + const std::string buffer{open_tile("039/tile.mvt")}; vtzero::vector_tile tile{buffer}; REQUIRE(tile.count_layers() == 1); @@ -676,7 +681,7 @@ TEST_CASE("MVT test 039: Default values are actually encoded in the tile") { } TEST_CASE("MVT test 040: Feature has tags that point to non-existent Key in the layer.") { - std::string buffer{open_tile("040/tile.mvt")}; + const std::string buffer{open_tile("040/tile.mvt")}; vtzero::vector_tile tile{buffer}; REQUIRE(tile.count_layers() == 1); @@ -688,7 +693,7 @@ TEST_CASE("MVT test 040: Feature has tags that point to non-existent Key in the } TEST_CASE("MVT test 040: Feature has tags that point to non-existent Key in the layer decoded using next_property_indexes().") { - std::string buffer{open_tile("040/tile.mvt")}; + const std::string buffer{open_tile("040/tile.mvt")}; vtzero::vector_tile tile{buffer}; REQUIRE(tile.count_layers() == 1); @@ -700,7 +705,7 @@ TEST_CASE("MVT test 040: Feature has tags that point to non-existent Key in the } TEST_CASE("MVT test 041: Tags encoded as floats instead of as ints") { - std::string buffer{open_tile("041/tile.mvt")}; + const std::string buffer{open_tile("041/tile.mvt")}; vtzero::vector_tile tile{buffer}; REQUIRE(tile.count_layers() == 1); @@ -711,7 +716,7 @@ TEST_CASE("MVT test 041: Tags encoded as floats instead of as ints") { } TEST_CASE("MVT test 042: Feature has tags that point to non-existent Value in the layer.") { - std::string buffer{open_tile("042/tile.mvt")}; + const std::string buffer{open_tile("042/tile.mvt")}; vtzero::vector_tile tile{buffer}; REQUIRE(tile.count_layers() == 1); @@ -723,7 +728,7 @@ TEST_CASE("MVT test 042: Feature has tags that point to non-existent Value in th } TEST_CASE("MVT test 043: A layer with six points that all share the same key but each has a unique value.") { - std::string buffer{open_tile("043/tile.mvt")}; + const std::string buffer{open_tile("043/tile.mvt")}; vtzero::vector_tile tile{buffer}; REQUIRE(tile.count_layers() == 1); @@ -749,7 +754,7 @@ TEST_CASE("MVT test 043: A layer with six points that all share the same key but } TEST_CASE("MVT test 044: Geometry field begins with a ClosePath command, which is invalid") { - std::string buffer{open_tile("044/tile.mvt")}; + const std::string buffer{open_tile("044/tile.mvt")}; vtzero::vector_tile tile{buffer}; REQUIRE(tile.count_layers() == 1); @@ -764,7 +769,7 @@ TEST_CASE("MVT test 044: Geometry field begins with a ClosePath command, which i } TEST_CASE("MVT test 045: Invalid point geometry that includes a MoveTo command and only half of the xy coordinates") { - std::string buffer{open_tile("045/tile.mvt")}; + const std::string buffer{open_tile("045/tile.mvt")}; vtzero::vector_tile tile{buffer}; REQUIRE(tile.count_layers() == 1); @@ -780,7 +785,7 @@ TEST_CASE("MVT test 045: Invalid point geometry that includes a MoveTo command a } TEST_CASE("MVT test 046: Invalid linestring geometry that includes two points in the same position, which is not OGC valid") { - std::string buffer{open_tile("046/tile.mvt")}; + const std::string buffer{open_tile("046/tile.mvt")}; vtzero::vector_tile tile{buffer}; REQUIRE(tile.count_layers() == 1); @@ -800,7 +805,7 @@ TEST_CASE("MVT test 046: Invalid linestring geometry that includes two points in } TEST_CASE("MVT test 047: Invalid polygon with wrong ClosePath count 2 (must be count 1)") { - std::string buffer{open_tile("047/tile.mvt")}; + const std::string buffer{open_tile("047/tile.mvt")}; vtzero::vector_tile tile{buffer}; REQUIRE(tile.count_layers() == 1); @@ -816,7 +821,7 @@ TEST_CASE("MVT test 047: Invalid polygon with wrong ClosePath count 2 (must be c } TEST_CASE("MVT test 048: Invalid polygon with wrong ClosePath count 0 (must be count 1)") { - std::string buffer{open_tile("048/tile.mvt")}; + const std::string buffer{open_tile("048/tile.mvt")}; vtzero::vector_tile tile{buffer}; REQUIRE(tile.count_layers() == 1); @@ -832,7 +837,7 @@ TEST_CASE("MVT test 048: Invalid polygon with wrong ClosePath count 0 (must be c } TEST_CASE("MVT test 049: decoding linestring with int32 overflow in x coordinate") { - std::string buffer{open_tile("049/tile.mvt")}; + const std::string buffer{open_tile("049/tile.mvt")}; vtzero::vector_tile tile{buffer}; REQUIRE(tile.count_layers() == 1); @@ -852,7 +857,7 @@ TEST_CASE("MVT test 049: decoding linestring with int32 overflow in x coordinate } TEST_CASE("MVT test 050: decoding linestring with int32 overflow in y coordinate") { - std::string buffer{open_tile("050/tile.mvt")}; + const std::string buffer{open_tile("050/tile.mvt")}; vtzero::vector_tile tile{buffer}; REQUIRE(tile.count_layers() == 1); @@ -872,7 +877,7 @@ TEST_CASE("MVT test 050: decoding linestring with int32 overflow in y coordinate } TEST_CASE("MVT test 051: multipoint with a huge count value, useful for ensuring no over-allocation errors. Example error message \"count too large\"") { - std::string buffer{open_tile("051/tile.mvt")}; + const std::string buffer{open_tile("051/tile.mvt")}; vtzero::vector_tile tile{buffer}; REQUIRE(tile.count_layers() == 1); @@ -888,7 +893,7 @@ TEST_CASE("MVT test 051: multipoint with a huge count value, useful for ensuring } TEST_CASE("MVT test 052: multipoint with not enough points") { - std::string buffer{open_tile("052/tile.mvt")}; + const std::string buffer{open_tile("052/tile.mvt")}; vtzero::vector_tile tile{buffer}; REQUIRE(tile.count_layers() == 1); @@ -903,7 +908,7 @@ TEST_CASE("MVT test 052: multipoint with not enough points") { } TEST_CASE("MVT test 053: clipped square (exact extent): a polygon that covers the entire tile to the exact boundary") { - std::string buffer{open_tile("053/tile.mvt")}; + const std::string buffer{open_tile("053/tile.mvt")}; vtzero::vector_tile tile{buffer}; REQUIRE(tile.count_layers() == 1); @@ -923,7 +928,7 @@ TEST_CASE("MVT test 053: clipped square (exact extent): a polygon that covers th } TEST_CASE("MVT test 054: clipped square (one unit buffer): a polygon that covers the entire tile plus a one unit buffer") { - std::string buffer{open_tile("054/tile.mvt")}; + const std::string buffer{open_tile("054/tile.mvt")}; vtzero::vector_tile tile{buffer}; REQUIRE(tile.count_layers() == 1); @@ -943,7 +948,7 @@ TEST_CASE("MVT test 054: clipped square (one unit buffer): a polygon that covers } TEST_CASE("MVT test 055: clipped square (minus one unit buffer): a polygon that almost covers the entire tile minus one unit buffer") { - std::string buffer{open_tile("055/tile.mvt")}; + const std::string buffer{open_tile("055/tile.mvt")}; vtzero::vector_tile tile{buffer}; REQUIRE(tile.count_layers() == 1); @@ -963,7 +968,7 @@ TEST_CASE("MVT test 055: clipped square (minus one unit buffer): a polygon that } TEST_CASE("MVT test 056: clipped square (large buffer): a polygon that covers the entire tile plus a 200 unit buffer") { - std::string buffer{open_tile("056/tile.mvt")}; + const std::string buffer{open_tile("056/tile.mvt")}; vtzero::vector_tile tile{buffer}; REQUIRE(tile.count_layers() == 1); @@ -983,7 +988,7 @@ TEST_CASE("MVT test 056: clipped square (large buffer): a polygon that covers th } TEST_CASE("MVT test 057: A point fixture with a gigantic MoveTo command. Can be used to test decoders for memory overallocation situations") { - std::string buffer{open_tile("057/tile.mvt")}; + const std::string buffer{open_tile("057/tile.mvt")}; vtzero::vector_tile tile{buffer}; REQUIRE(tile.count_layers() == 1); @@ -999,7 +1004,7 @@ TEST_CASE("MVT test 057: A point fixture with a gigantic MoveTo command. Can be } TEST_CASE("MVT test 058: A linestring fixture with a gigantic LineTo command") { - std::string buffer{open_tile("058/tile.mvt")}; + const std::string buffer{open_tile("058/tile.mvt")}; vtzero::vector_tile tile{buffer}; REQUIRE(tile.count_layers() == 1); diff --git a/test/include/test.hpp b/test/include/test.hpp index ba2daaa..d1c2703 100644 --- a/test/include/test.hpp +++ b/test/include/test.hpp @@ -1,7 +1,7 @@ #ifndef TEST_HPP #define TEST_HPP -#include +#include // IWYU pragma: export #include @@ -12,10 +12,10 @@ struct assert_error : public std::runtime_error { } }; -// NOLINTNEXTLINE(cppcoreguidelines-macro-usage) +// NOLINTNEXTLINE(cppcoreguidelines-macro-usage, readability-simplify-boolean-expr) #define vtzero_assert(x) if (!(x)) { throw assert_error{#x}; } -// NOLINTNEXTLINE(cppcoreguidelines-macro-usage) +// NOLINTNEXTLINE(cppcoreguidelines-macro-usage, readability-simplify-boolean-expr) #define vtzero_assert_in_noexcept_function(x) if (!(x)) { got_an_assert = true; } // NOLINTNEXTLINE(cppcoreguidelines-avoid-non-const-global-variables) diff --git a/test/t/test_builder.cpp b/test/t/test_builder.cpp index c0a4583..276f87d 100644 --- a/test/t/test_builder.cpp +++ b/test/t/test_builder.cpp @@ -9,9 +9,13 @@ #include #include +#include +#include #include +#include #include #include +#include template struct movable_not_copyable { @@ -52,11 +56,11 @@ TEST_CASE("Create tile from existing layers") { TEST_CASE("Create layer based on existing layer") { const auto orig_tile_buffer = load_test_tile(); - vtzero::vector_tile tile{orig_tile_buffer}; + const vtzero::vector_tile tile{orig_tile_buffer}; const auto layer = tile.get_layer_by_name("place_label"); vtzero::tile_builder tbuilder; - vtzero::layer_builder lbuilder{tbuilder, layer}; + const vtzero::layer_builder lbuilder{tbuilder, layer}; vtzero::point_feature_builder fbuilder{lbuilder}; fbuilder.set_id(42); fbuilder.add_point(10, 20); @@ -111,14 +115,14 @@ TEST_CASE("Create layer and add keys/values") { REQUIRE(ki1 == ki3); const auto vi1 = lbuilder.add_value_without_dup_check(vtzero::encoded_property_value{"value1"}); - vtzero::encoded_property_value value2{"value2"}; + const vtzero::encoded_property_value value2{"value2"}; const auto vi2 = lbuilder.add_value_without_dup_check(vtzero::property_value{value2.data()}); const auto vi3 = lbuilder.add_value(vtzero::encoded_property_value{"value1"}); const auto vi4 = lbuilder.add_value(vtzero::encoded_property_value{19}); const auto vi5 = lbuilder.add_value(vtzero::encoded_property_value{19.0}); const auto vi6 = lbuilder.add_value(vtzero::encoded_property_value{22}); - vtzero::encoded_property_value nineteen{19}; + const vtzero::encoded_property_value nineteen{19}; const auto vi7 = lbuilder.add_value(vtzero::property_value{nineteen.data()}); REQUIRE(vi1 != vi2); @@ -133,7 +137,7 @@ TEST_CASE("Create layer and add keys/values") { TEST_CASE("Committing a feature succeeds after a geometry was added") { vtzero::tile_builder tbuilder; - vtzero::layer_builder lbuilder{tbuilder, "test"}; + const vtzero::layer_builder lbuilder{tbuilder, "test"}; { // explicit commit after geometry vtzero::point_feature_builder fbuilder{lbuilder}; @@ -184,7 +188,7 @@ TEST_CASE("Committing a feature succeeds after a geometry was added") { TEST_CASE("Committing a feature fails with assert if no geometry was added") { vtzero::tile_builder tbuilder; - vtzero::layer_builder lbuilder{tbuilder, "test"}; + const vtzero::layer_builder lbuilder{tbuilder, "test"}; SECTION("explicit immediate commit") { vtzero::point_feature_builder fbuilder{lbuilder}; @@ -200,7 +204,7 @@ TEST_CASE("Committing a feature fails with assert if no geometry was added") { TEST_CASE("Rollback feature") { vtzero::tile_builder tbuilder; - vtzero::layer_builder lbuilder{tbuilder, "test"}; + const vtzero::layer_builder lbuilder{tbuilder, "test"}; { vtzero::point_feature_builder fbuilder{lbuilder}; @@ -271,7 +275,9 @@ TEST_CASE("Rollback feature") { REQUIRE_FALSE(feature); } -static vtzero::layer next_nonempty_layer(vtzero::vector_tile& tile) { +namespace { + +vtzero::layer next_nonempty_layer(vtzero::vector_tile& tile) { while (auto layer = tile.next_layer()) { if (layer && !layer.empty()) { return layer; @@ -280,7 +286,7 @@ static vtzero::layer next_nonempty_layer(vtzero::vector_tile& tile) { return vtzero::layer{}; } -static bool vector_tile_equal(const std::string& t1, const std::string& t2) { +bool vector_tile_equal(const std::string& t1, const std::string& t2) { vtzero::vector_tile vt1{t1}; vtzero::vector_tile vt2{t2}; @@ -324,6 +330,8 @@ static bool vector_tile_equal(const std::string& t1, const std::string& t2) { return true; } +} // anonymous namespace + TEST_CASE("vector_tile_equal") { REQUIRE(vector_tile_equal("", "")); @@ -358,7 +366,7 @@ TEST_CASE("Copy tile using geometry_feature_builder") { vtzero::tile_builder tbuilder; while (auto layer = tile.next_layer()) { - vtzero::layer_builder lbuilder{tbuilder, layer}; + const vtzero::layer_builder lbuilder{tbuilder, layer}; while (auto feature = layer.next_feature()) { vtzero::geometry_feature_builder fbuilder{lbuilder}; fbuilder.copy_id(feature); @@ -402,7 +410,7 @@ TEST_CASE("Copy only point geometries using geometry_feature_builder") { int n = 0; while (auto layer = tile.next_layer()) { - vtzero::layer_builder lbuilder{tbuilder, layer}; + const vtzero::layer_builder lbuilder{tbuilder, layer}; while (auto feature = layer.next_feature()) { vtzero::geometry_feature_builder fbuilder{lbuilder}; fbuilder.set_id(feature.id()); @@ -435,7 +443,7 @@ TEST_CASE("Copy only point geometries using geometry_feature_builder") { struct points_to_vector { - std::vector m_points{}; + std::vector m_points; void points_begin(const uint32_t count) { m_points.reserve(count); @@ -462,7 +470,7 @@ TEST_CASE("Copy only point geometries using point_feature_builder") { int n = 0; while (auto layer = tile.next_layer()) { - vtzero::layer_builder lbuilder{tbuilder, layer}; + const vtzero::layer_builder lbuilder{tbuilder, layer}; while (auto feature = layer.next_feature()) { vtzero::point_feature_builder fbuilder{lbuilder}; fbuilder.copy_id(feature); @@ -551,21 +559,21 @@ TEST_CASE("Build point feature from container with too many points") { }; vtzero::tile_builder tbuilder; - vtzero::layer_builder lbuilder{tbuilder, "test"}; + const vtzero::layer_builder lbuilder{tbuilder, "test"}; vtzero::point_feature_builder fbuilder{lbuilder}; fbuilder.set_id(1); - test_container tc; + const test_container tc; REQUIRE_THROWS_AS(fbuilder.add_points_from_container(tc), vtzero::geometry_exception); } TEST_CASE("Moving a feature builder is allowed") { vtzero::tile_builder tbuilder; - vtzero::layer_builder lbuilder{tbuilder, "test"}; + const vtzero::layer_builder lbuilder{tbuilder, "test"}; vtzero::point_feature_builder fbuilder{lbuilder}; auto fbuilder2 = std::move(fbuilder); - vtzero::point_feature_builder fbuilder3{std::move(fbuilder2)}; + const vtzero::point_feature_builder fbuilder3{std::move(fbuilder2)}; } diff --git a/test/t/test_builder_linestring.cpp b/test/t/test_builder_linestring.cpp index dde350d..40cf7dc 100644 --- a/test/t/test_builder_linestring.cpp +++ b/test/t/test_builder_linestring.cpp @@ -10,6 +10,8 @@ #include #include +namespace { + using ls_type = std::vector>; struct linestring_handler { @@ -30,9 +32,9 @@ struct linestring_handler { }; -static void test_linestring_builder(bool with_id, bool with_prop) { +void test_linestring_builder(bool with_id, bool with_prop) { vtzero::tile_builder tbuilder; - vtzero::layer_builder lbuilder{tbuilder, "test"}; + const vtzero::layer_builder lbuilder{tbuilder, "test"}; { vtzero::linestring_feature_builder fbuilder{lbuilder}; @@ -73,41 +75,9 @@ static void test_linestring_builder(bool with_id, bool with_prop) { REQUIRE(handler.data == result); } -TEST_CASE("linestring builder without id/without properties") { - test_linestring_builder(false, false); -} - -TEST_CASE("linestring builder without id/with properties") { - test_linestring_builder(false, true); -} - -TEST_CASE("linestring builder with id/without properties") { - test_linestring_builder(true, false); -} - -TEST_CASE("linestring builder with id/with properties") { - test_linestring_builder(true, true); -} - -TEST_CASE("Calling add_linestring() with bad values throws assert") { - vtzero::tile_builder tbuilder; - vtzero::layer_builder lbuilder{tbuilder, "test"}; - vtzero::linestring_feature_builder fbuilder{lbuilder}; - - SECTION("0") { - REQUIRE_THROWS_AS(fbuilder.add_linestring(0), assert_error); - } - SECTION("1") { - REQUIRE_THROWS_AS(fbuilder.add_linestring(1), assert_error); - } - SECTION("2^29") { - REQUIRE_THROWS_AS(fbuilder.add_linestring(1UL << 29U), assert_error); - } -} - -static void test_multilinestring_builder(bool with_id, bool with_prop) { +void test_multilinestring_builder(bool with_id, bool with_prop) { vtzero::tile_builder tbuilder; - vtzero::layer_builder lbuilder{tbuilder, "test"}; + const vtzero::layer_builder lbuilder{tbuilder, "test"}; vtzero::linestring_feature_builder fbuilder{lbuilder}; if (with_id) { @@ -149,6 +119,39 @@ static void test_multilinestring_builder(bool with_id, bool with_prop) { REQUIRE(handler.data == result); } +} // anonymous namespace + +TEST_CASE("linestring builder without id/without properties") { + test_linestring_builder(false, false); +} + +TEST_CASE("linestring builder without id/with properties") { + test_linestring_builder(false, true); +} + +TEST_CASE("linestring builder with id/without properties") { + test_linestring_builder(true, false); +} + +TEST_CASE("linestring builder with id/with properties") { + test_linestring_builder(true, true); +} + +TEST_CASE("Calling add_linestring() with bad values throws assert") { + vtzero::tile_builder tbuilder; + const vtzero::layer_builder lbuilder{tbuilder, "test"}; + vtzero::linestring_feature_builder fbuilder{lbuilder}; + + SECTION("0") { + REQUIRE_THROWS_AS(fbuilder.add_linestring(0), assert_error); + } + SECTION("1") { + REQUIRE_THROWS_AS(fbuilder.add_linestring(1), assert_error); + } + SECTION("2^29") { + REQUIRE_THROWS_AS(fbuilder.add_linestring(1UL << 29U), assert_error); + } +} TEST_CASE("Multilinestring builder without id/without properties") { test_multilinestring_builder(false, false); @@ -168,7 +171,7 @@ TEST_CASE("Multilinestring builder with id/with properties") { TEST_CASE("Calling add_linestring() twice throws assert") { vtzero::tile_builder tbuilder; - vtzero::layer_builder lbuilder{tbuilder, "test"}; + const vtzero::layer_builder lbuilder{tbuilder, "test"}; vtzero::linestring_feature_builder fbuilder{lbuilder}; fbuilder.add_linestring(3); @@ -177,7 +180,7 @@ TEST_CASE("Calling add_linestring() twice throws assert") { TEST_CASE("Calling linestring_feature_builder::set_point() throws assert") { vtzero::tile_builder tbuilder; - vtzero::layer_builder lbuilder{tbuilder, "test"}; + const vtzero::layer_builder lbuilder{tbuilder, "test"}; vtzero::linestring_feature_builder fbuilder{lbuilder}; REQUIRE_THROWS_AS(fbuilder.set_point(10, 10), assert_error); @@ -185,7 +188,7 @@ TEST_CASE("Calling linestring_feature_builder::set_point() throws assert") { TEST_CASE("Calling linestring_feature_builder::set_point() with same point throws") { vtzero::tile_builder tbuilder; - vtzero::layer_builder lbuilder{tbuilder, "test"}; + const vtzero::layer_builder lbuilder{tbuilder, "test"}; vtzero::linestring_feature_builder fbuilder{lbuilder}; fbuilder.add_linestring(2); @@ -195,7 +198,7 @@ TEST_CASE("Calling linestring_feature_builder::set_point() with same point throw TEST_CASE("Calling linestring_feature_builder::set_point() too often throws assert") { vtzero::tile_builder tbuilder; - vtzero::layer_builder lbuilder{tbuilder, "test"}; + const vtzero::layer_builder lbuilder{tbuilder, "test"}; vtzero::linestring_feature_builder fbuilder{lbuilder}; fbuilder.add_linestring(2); @@ -208,7 +211,7 @@ TEST_CASE("Add linestring from container") { const ls_type points = {{{10, 20}, {20, 30}, {30, 40}}}; vtzero::tile_builder tbuilder; - vtzero::layer_builder lbuilder{tbuilder, "test"}; + const vtzero::layer_builder lbuilder{tbuilder, "test"}; { vtzero::linestring_feature_builder fbuilder{lbuilder}; @@ -254,7 +257,7 @@ TEST_CASE("Add linestring from iterator with wrong count throws assert") { const std::vector points = {{10, 20}, {20, 30}, {30, 40}}; vtzero::tile_builder tbuilder; - vtzero::layer_builder lbuilder{tbuilder, "test"}; + const vtzero::layer_builder lbuilder{tbuilder, "test"}; vtzero::linestring_feature_builder fbuilder{lbuilder}; REQUIRE_THROWS_AS(fbuilder.add_linestring(points.cbegin(), @@ -265,7 +268,7 @@ TEST_CASE("Add linestring from iterator with wrong count throws assert") { TEST_CASE("Adding several linestrings with feature rollback in the middle") { vtzero::tile_builder tbuilder; - vtzero::layer_builder lbuilder{tbuilder, "test"}; + const vtzero::layer_builder lbuilder{tbuilder, "test"}; { vtzero::linestring_feature_builder fbuilder{lbuilder}; diff --git a/test/t/test_builder_point.cpp b/test/t/test_builder_point.cpp index 3cb7e1d..1517b03 100644 --- a/test/t/test_builder_point.cpp +++ b/test/t/test_builder_point.cpp @@ -10,6 +10,8 @@ #include #include +namespace { + struct point_handler { std::vector data; @@ -27,9 +29,9 @@ struct point_handler { }; -static void test_point_builder(bool with_id, bool with_prop) { +void test_point_builder(bool with_id, bool with_prop) { vtzero::tile_builder tbuilder; - vtzero::layer_builder lbuilder{tbuilder, "test"}; + const vtzero::layer_builder lbuilder{tbuilder, "test"}; { vtzero::point_feature_builder fbuilder{lbuilder}; @@ -53,8 +55,8 @@ static void test_point_builder(bool with_id, bool with_prop) { } SECTION("add point using mypoint / property using property") { - vtzero::encoded_property_value pv{3.5}; - vtzero::property p{"foo", vtzero::property_value{pv.data()}}; + const vtzero::encoded_property_value pv{3.5}; + const vtzero::property p{"foo", vtzero::property_value{pv.data()}}; fbuilder.add_point(mypoint{10, 20}); if (with_prop) { fbuilder.add_property(p); @@ -84,38 +86,9 @@ static void test_point_builder(bool with_id, bool with_prop) { REQUIRE(handler.data == result); } -TEST_CASE("Point builder without id/without properties") { - test_point_builder(false, false); -} - -TEST_CASE("Point builder without id/with properties") { - test_point_builder(false, true); -} - -TEST_CASE("Point builder with id/without properties") { - test_point_builder(true, false); -} - -TEST_CASE("Point builder with id/with properties") { - test_point_builder(true, true); -} - -TEST_CASE("Calling add_points() with bad values throws assert") { - vtzero::tile_builder tbuilder; - vtzero::layer_builder lbuilder{tbuilder, "test"}; - vtzero::point_feature_builder fbuilder{lbuilder}; - - SECTION("0") { - REQUIRE_THROWS_AS(fbuilder.add_points(0), assert_error); - } - SECTION("2^29") { - REQUIRE_THROWS_AS(fbuilder.add_points(1UL << 29U), assert_error); - } -} - -static void test_multipoint_builder(bool with_id, bool with_prop) { +void test_multipoint_builder(bool with_id, bool with_prop) { vtzero::tile_builder tbuilder; - vtzero::layer_builder lbuilder{tbuilder, "test"}; + const vtzero::layer_builder lbuilder{tbuilder, "test"}; vtzero::point_feature_builder fbuilder{lbuilder}; if (with_id) { @@ -153,6 +126,36 @@ static void test_multipoint_builder(bool with_id, bool with_prop) { REQUIRE(handler.data == result); } +} // anonymous namespace + +TEST_CASE("Point builder without id/without properties") { + test_point_builder(false, false); +} + +TEST_CASE("Point builder without id/with properties") { + test_point_builder(false, true); +} + +TEST_CASE("Point builder with id/without properties") { + test_point_builder(true, false); +} + +TEST_CASE("Point builder with id/with properties") { + test_point_builder(true, true); +} + +TEST_CASE("Calling add_points() with bad values throws assert") { + vtzero::tile_builder tbuilder; + const vtzero::layer_builder lbuilder{tbuilder, "test"}; + vtzero::point_feature_builder fbuilder{lbuilder}; + + SECTION("0") { + REQUIRE_THROWS_AS(fbuilder.add_points(0), assert_error); + } + SECTION("2^29") { + REQUIRE_THROWS_AS(fbuilder.add_points(1UL << 29U), assert_error); + } +} TEST_CASE("Multipoint builder without id/without properties") { test_multipoint_builder(false, false); @@ -172,7 +175,7 @@ TEST_CASE("Multipoint builder with id/with properties") { TEST_CASE("Calling add_point() and then other geometry functions throws assert") { vtzero::tile_builder tbuilder; - vtzero::layer_builder lbuilder{tbuilder, "test"}; + const vtzero::layer_builder lbuilder{tbuilder, "test"}; vtzero::point_feature_builder fbuilder{lbuilder}; fbuilder.add_point(10, 20); @@ -190,7 +193,7 @@ TEST_CASE("Calling add_point() and then other geometry functions throws assert") TEST_CASE("Calling point_feature_builder::set_point() throws assert") { vtzero::tile_builder tbuilder; - vtzero::layer_builder lbuilder{tbuilder, "test"}; + const vtzero::layer_builder lbuilder{tbuilder, "test"}; vtzero::point_feature_builder fbuilder{lbuilder}; REQUIRE_THROWS_AS(fbuilder.set_point(10, 10), assert_error); @@ -198,7 +201,7 @@ TEST_CASE("Calling point_feature_builder::set_point() throws assert") { TEST_CASE("Calling add_points() and then other geometry functions throws assert") { vtzero::tile_builder tbuilder; - vtzero::layer_builder lbuilder{tbuilder, "test"}; + const vtzero::layer_builder lbuilder{tbuilder, "test"}; vtzero::point_feature_builder fbuilder{lbuilder}; fbuilder.add_points(2); @@ -213,7 +216,7 @@ TEST_CASE("Calling add_points() and then other geometry functions throws assert" TEST_CASE("Calling point_feature_builder::set_point() too often throws assert") { vtzero::tile_builder tbuilder; - vtzero::layer_builder lbuilder{tbuilder, "test"}; + const vtzero::layer_builder lbuilder{tbuilder, "test"}; vtzero::point_feature_builder fbuilder{lbuilder}; fbuilder.add_points(2); @@ -226,7 +229,7 @@ TEST_CASE("Add points from container") { const std::vector points = {{10, 20}, {20, 30}, {30, 40}}; vtzero::tile_builder tbuilder; - vtzero::layer_builder lbuilder{tbuilder, "test"}; + const vtzero::layer_builder lbuilder{tbuilder, "test"}; { vtzero::point_feature_builder fbuilder{lbuilder}; @@ -269,7 +272,7 @@ TEST_CASE("Add points from iterator with wrong count throws assert") { const std::vector points = {{10, 20}, {20, 30}, {30, 40}}; vtzero::tile_builder tbuilder; - vtzero::layer_builder lbuilder{tbuilder, "test"}; + const vtzero::layer_builder lbuilder{tbuilder, "test"}; vtzero::point_feature_builder fbuilder{lbuilder}; REQUIRE_THROWS_AS(fbuilder.add_points(points.cbegin(), diff --git a/test/t/test_builder_polygon.cpp b/test/t/test_builder_polygon.cpp index 22abf88..f3c5a8c 100644 --- a/test/t/test_builder_polygon.cpp +++ b/test/t/test_builder_polygon.cpp @@ -10,6 +10,8 @@ #include #include +namespace { + using polygon_type = std::vector>; struct polygon_handler { @@ -30,9 +32,9 @@ struct polygon_handler { }; -static void test_polygon_builder(bool with_id, bool with_prop) { +void test_polygon_builder(bool with_id, bool with_prop) { vtzero::tile_builder tbuilder; - vtzero::layer_builder lbuilder{tbuilder, "test"}; + const vtzero::layer_builder lbuilder{tbuilder, "test"}; { vtzero::polygon_feature_builder fbuilder{lbuilder}; @@ -74,47 +76,9 @@ static void test_polygon_builder(bool with_id, bool with_prop) { REQUIRE(handler.data == result); } -TEST_CASE("polygon builder without id/without properties") { - test_polygon_builder(false, false); -} - -TEST_CASE("polygon builder without id/with properties") { - test_polygon_builder(false, true); -} - -TEST_CASE("polygon builder with id/without properties") { - test_polygon_builder(true, false); -} - -TEST_CASE("polygon builder with id/with properties") { - test_polygon_builder(true, true); -} - -TEST_CASE("Calling add_ring() with bad values throws assert") { - vtzero::tile_builder tbuilder; - vtzero::layer_builder lbuilder{tbuilder, "test"}; - vtzero::polygon_feature_builder fbuilder{lbuilder}; - - SECTION("0") { - REQUIRE_THROWS_AS(fbuilder.add_ring(0), assert_error); - } - SECTION("1") { - REQUIRE_THROWS_AS(fbuilder.add_ring(1), assert_error); - } - SECTION("2") { - REQUIRE_THROWS_AS(fbuilder.add_ring(2), assert_error); - } - SECTION("3") { - REQUIRE_THROWS_AS(fbuilder.add_ring(3), assert_error); - } - SECTION("2^29") { - REQUIRE_THROWS_AS(fbuilder.add_ring(1UL << 29U), assert_error); - } -} - -static void test_multipolygon_builder(bool with_id, bool with_prop) { +void test_multipolygon_builder(bool with_id, bool with_prop) { vtzero::tile_builder tbuilder; - vtzero::layer_builder lbuilder{tbuilder, "test"}; + const vtzero::layer_builder lbuilder{tbuilder, "test"}; vtzero::polygon_feature_builder fbuilder{lbuilder}; if (with_id) { @@ -167,6 +131,46 @@ static void test_multipolygon_builder(bool with_id, bool with_prop) { } +} // anonymous namespace + +TEST_CASE("polygon builder without id/without properties") { + test_polygon_builder(false, false); +} + +TEST_CASE("polygon builder without id/with properties") { + test_polygon_builder(false, true); +} + +TEST_CASE("polygon builder with id/without properties") { + test_polygon_builder(true, false); +} + +TEST_CASE("polygon builder with id/with properties") { + test_polygon_builder(true, true); +} + +TEST_CASE("Calling add_ring() with bad values throws assert") { + vtzero::tile_builder tbuilder; + const vtzero::layer_builder lbuilder{tbuilder, "test"}; + vtzero::polygon_feature_builder fbuilder{lbuilder}; + + SECTION("0") { + REQUIRE_THROWS_AS(fbuilder.add_ring(0), assert_error); + } + SECTION("1") { + REQUIRE_THROWS_AS(fbuilder.add_ring(1), assert_error); + } + SECTION("2") { + REQUIRE_THROWS_AS(fbuilder.add_ring(2), assert_error); + } + SECTION("3") { + REQUIRE_THROWS_AS(fbuilder.add_ring(3), assert_error); + } + SECTION("2^29") { + REQUIRE_THROWS_AS(fbuilder.add_ring(1UL << 29U), assert_error); + } +} + TEST_CASE("Multipolygon builder without id/without properties") { test_multipolygon_builder(false, false); } @@ -185,7 +189,7 @@ TEST_CASE("Multipolygon builder with id/with properties") { TEST_CASE("Calling add_ring() twice throws assert") { vtzero::tile_builder tbuilder; - vtzero::layer_builder lbuilder{tbuilder, "test"}; + const vtzero::layer_builder lbuilder{tbuilder, "test"}; vtzero::polygon_feature_builder fbuilder{lbuilder}; fbuilder.add_ring(4); @@ -194,7 +198,7 @@ TEST_CASE("Calling add_ring() twice throws assert") { TEST_CASE("Calling polygon_feature_builder::set_point()/close_ring() throws assert") { vtzero::tile_builder tbuilder; - vtzero::layer_builder lbuilder{tbuilder, "test"}; + const vtzero::layer_builder lbuilder{tbuilder, "test"}; vtzero::polygon_feature_builder fbuilder{lbuilder}; SECTION("set_point") { @@ -207,7 +211,7 @@ TEST_CASE("Calling polygon_feature_builder::set_point()/close_ring() throws asse TEST_CASE("Calling polygon_feature_builder::set_point()/close_ring() too often throws assert") { vtzero::tile_builder tbuilder; - vtzero::layer_builder lbuilder{tbuilder, "test"}; + const vtzero::layer_builder lbuilder{tbuilder, "test"}; vtzero::polygon_feature_builder fbuilder{lbuilder}; fbuilder.add_ring(4); @@ -226,7 +230,7 @@ TEST_CASE("Calling polygon_feature_builder::set_point()/close_ring() too often t TEST_CASE("Calling polygon_feature_builder::set_point() with same point throws") { vtzero::tile_builder tbuilder; - vtzero::layer_builder lbuilder{tbuilder, "test"}; + const vtzero::layer_builder lbuilder{tbuilder, "test"}; vtzero::polygon_feature_builder fbuilder{lbuilder}; fbuilder.add_ring(4); @@ -236,7 +240,7 @@ TEST_CASE("Calling polygon_feature_builder::set_point() with same point throws") TEST_CASE("Calling polygon_feature_builder::set_point() creating unclosed ring throws") { vtzero::tile_builder tbuilder; - vtzero::layer_builder lbuilder{tbuilder, "test"}; + const vtzero::layer_builder lbuilder{tbuilder, "test"}; vtzero::polygon_feature_builder fbuilder{lbuilder}; fbuilder.add_ring(4); @@ -250,7 +254,7 @@ TEST_CASE("Add polygon from container") { const polygon_type points = {{{10, 20}, {20, 30}, {30, 40}, {10, 20}}}; vtzero::tile_builder tbuilder; - vtzero::layer_builder lbuilder{tbuilder, "test"}; + const vtzero::layer_builder lbuilder{tbuilder, "test"}; { vtzero::polygon_feature_builder fbuilder{lbuilder}; @@ -296,7 +300,7 @@ TEST_CASE("Add polygon from iterator with wrong count throws assert") { const std::vector points = {{10, 20}, {20, 30}, {30, 40}, {10, 20}}; vtzero::tile_builder tbuilder; - vtzero::layer_builder lbuilder{tbuilder, "test"}; + const vtzero::layer_builder lbuilder{tbuilder, "test"}; vtzero::polygon_feature_builder fbuilder{lbuilder}; REQUIRE_THROWS_AS(fbuilder.add_ring(points.cbegin(), diff --git a/test/t/test_exceptions.cpp b/test/t/test_exceptions.cpp index 7e5c691..98fd1a8 100644 --- a/test/t/test_exceptions.cpp +++ b/test/t/test_exceptions.cpp @@ -6,37 +6,37 @@ #include TEST_CASE("construct format_exception with const char*") { - vtzero::format_exception e{"broken"}; + const vtzero::format_exception e{"broken"}; REQUIRE(std::string{e.what()} == "broken"); } TEST_CASE("construct format_exception with const std::string") { - vtzero::format_exception e{std::string{"broken"}}; + const vtzero::format_exception e{std::string{"broken"}}; REQUIRE(std::string{e.what()} == "broken"); } TEST_CASE("construct geometry_exception with const char*") { - vtzero::geometry_exception e{"broken"}; + const vtzero::geometry_exception e{"broken"}; REQUIRE(std::string{e.what()} == "broken"); } TEST_CASE("construct geometry_exception with std::string") { - vtzero::geometry_exception e{std::string{"broken"}}; + const vtzero::geometry_exception e{std::string{"broken"}}; REQUIRE(std::string{e.what()} == "broken"); } TEST_CASE("construct type_exception") { - vtzero::type_exception e; + const vtzero::type_exception e; REQUIRE(std::string{e.what()} == "wrong property value type"); } TEST_CASE("construct version_exception") { - vtzero::version_exception e{42}; + const vtzero::version_exception e{42}; REQUIRE(std::string{e.what()} == "unknown vector tile version: 42"); } TEST_CASE("construct out_of_range_exception") { - vtzero::out_of_range_exception e{99}; + const vtzero::out_of_range_exception e{99}; REQUIRE(std::string{e.what()} == "index out of range: 99"); } diff --git a/test/t/test_feature.cpp b/test/t/test_feature.cpp index c3061b8..a4f1b1d 100644 --- a/test/t/test_feature.cpp +++ b/test/t/test_feature.cpp @@ -6,7 +6,7 @@ #include TEST_CASE("default constructed feature") { - vtzero::feature feature{}; + const vtzero::feature feature{}; REQUIRE_FALSE(feature.valid()); REQUIRE_FALSE(feature); @@ -20,7 +20,7 @@ TEST_CASE("default constructed feature") { TEST_CASE("read a feature") { const auto data = load_test_tile(); - vtzero::vector_tile tile{data}; + const vtzero::vector_tile tile{data}; auto layer = tile.get_layer_by_name("bridge"); REQUIRE(layer.valid()); @@ -37,7 +37,7 @@ TEST_CASE("read a feature") { TEST_CASE("iterate over all properties of a feature") { const auto data = load_test_tile(); - vtzero::vector_tile tile{data}; + const vtzero::vector_tile tile{data}; auto layer = tile.get_layer_by_name("bridge"); auto feature = layer.next_feature(); @@ -68,7 +68,7 @@ TEST_CASE("iterate over all properties of a feature") { TEST_CASE("iterate over some properties of a feature") { const auto data = load_test_tile(); - vtzero::vector_tile tile{data}; + const vtzero::vector_tile tile{data}; auto layer = tile.get_layer_by_name("bridge"); REQUIRE(layer.valid()); diff --git a/test/t/test_geometry_linestring.cpp b/test/t/test_geometry_linestring.cpp index ce17e84..280da9c 100644 --- a/test/t/test_geometry_linestring.cpp +++ b/test/t/test_geometry_linestring.cpp @@ -37,7 +37,7 @@ TEST_CASE("Calling decode_linestring_geometry() with empty input") { const container g; vtzero::detail::geometry_decoder decoder{g.begin(), g.end(), g.size() / 2}; - dummy_geom_handler handler; + const dummy_geom_handler handler; decoder.decode_linestring(dummy_geom_handler{}); REQUIRE(handler.result() == 0); } diff --git a/test/t/test_geometry_polygon.cpp b/test/t/test_geometry_polygon.cpp index 08a78bc..e811959 100644 --- a/test/t/test_geometry_polygon.cpp +++ b/test/t/test_geometry_polygon.cpp @@ -37,7 +37,7 @@ TEST_CASE("Calling decode_polygon_geometry() with empty input") { const container g; vtzero::detail::geometry_decoder decoder{g.begin(), g.end(), g.size() / 2}; - dummy_geom_handler handler; + const dummy_geom_handler handler; decoder.decode_polygon(dummy_geom_handler{}); REQUIRE(handler.result() == 0); } diff --git a/test/t/test_index.cpp b/test/t/test_index.cpp index 6bd9a6a..238d3c1 100644 --- a/test/t/test_index.cpp +++ b/test/t/test_index.cpp @@ -4,6 +4,7 @@ #include #include +#include #include #include #include @@ -46,8 +47,10 @@ TEST_CASE("add values to layer using value index built into layer") { } } +namespace { + template -static void test_key_index() { +void test_key_index() { vtzero::tile_builder tbuilder; vtzero::layer_builder lbuilder{tbuilder, "test"}; TIndex index{lbuilder}; @@ -83,16 +86,8 @@ static void test_key_index() { REQUIRE(i6 != i7); } -TEST_CASE("key index based on std::unordered_map") { - test_key_index>(); -} - -TEST_CASE("key index based on std::map") { - test_key_index>(); -} - template -static void test_value_index_internal() { +void test_value_index_internal() { vtzero::tile_builder tbuilder; vtzero::layer_builder lbuilder{tbuilder, "test"}; TIndex index{lbuilder}; @@ -133,6 +128,16 @@ static void test_value_index_internal() { REQUIRE(i6 != i7); } +} // anonymous namespace + +TEST_CASE("key index based on std::unordered_map") { + test_key_index>(); +} + +TEST_CASE("key index based on std::map") { + test_key_index>(); +} + TEST_CASE("internal value index based on std::unordered_map") { test_value_index_internal>(); } diff --git a/test/t/test_layer.cpp b/test/t/test_layer.cpp index 9930ba7..779bd47 100644 --- a/test/t/test_layer.cpp +++ b/test/t/test_layer.cpp @@ -5,6 +5,7 @@ #include #include +#include TEST_CASE("default constructed layer") { vtzero::layer layer{}; @@ -32,7 +33,7 @@ TEST_CASE("default constructed layer") { TEST_CASE("read a layer") { const auto data = load_test_tile(); - vtzero::vector_tile tile{data}; + const vtzero::vector_tile tile{data}; auto layer = tile.get_layer_by_name("bridge"); REQUIRE(layer.valid()); @@ -71,7 +72,7 @@ TEST_CASE("read a layer") { TEST_CASE("access features in a layer by id") { const auto data = load_test_tile(); - vtzero::vector_tile tile{data}; + const vtzero::vector_tile tile{data}; auto layer = tile.get_layer_by_name("building"); REQUIRE(layer); @@ -91,7 +92,7 @@ TEST_CASE("access features in a layer by id") { TEST_CASE("iterate over all features in a layer") { const auto data = load_test_tile(); - vtzero::vector_tile tile{data}; + const vtzero::vector_tile tile{data}; auto layer = tile.get_layer_by_name("building"); REQUIRE(layer); @@ -117,7 +118,7 @@ TEST_CASE("iterate over all features in a layer") { TEST_CASE("iterate over some features in a layer") { const auto data = load_test_tile(); - vtzero::vector_tile tile{data}; + const vtzero::vector_tile tile{data}; auto layer = tile.get_layer_by_name("building"); REQUIRE(layer); diff --git a/test/t/test_output.cpp b/test/t/test_output.cpp index 52faff4..f336d4c 100644 --- a/test/t/test_output.cpp +++ b/test/t/test_output.cpp @@ -4,6 +4,8 @@ #include #include +namespace { + template std::string get_output(T v) { std::stringstream ss; @@ -11,6 +13,8 @@ std::string get_output(T v) { return ss.str(); } +} // anonymous namespace + TEST_CASE("output GeomType") { REQUIRE(get_output(vtzero::GeomType::UNKNOWN) == "unknown"); REQUIRE(get_output(vtzero::GeomType::POINT) == "point"); diff --git a/test/t/test_point.cpp b/test/t/test_point.cpp index 1c34776..2ed62f7 100644 --- a/test/t/test_point.cpp +++ b/test/t/test_point.cpp @@ -4,16 +4,16 @@ #include TEST_CASE("default constructed point") { - vtzero::point p{}; + const vtzero::point p{}; REQUIRE(p.x == 0); REQUIRE(p.y == 0); } TEST_CASE("point") { - vtzero::point p1{4, 5}; - vtzero::point p2{5, 4}; - vtzero::point p3{4, 5}; + const vtzero::point p1{4, 5}; + const vtzero::point p2{5, 4}; + const vtzero::point p3{4, 5}; REQUIRE(p1.x == 4); REQUIRE(p1.y == 5); diff --git a/test/t/test_property_map.cpp b/test/t/test_property_map.cpp index 025fe56..282f49f 100644 --- a/test/t/test_property_map.cpp +++ b/test/t/test_property_map.cpp @@ -14,7 +14,7 @@ using variant_type = boost::variant #include struct visitor_test_void { @@ -85,7 +86,7 @@ struct string_mapping : vtzero::property_value_mapping { }; TEST_CASE("default constructed property_value") { - vtzero::property_value pv; + const vtzero::property_value pv; REQUIRE_FALSE(pv.valid()); REQUIRE(pv.data().data() == nullptr); @@ -94,16 +95,16 @@ TEST_CASE("default constructed property_value") { } TEST_CASE("empty property_value") { - char x = 0; - vtzero::data_view dv{&x, 0}; - vtzero::property_value pv{dv}; + const char x = 0; + const vtzero::data_view dv{&x, 0}; + const vtzero::property_value pv{dv}; REQUIRE(pv.valid()); REQUIRE_THROWS_AS(pv.type(), vtzero::format_exception); } TEST_CASE("string value") { - vtzero::encoded_property_value epv{"foo"}; - vtzero::property_value pv{epv.data()}; + const vtzero::encoded_property_value epv{"foo"}; + const vtzero::property_value pv{epv.data()}; REQUIRE(pv.string_value() == "foo"); visitor_test_void vt; @@ -128,8 +129,8 @@ TEST_CASE("string value") { } TEST_CASE("float value") { - vtzero::encoded_property_value epv{1.2F}; - vtzero::property_value pv{epv.data()}; + const vtzero::encoded_property_value epv{1.2F}; + const vtzero::property_value pv{epv.data()}; REQUIRE(pv.float_value() == Approx(1.2)); visitor_test_void vt; @@ -151,8 +152,8 @@ TEST_CASE("float value") { } TEST_CASE("double value") { - vtzero::encoded_property_value epv{3.4}; - vtzero::property_value pv{epv.data()}; + const vtzero::encoded_property_value epv{3.4}; + const vtzero::property_value pv{epv.data()}; REQUIRE(pv.double_value() == Approx(3.4)); const auto result = vtzero::apply_visitor(visitor_test_int{}, pv); @@ -163,8 +164,8 @@ TEST_CASE("double value") { } TEST_CASE("int value") { - vtzero::encoded_property_value epv{vtzero::int_value_type{42}}; - vtzero::property_value pv{epv.data()}; + const vtzero::encoded_property_value epv{vtzero::int_value_type{42}}; + const vtzero::property_value pv{epv.data()}; REQUIRE(pv.int_value() == 42); const auto str = vtzero::apply_visitor(visitor_test_to_string{}, pv); @@ -175,8 +176,8 @@ TEST_CASE("int value") { } TEST_CASE("uint value") { - vtzero::encoded_property_value epv{vtzero::uint_value_type{99}}; - vtzero::property_value pv{epv.data()}; + const vtzero::encoded_property_value epv{vtzero::uint_value_type{99}}; + const vtzero::property_value pv{epv.data()}; REQUIRE(pv.uint_value() == 99); const auto str = vtzero::apply_visitor(visitor_test_to_string{}, pv); @@ -187,8 +188,8 @@ TEST_CASE("uint value") { } TEST_CASE("sint value") { - vtzero::encoded_property_value epv{vtzero::sint_value_type{42}}; - vtzero::property_value pv{epv.data()}; + const vtzero::encoded_property_value epv{vtzero::sint_value_type{42}}; + const vtzero::property_value pv{epv.data()}; REQUIRE(pv.sint_value() == 42); const auto str = vtzero::apply_visitor(visitor_test_to_string{}, pv); @@ -199,8 +200,8 @@ TEST_CASE("sint value") { } TEST_CASE("bool value") { - vtzero::encoded_property_value epv{true}; - vtzero::property_value pv{epv.data()}; + const vtzero::encoded_property_value epv{true}; + const vtzero::property_value pv{epv.data()}; REQUIRE(pv.bool_value()); const auto str = vtzero::apply_visitor(visitor_test_to_string{}, pv); @@ -211,10 +212,10 @@ TEST_CASE("bool value") { } TEST_CASE("property and property_value equality comparisons") { - vtzero::encoded_property_value t{true}; - vtzero::encoded_property_value f{false}; - vtzero::encoded_property_value v1{vtzero::int_value_type{1}}; - vtzero::encoded_property_value vs{"foo"}; + const vtzero::encoded_property_value t{true}; + const vtzero::encoded_property_value f{false}; + const vtzero::encoded_property_value v1{vtzero::int_value_type{1}}; + const vtzero::encoded_property_value vs{"foo"}; REQUIRE(t == t); REQUIRE_FALSE(t != t); @@ -233,8 +234,8 @@ TEST_CASE("property and property_value equality comparisons") { TEST_CASE("property and property_value ordering") { using pv = vtzero::property_value; - vtzero::encoded_property_value t{true}; - vtzero::encoded_property_value f{false}; + const vtzero::encoded_property_value t{true}; + const vtzero::encoded_property_value f{false}; REQUIRE_FALSE(t < f); REQUIRE_FALSE(t <= f); @@ -246,8 +247,8 @@ TEST_CASE("property and property_value ordering") { REQUIRE(pv{t.data()} > pv{f.data()}); REQUIRE(pv{t.data()} >= pv{f.data()}); - vtzero::encoded_property_value v1{vtzero::int_value_type{22}}; - vtzero::encoded_property_value v2{vtzero::int_value_type{17}}; + const vtzero::encoded_property_value v1{vtzero::int_value_type{22}}; + const vtzero::encoded_property_value v2{vtzero::int_value_type{17}}; REQUIRE_FALSE(v1 < v2); REQUIRE_FALSE(v1 <= v2); @@ -259,9 +260,9 @@ TEST_CASE("property and property_value ordering") { REQUIRE(pv{v1.data()} > pv{v2.data()}); REQUIRE(pv{v1.data()} >= pv{v2.data()}); - vtzero::encoded_property_value vsf{"foo"}; - vtzero::encoded_property_value vsb{"bar"}; - vtzero::encoded_property_value vsx{"foobar"}; + const vtzero::encoded_property_value vsf{"foo"}; + const vtzero::encoded_property_value vsb{"bar"}; + const vtzero::encoded_property_value vsx{"foobar"}; REQUIRE_FALSE(vsf < vsb); REQUIRE_FALSE(vsf <= vsb); @@ -285,7 +286,7 @@ TEST_CASE("property and property_value ordering") { } TEST_CASE("default constructed property") { - vtzero::property p; + const vtzero::property p; REQUIRE_FALSE(p.valid()); REQUIRE_FALSE(p); REQUIRE(p.key().data() == nullptr); @@ -293,11 +294,11 @@ TEST_CASE("default constructed property") { } TEST_CASE("valid property") { - vtzero::data_view k{"key"}; - vtzero::encoded_property_value epv{"value"}; - vtzero::property_value pv{epv.data()}; + const vtzero::data_view k{"key"}; + const vtzero::encoded_property_value epv{"value"}; + const vtzero::property_value pv{epv.data()}; - vtzero::property p{k, pv}; + const vtzero::property p{k, pv}; REQUIRE(p.key() == "key"); REQUIRE(p.value().string_value() == "value"); } @@ -305,11 +306,11 @@ TEST_CASE("valid property") { TEST_CASE("create encoded property values from different string types") { const std::string v{"value"}; - vtzero::encoded_property_value epv1{vtzero::string_value_type{"value"}}; - vtzero::encoded_property_value epv2{"value"}; - vtzero::encoded_property_value epv3{v}; - vtzero::encoded_property_value epv4{vtzero::data_view{v}}; - vtzero::encoded_property_value epv5{"valuexxxxxxxxx", 5}; + const vtzero::encoded_property_value epv1{vtzero::string_value_type{"value"}}; + const vtzero::encoded_property_value epv2{"value"}; + const vtzero::encoded_property_value epv3{v}; + const vtzero::encoded_property_value epv4{vtzero::data_view{v}}; + const vtzero::encoded_property_value epv5{"valuexxxxxxxxx", 5}; REQUIRE(epv1 == epv2); REQUIRE(epv1 == epv3); @@ -318,30 +319,30 @@ TEST_CASE("create encoded property values from different string types") { } TEST_CASE("create encoded property values from different floating point types") { - vtzero::encoded_property_value f1{vtzero::float_value_type{3.2F}}; - vtzero::encoded_property_value f2{3.2F}; - vtzero::encoded_property_value d1{vtzero::double_value_type{3.2}}; - vtzero::encoded_property_value d2{3.2}; + const vtzero::encoded_property_value f1{vtzero::float_value_type{3.2F}}; + const vtzero::encoded_property_value f2{3.2F}; + const vtzero::encoded_property_value d1{vtzero::double_value_type{3.2}}; + const vtzero::encoded_property_value d2{3.2}; REQUIRE(f1 == f2); REQUIRE(d1 == d2); - vtzero::property_value pvf{f1.data()}; - vtzero::property_value pvd{d1.data()}; + const vtzero::property_value pvf{f1.data()}; + const vtzero::property_value pvd{d1.data()}; REQUIRE(pvf.float_value() == Approx(pvd.double_value())); } TEST_CASE("create encoded property values from different integer types") { - vtzero::encoded_property_value i1{vtzero::int_value_type{7}}; - vtzero::encoded_property_value i2{static_cast(7)}; - vtzero::encoded_property_value i3{static_cast(7)}; - vtzero::encoded_property_value i4{static_cast(7)}; - vtzero::encoded_property_value u1{vtzero::uint_value_type{7}}; - vtzero::encoded_property_value u2{static_cast(7)}; - vtzero::encoded_property_value u3{static_cast(7)}; - vtzero::encoded_property_value u4{static_cast(7)}; - vtzero::encoded_property_value s1{vtzero::sint_value_type{7}}; + const vtzero::encoded_property_value i1{vtzero::int_value_type{7}}; + const vtzero::encoded_property_value i2{static_cast(7)}; + const vtzero::encoded_property_value i3{static_cast(7)}; + const vtzero::encoded_property_value i4{static_cast(7)}; + const vtzero::encoded_property_value u1{vtzero::uint_value_type{7}}; + const vtzero::encoded_property_value u2{static_cast(7)}; + const vtzero::encoded_property_value u3{static_cast(7)}; + const vtzero::encoded_property_value u4{static_cast(7)}; + const vtzero::encoded_property_value s1{vtzero::sint_value_type{7}}; REQUIRE(i1 == i2); REQUIRE(i1 == i3); @@ -357,50 +358,50 @@ TEST_CASE("create encoded property values from different integer types") { REQUIRE(i1.hash() == i2.hash()); REQUIRE(u1.hash() == u2.hash()); - vtzero::property_value pvi{i1.data()}; - vtzero::property_value pvu{u1.data()}; - vtzero::property_value pvs{s1.data()}; + const vtzero::property_value pvi{i1.data()}; + const vtzero::property_value pvu{u1.data()}; + const vtzero::property_value pvs{s1.data()}; REQUIRE(pvi.int_value() == static_cast(pvu.uint_value())); REQUIRE(pvi.int_value() == pvs.sint_value()); } TEST_CASE("create encoded property values from different bool types") { - vtzero::encoded_property_value b1{vtzero::bool_value_type{true}}; - vtzero::encoded_property_value b2{true}; + const vtzero::encoded_property_value b1{vtzero::bool_value_type{true}}; + const vtzero::encoded_property_value b2{true}; REQUIRE(b1 == b2); REQUIRE(b1.hash() == b2.hash()); } TEST_CASE("property equality comparison operator") { - std::string k = "key"; + const std::string k = "key"; - vtzero::encoded_property_value epv1{"value"}; - vtzero::encoded_property_value epv2{"another value"}; - vtzero::property_value pv1{epv1.data()}; - vtzero::property_value pv2{epv2.data()}; + const vtzero::encoded_property_value epv1{"value"}; + const vtzero::encoded_property_value epv2{"another value"}; + const vtzero::property_value pv1{epv1.data()}; + const vtzero::property_value pv2{epv2.data()}; - vtzero::property p1{k, pv1}; - vtzero::property p2{k, pv1}; - vtzero::property p3{k, pv2}; + const vtzero::property p1{k, pv1}; + const vtzero::property p2{k, pv1}; + const vtzero::property p3{k, pv2}; REQUIRE(p1 == p2); REQUIRE_FALSE(p1 == p3); } TEST_CASE("property inequality comparison operator") { - std::string k1 = "key"; - std::string k2 = "another_key"; - - vtzero::encoded_property_value epv1{"value"}; - vtzero::encoded_property_value epv2{"another value"}; - vtzero::property_value pv1{epv1.data()}; - vtzero::property_value pv2{epv2.data()}; - - vtzero::property p1{k1, pv1}; - vtzero::property p2{k1, pv1}; - vtzero::property p3{k1, pv2}; - vtzero::property p4{k2, pv2}; + const std::string k1 = "key"; + const std::string k2 = "another_key"; + + const vtzero::encoded_property_value epv1{"value"}; + const vtzero::encoded_property_value epv2{"another value"}; + const vtzero::property_value pv1{epv1.data()}; + const vtzero::property_value pv2{epv2.data()}; + + const vtzero::property p1{k1, pv1}; + const vtzero::property p2{k1, pv1}; + const vtzero::property p3{k1, pv2}; + const vtzero::property p4{k2, pv2}; REQUIRE_FALSE(p1 != p2); REQUIRE(p1 != p3); REQUIRE(p3 != p4); diff --git a/test/t/test_types.cpp b/test/t/test_types.cpp index 2b01b62..6dc6065 100644 --- a/test/t/test_types.cpp +++ b/test/t/test_types.cpp @@ -6,76 +6,76 @@ #include TEST_CASE("default constructed string_value_type") { - vtzero::string_value_type v; + const vtzero::string_value_type v; REQUIRE(v.value.data() == nullptr); } TEST_CASE("string_value_type with value") { - vtzero::string_value_type v{"foo"}; + const vtzero::string_value_type v{"foo"}; REQUIRE(v.value.data()[0] == 'f'); REQUIRE(v.value.size() == 3); } TEST_CASE("default constructed float_value_type") { - vtzero::float_value_type v; + const vtzero::float_value_type v; REQUIRE(v.value == Approx(0.0)); } TEST_CASE("float_value_type with value") { - float x = 2.7F; - vtzero::float_value_type v{x}; + const float x = 2.7F; + const vtzero::float_value_type v{x}; REQUIRE(v.value == Approx(x)); } TEST_CASE("default constructed double_value_type") { - vtzero::double_value_type v; + const vtzero::double_value_type v; REQUIRE(v.value == Approx(0.0)); } TEST_CASE("double_value_type with value") { - double x = 2.7; - vtzero::double_value_type v{x}; + const double x = 2.7; + const vtzero::double_value_type v{x}; REQUIRE(v.value == Approx(x)); } TEST_CASE("default constructed int_value_type") { - vtzero::int_value_type v; + const vtzero::int_value_type v; REQUIRE(v.value == 0); } TEST_CASE("int_value_type with value") { - vtzero::int_value_type v{123}; + const vtzero::int_value_type v{123}; REQUIRE(v.value == 123); } TEST_CASE("default constructed uint_value_type") { - vtzero::uint_value_type v; + const vtzero::uint_value_type v; REQUIRE(v.value == 0); } TEST_CASE("uint_value_type with value") { - vtzero::uint_value_type v{123}; + const vtzero::uint_value_type v{123}; REQUIRE(v.value == 123); } TEST_CASE("default constructed sint_value_type") { - vtzero::sint_value_type v; + const vtzero::sint_value_type v; REQUIRE(v.value == 0); } TEST_CASE("sint_value_type with value") { - vtzero::sint_value_type v{-14}; + const vtzero::sint_value_type v{-14}; REQUIRE(v.value == -14); } TEST_CASE("default constructed bool_value_type") { - vtzero::bool_value_type v; + const vtzero::bool_value_type v; REQUIRE_FALSE(v.value); } TEST_CASE("bool_value_type with value") { - bool x = true; - vtzero::bool_value_type v{x}; + const bool x = true; + const vtzero::bool_value_type v{x}; REQUIRE(v.value); } @@ -90,19 +90,19 @@ TEST_CASE("property_value_type names") { } TEST_CASE("default constructed index value") { - vtzero::index_value v; + const vtzero::index_value v; REQUIRE_FALSE(v.valid()); REQUIRE_ASSERT(v.value()); } TEST_CASE("valid index value") { - vtzero::index_value v{32}; + const vtzero::index_value v{32}; REQUIRE(v.valid()); REQUIRE(v.value() == 32); } TEST_CASE("default constructed geometry") { - vtzero::geometry geom; + const vtzero::geometry geom; REQUIRE(geom.type() == vtzero::GeomType::UNKNOWN); REQUIRE(geom.data().empty()); } diff --git a/test/t/test_vector_tile.cpp b/test/t/test_vector_tile.cpp index ff18332..2d3402f 100644 --- a/test/t/test_vector_tile.cpp +++ b/test/t/test_vector_tile.cpp @@ -9,7 +9,7 @@ TEST_CASE("open a vector tile with string") { const auto data = load_test_tile(); REQUIRE(vtzero::is_vector_tile(data)); - vtzero::vector_tile tile{data}; + const vtzero::vector_tile tile{data}; REQUIRE_FALSE(tile.empty()); REQUIRE(tile.count_layers() == 12); @@ -18,7 +18,7 @@ TEST_CASE("open a vector tile with string") { TEST_CASE("open a vector tile with data_view") { const auto data = load_test_tile(); const vtzero::data_view dv{data}; - vtzero::vector_tile tile{dv}; + const vtzero::vector_tile tile{dv}; REQUIRE_FALSE(tile.empty()); REQUIRE(tile.count_layers() == 12); @@ -26,7 +26,7 @@ TEST_CASE("open a vector tile with data_view") { TEST_CASE("open a vector tile with pointer and size") { const auto data = load_test_tile(); - vtzero::vector_tile tile{data.data(), data.size()}; + const vtzero::vector_tile tile{data.data(), data.size()}; REQUIRE_FALSE(tile.empty()); REQUIRE(tile.count_layers() == 12); @@ -34,7 +34,7 @@ TEST_CASE("open a vector tile with pointer and size") { TEST_CASE("get layer by index") { const auto data = load_test_tile(); - vtzero::vector_tile tile{data}; + const vtzero::vector_tile tile{data}; auto layer = tile.get_layer(0); REQUIRE(layer); @@ -54,7 +54,7 @@ TEST_CASE("get layer by index") { TEST_CASE("get layer by name") { const auto data = load_test_tile(); - vtzero::vector_tile tile{data}; + const vtzero::vector_tile tile{data}; auto layer = tile.get_layer_by_name("landuse"); REQUIRE(layer); @@ -95,7 +95,7 @@ TEST_CASE("iterate over layers") { REQUIRE(names.size() == 12); - static std::vector expected = { + const static std::vector expected = { "landuse", "waterway", "water", "barrier_line", "building", "road", "bridge", "place_label", "water_label", "poi_label", "road_label", "waterway_label" diff --git a/test/test_main.cpp b/test/test_main.cpp index 5fc371c..a5106c6 100644 --- a/test/test_main.cpp +++ b/test/test_main.cpp @@ -4,6 +4,7 @@ #include #include +#include #include #include @@ -11,7 +12,7 @@ bool got_an_assert = false; std::string load_test_tile() { - std::string path{"data/mapbox-streets-v6-14-8714-8017.mvt"}; + const std::string path{"data/mapbox-streets-v6-14-8714-8017.mvt"}; std::ifstream stream{path, std::ios_base::in|std::ios_base::binary}; if (!stream.is_open()) { throw std::runtime_error{"could not open: '" + path + "'"};