diff --git a/.github/workflows/clang-tidy.yml b/.github/workflows/clang-tidy.yml index e321a74e63..ce3506df23 100644 --- a/.github/workflows/clang-tidy.yml +++ b/.github/workflows/clang-tidy.yml @@ -30,8 +30,12 @@ on: options: - all - power_grid_model_c - - power_grid_model_api_tests - all power_grid_model_benchmark_cpp + - power_grid_model_unit_tests + - power_grid_model_api_tests + - power_grid_model_validation_tests + - power_grid_model_benchmark_cpp + - power_grid_model_c_example required: true concurrency: diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index 81fb9a6690..6d8a42e403 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -25,5 +25,4 @@ jobs: clang-tidy: uses: "./.github/workflows/clang-tidy.yml" with: - target: power_grid_model_c - # target: "all power_grid_model_benchmark_cpp" # TODO(mgovers): re-enable when more clang-tidy stuff is fixed + target: "all power_grid_model_benchmark_cpp" diff --git a/README.md b/README.md index d4d383f8c0..087e95b279 100644 --- a/README.md +++ b/README.md @@ -7,13 +7,14 @@ SPDX-License-Identifier: MPL-2.0 [![PyPI version](https://badge.fury.io/py/power-grid-model.svg?no-cache)](https://badge.fury.io/py/power-grid-model) [![Anaconda-Server Badge](https://anaconda.org/conda-forge/power-grid-model/badges/version.svg?no-cache)](https://anaconda.org/conda-forge/power-grid-model) [![License: MPL2.0](https://img.shields.io/badge/License-MPL2.0-informational.svg)](https://github.com/PowerGridModel/power-grid-model/blob/main/LICENSE) +[![Downloads](https://static.pepy.tech/badge/power-grid-model)](https://pepy.tech/project/power-grid-model) +[![Downloads](https://static.pepy.tech/badge/power-grid-model/month)](https://pepy.tech/project/power-grid-model) + [![Build and Test C++ and Python](https://github.com/PowerGridModel/power-grid-model/actions/workflows/main.yml/badge.svg)](https://github.com/PowerGridModel/power-grid-model/actions/workflows/main.yml) [![Check Code Quality](https://github.com/PowerGridModel/power-grid-model/actions/workflows/check-code-quality.yml/badge.svg)](https://github.com/PowerGridModel/power-grid-model/actions/workflows/check-code-quality.yml) [![Clang Tidy](https://github.com/PowerGridModel/power-grid-model/actions/workflows/clang-tidy.yml/badge.svg)](https://github.com/PowerGridModel/power-grid-model/actions/workflows/clang-tidy.yml) [![REUSE Compliance Check](https://github.com/PowerGridModel/power-grid-model/actions/workflows/reuse-compliance.yml/badge.svg)](https://github.com/PowerGridModel/power-grid-model/actions/workflows/reuse-compliance.yml) [![docs](https://readthedocs.org/projects/power-grid-model/badge/)](https://power-grid-model.readthedocs.io/en/stable/) -[![Downloads](https://static.pepy.tech/badge/power-grid-model)](https://pepy.tech/project/power-grid-model) -[![Downloads](https://static.pepy.tech/badge/power-grid-model/month)](https://pepy.tech/project/power-grid-model) [![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=PowerGridModel_power-grid-model&metric=alert_status)](https://sonarcloud.io/summary/new_code?id=PowerGridModel_power-grid-model) [![Coverage](https://sonarcloud.io/api/project_badges/measure?project=PowerGridModel_power-grid-model&metric=coverage)](https://sonarcloud.io/summary/new_code?id=PowerGridModel_power-grid-model) @@ -22,6 +23,8 @@ SPDX-License-Identifier: MPL-2.0 [![Security Rating](https://sonarcloud.io/api/project_badges/measure?project=PowerGridModel_power-grid-model&metric=security_rating)](https://sonarcloud.io/summary/new_code?id=PowerGridModel_power-grid-model) [![Vulnerabilities](https://sonarcloud.io/api/project_badges/measure?project=PowerGridModel_power-grid-model&metric=vulnerabilities)](https://sonarcloud.io/summary/new_code?id=PowerGridModel_power-grid-model) +[![Nightly build](https://github.com/PowerGridModel/power-grid-model/actions/workflows/nightly.yml/badge.svg)](https://github.com/PowerGridModel/power-grid-model/actions/workflows/nightly.yml) + [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.8054429.svg)](https://zenodo.org/record/8054429) [![](https://github.com/PowerGridModel/.github/blob/main/artwork/svg/color.svg)](#) diff --git a/power_grid_model_c/power_grid_model/include/power_grid_model/auxiliary/dataset.hpp b/power_grid_model_c/power_grid_model/include/power_grid_model/auxiliary/dataset.hpp index 8878f90c28..2344f291c6 100644 --- a/power_grid_model_c/power_grid_model/include/power_grid_model/auxiliary/dataset.hpp +++ b/power_grid_model_c/power_grid_model/include/power_grid_model/auxiliary/dataset.hpp @@ -401,10 +401,10 @@ template class Dataset { for (Idx i{}; i != n_components(); ++i) { auto const& buffer = get_buffer(i); auto const& component_info = get_component_info(i); - Idx size = component_info.elements_per_scenario >= 0 - ? component_info.elements_per_scenario - : buffer.indptr[scenario + 1] - buffer.indptr[scenario]; - Idx offset = component_info.elements_per_scenario >= 0 ? size * scenario : buffer.indptr[scenario]; + Idx const size = component_info.elements_per_scenario >= 0 + ? component_info.elements_per_scenario + : buffer.indptr[scenario + 1] - buffer.indptr[scenario]; + Idx const offset = component_info.elements_per_scenario >= 0 ? size * scenario : buffer.indptr[scenario]; if (is_columnar(buffer)) { result.add_buffer(component_info.component->name, size, size, nullptr, nullptr); for (auto const& attribute_buffer : buffer.attributes) { diff --git a/tests/cpp_integration_tests/test_main_model.cpp b/tests/cpp_integration_tests/test_main_model.cpp index c88ca010d0..7d10de7864 100644 --- a/tests/cpp_integration_tests/test_main_model.cpp +++ b/tests/cpp_integration_tests/test_main_model.cpp @@ -1550,7 +1550,7 @@ TEST_CASE("Test main model - incomplete input") { SUBCASE("Symmetrical - Incomplete") { MutableDataset test_result_data{true, 1, "sym_output", meta_data::meta_data_gen::meta_data}; - MutableDataset ref_result_data{true, 1, "sym_output", meta_data::meta_data_gen::meta_data}; + MutableDataset const ref_result_data{true, 1, "sym_output", meta_data::meta_data_gen::meta_data}; std::vector> test_sym_node(state.sym_node.size()); test_result_data.add_buffer("node", test_sym_node.size(), test_sym_node.size(), nullptr, test_sym_node.data()); @@ -1565,7 +1565,7 @@ TEST_CASE("Test main model - incomplete input") { SparseMatrixError); } SUBCASE("Empty update dataset") { - ConstDataset update_data{false, 1, "update", meta_data::meta_data_gen::meta_data}; + ConstDataset const update_data{false, 1, "update", meta_data::meta_data_gen::meta_data}; CHECK_THROWS_AS(test_model.calculate({.calculation_type = power_flow, .calculation_symmetry = symmetric, @@ -1588,7 +1588,7 @@ TEST_CASE("Test main model - incomplete input") { SUBCASE("Asymmetrical - Incomplete") { MutableDataset test_result_data{true, 1, "asym_output", meta_data::meta_data_gen::meta_data}; - MutableDataset ref_result_data{true, 1, "asym_output", meta_data::meta_data_gen::meta_data}; + MutableDataset const ref_result_data{true, 1, "asym_output", meta_data::meta_data_gen::meta_data}; std::vector> test_sym_node(state.sym_node.size()); test_result_data.add_buffer("node", test_sym_node.size(), test_sym_node.size(), nullptr, test_sym_node.data()); @@ -1603,7 +1603,7 @@ TEST_CASE("Test main model - incomplete input") { SparseMatrixError); } SUBCASE("Empty update dataset") { - ConstDataset update_data{false, 1, "update", meta_data::meta_data_gen::meta_data}; + ConstDataset const update_data{false, 1, "update", meta_data::meta_data_gen::meta_data}; CHECK_THROWS_AS(test_model.calculate({.calculation_type = power_flow, .calculation_symmetry = asymmetric, diff --git a/tests/cpp_unit_tests/test_dataset.cpp b/tests/cpp_unit_tests/test_dataset.cpp index a968828d1f..8c1b0aefce 100644 --- a/tests/cpp_unit_tests/test_dataset.cpp +++ b/tests/cpp_unit_tests/test_dataset.cpp @@ -145,7 +145,7 @@ namespace test { namespace { template DatasetType create_dataset(bool const is_batch, Idx const batch_size, MetaDataset const& dataset_type) { - auto const dataset = DatasetType{is_batch, batch_size, dataset_type.name, test_meta_data_all}; + auto dataset = DatasetType{is_batch, batch_size, dataset_type.name, test_meta_data_all}; CHECK(&dataset.meta_data() == static_cast(&test_meta_data_all)); CHECK(dataset.empty()); CHECK(dataset.is_batch() == is_batch); @@ -247,7 +247,7 @@ TEST_CASE_TEMPLATE("Test range object", RangeObjectType, const_range_object) { auto buffer_span = dataset.template get_columnar_buffer_span(scenario); - Idx size = buffer_span.size(); + Idx const size = buffer_span.size(); for (Idx idx = 0; idx < size; ++idx) { buffer_span[idx] = A::InputType{.id = -10, .a0 = -1.0, .a1 = -2.0}; CHECK(id_buffer[idx + (scenario * elements_per_scenario)] == -10); @@ -930,7 +930,7 @@ TEST_CASE_TEMPLATE("Test dataset (common)", DatasetType, ConstDataset, MutableDa if constexpr (!std::same_as) { auto buffer_span = dataset.template get_columnar_buffer_span(scenario); - Idx size = buffer_span.size(); + Idx const size = buffer_span.size(); for (Idx idx = 0; idx < size; ++idx) { buffer_span[idx] = A::InputType{.id = -10, .a0 = -1.0, .a1 = -2.0}; CHECK(id_buffer[idx + (a_indptr[scenario])] == -10); @@ -976,8 +976,8 @@ TEST_CASE_TEMPLATE("Test dataset (common)", DatasetType, ConstDataset, MutableDa auto const& dataset_type = test_meta_data_all.datasets.front(); CAPTURE(std::string_view{dataset_type.name}); - auto const batch_size = 2; - auto const a_elements_per_scenario = 3; + Idx const batch_size{2}; + Idx const a_elements_per_scenario{3}; auto dataset = create_dataset(true, batch_size, dataset_type); diff --git a/tests/cpp_unit_tests/test_index_mapping.cpp b/tests/cpp_unit_tests/test_index_mapping.cpp index 3cd5944e07..99f2e32975 100644 --- a/tests/cpp_unit_tests/test_index_mapping.cpp +++ b/tests/cpp_unit_tests/test_index_mapping.cpp @@ -21,7 +21,7 @@ TEST_CASE("Test dense mapping - comparison sort") { constexpr Idx count{10}; constexpr Idx n_B = 100000; - double decrement = static_cast(n_B) / count; + double const decrement = static_cast(n_B) / count; IdxVector idx_B_in_A(count); for (Idx i = 0; i < count; ++i) { @@ -51,7 +51,7 @@ TEST_CASE("Test dense mapping - counting sort") { constexpr Idx count{1000000}; constexpr Idx n_B = 10; - double decrement = static_cast(n_B) / count; + double const decrement = static_cast(n_B) / count; IdxVector idx_B_in_A(count); for (Idx i = 0; i < count; ++i) { diff --git a/tests/cpp_unit_tests/test_optimizer.cpp b/tests/cpp_unit_tests/test_optimizer.cpp index c5cc1a730f..9a0c8bb5ad 100644 --- a/tests/cpp_unit_tests/test_optimizer.cpp +++ b/tests/cpp_unit_tests/test_optimizer.cpp @@ -8,7 +8,6 @@ namespace power_grid_model::optimizer::test { namespace { -namespace meta_gen = meta_data::meta_data_gen; constexpr auto meta_data = meta_data::meta_data_gen::get_meta_data< ComponentList, meta_data::update_getter_s>::value; diff --git a/tests/cpp_unit_tests/test_optimizer.hpp b/tests/cpp_unit_tests/test_optimizer.hpp index 01404ede8d..b22fabd056 100644 --- a/tests/cpp_unit_tests/test_optimizer.hpp +++ b/tests/cpp_unit_tests/test_optimizer.hpp @@ -27,6 +27,8 @@ struct StubTransformer { using SideType = StubTransformerSideType; static constexpr auto name = "StubTransformer"; + + // NOLINTBEGIN(readability-convert-member-functions-to-static) // because it stubs non-static member functions constexpr auto math_model_type() const { return ComponentType::test; } constexpr auto id() const { return ID{}; } @@ -41,6 +43,7 @@ struct StubTransformer { constexpr auto update(UpdateType const& /* update */) const { return UpdateChange{}; } constexpr auto inverse(UpdateType /* update */) const { return UpdateType{}; } + // NOLINTEND(readability-convert-member-functions-to-static) }; struct StubTransformerA : public StubTransformer {}; struct StubTransformerB : public StubTransformer {}; diff --git a/tests/cpp_unit_tests/test_tap_position_optimizer.cpp b/tests/cpp_unit_tests/test_tap_position_optimizer.cpp index d04e2f38a0..cfed777095 100644 --- a/tests/cpp_unit_tests/test_tap_position_optimizer.cpp +++ b/tests/cpp_unit_tests/test_tap_position_optimizer.cpp @@ -218,6 +218,7 @@ TEST_CASE("Test Transformer ranking") { // Subcases SUBCASE("Building the graph") { using pgm_tap::unregulated_idx; + using vertex_iterator = boost::graph_traits::vertex_iterator; // reference graph creation // Inserted in order of transformer, transformer3w, line and link @@ -240,7 +241,8 @@ TEST_CASE("Test Transformer ranking") { pgm_tap::TransformerGraph actual_graph = pgm_tap::build_transformer_graph(state); pgm_tap::TrafoGraphEdgeProperties actual_edges_prop; - boost::graph_traits::vertex_iterator vi, vi_end; + vertex_iterator vi; + vertex_iterator vi_end; for (boost::tie(vi, vi_end) = vertices(actual_graph); vi != vi_end; ++vi) { CHECK(actual_graph[*vi].is_source == expected_vertex_props[*vi].is_source); } @@ -270,16 +272,19 @@ TEST_CASE("Test Transformer ranking") { } SUBCASE("Process edge weights") { + using vertex_iterator = boost::graph_traits::vertex_iterator; + // Dummy graph - pgm_tap::TrafoGraphEdges edge_array = {{0, 1}, {0, 2}, {2, 3}}; - pgm_tap::TrafoGraphEdgeProperties edge_prop{{{0, 1}, 1}, {{-1, -1}, 2}, {{2, 3}, 3}}; + pgm_tap::TrafoGraphEdges const edge_array = {{0, 1}, {0, 2}, {2, 3}}; + pgm_tap::TrafoGraphEdgeProperties const edge_prop{{{0, 1}, 1}, {{-1, -1}, 2}, {{2, 3}, 3}}; std::vector vertex_props{{true}, {false}, {false}, {false}}; pgm_tap::TransformerGraph g{boost::edges_are_unsorted_multi_pass, edge_array.cbegin(), edge_array.cend(), edge_prop.cbegin(), 4}; // Vertex properties can not be set during graph creation - boost::graph_traits::vertex_iterator vi, vi_end; + vertex_iterator vi; + vertex_iterator vi_end; for (boost::tie(vi, vi_end) = vertices(g); vi != vi_end; ++vi) { g[*vi].is_source = vertex_props[*vi].is_source; } @@ -305,9 +310,11 @@ TEST_CASE("Test Transformer ranking") { } SUBCASE("Multiple source grid") { + using vertex_iterator = boost::graph_traits::vertex_iterator; + // Grid with multiple sources and symetric graph - pgm_tap::TrafoGraphEdges edge_array = {{0, 1}, {1, 2}, {2, 3}, {3, 4}, {4, 5}}; - pgm_tap::TrafoGraphEdgeProperties edge_prop{ + pgm_tap::TrafoGraphEdges const edge_array = {{0, 1}, {1, 2}, {2, 3}, {3, 4}, {4, 5}}; + pgm_tap::TrafoGraphEdgeProperties const edge_prop{ {{0, 1}, 1}, {{1, 2}, 1}, {{2, 3}, 1}, {{3, 4}, 1}, {{4, 5}, 1}}; std::vector vertex_props{{true}, {false}, {false}, {false}, {false}, {true}}; @@ -315,8 +322,8 @@ TEST_CASE("Test Transformer ranking") { edge_prop.cbegin(), 6}; // Vertex properties can not be set during graph creation - boost::graph_traits::vertex_iterator vi; - boost::graph_traits::vertex_iterator vi_end; + vertex_iterator vi; + vertex_iterator vi_end; for (boost::tie(vi, vi_end) = vertices(g); vi != vi_end; ++vi) { g[*vi].is_source = vertex_props[*vi].is_source; } @@ -341,7 +348,6 @@ namespace { using power_grid_model::optimizer::test::ConstDatasetUpdate; using power_grid_model::optimizer::test::OptStrategyMethodSearch; using power_grid_model::optimizer::test::search_methods; -using power_grid_model::optimizer::test::strategies; using power_grid_model::optimizer::test::strategies_and_methods; using power_grid_model::optimizer::test::strategies_and_sides; using power_grid_model::optimizer::test::strategy_search_and_sides; @@ -444,9 +450,11 @@ struct MockTransformer { using SideType = typename MockTransformerState::SideType; MockTransformer() = default; - MockTransformer(MockTransformerState state_) : state{state_} {} + MockTransformer(MockTransformerState state_) : state{std::move(state_)} {} static constexpr auto name = "MockTransformer"; + + // NOLINTNEXTLINE(readability-convert-member-functions-to-static) // mocks non-static functions constexpr auto math_model_type() const { return ComponentType::test; } constexpr auto id() const { return state.id; } @@ -496,15 +504,20 @@ constexpr auto get_math_id(State const& state, Idx topology_index) { } template ComponentType, typename ContainerType> -inline auto i_pu(std::vector> const& solver_output, Idx2D const& math_id, - ControlSide side) { +inline DoubleComplex i_pu(std::vector> const& solver_output, Idx2D const& math_id, + ControlSide side) { REQUIRE(math_id.group >= 0); REQUIRE(math_id.group < solver_output.size()); - REQUIRE(solver_output[math_id.group].state.has_value()); + CHECK(solver_output[math_id.group].call_index >= 0); - return main_core::get_component_by_sequence(solver_output[math_id.group].state.value().get(), - math_id.pos) - .state.i_pu(side); + + auto const& state = solver_output[math_id.group].state; + REQUIRE(state.has_value()); + if (state.has_value()) { // necessary for clang-tidy + return main_core::get_component_by_sequence(state.value().get(), math_id.pos).state.i_pu(side); + } + FAIL("Unreachable"); + return {}; } template ComponentType, typename State, @@ -539,7 +552,8 @@ template class MockTransformerRanker { template struct Impl { void operator()(State const& state, RankedTransformerGroups& ranking) const { if constexpr (std::derived_from) { - for (Idx idx : boost::counting_range(Idx{0}, main_core::get_component_size(state))) { + for (Idx const idx : + boost::counting_range(Idx{0}, main_core::get_component_size(state))) { auto const& comp = main_core::get_component_by_sequence(state, idx); auto const rank = comp.state.rank; if (rank == MockTransformerState::unregulated) { @@ -643,7 +657,7 @@ void checkInvertedTapRange(MockTransformerState& state_b, TransformerTapRegulato namespace { namespace meta_gen = meta_data::meta_data_gen; -} +} // namespace TEST_CASE("Test Tap position optimizer") { using MockTransformerState = test::MockTransformerState; @@ -653,8 +667,8 @@ TEST_CASE("Test Tap position optimizer") { using MockStateCalculator = test::MockStateCalculator; using MockTransformerRanker = test::MockTransformerRanker; - auto const& meta_data = meta_gen::get_meta_data, - meta_data::update_getter_s>::value; + auto const meta_data = meta_gen::get_meta_data, + meta_data::update_getter_s>::value; MockState state; @@ -688,17 +702,13 @@ TEST_CASE("Test Tap position optimizer") { std::vector> trafo_state_1; std::vector> trafo_state_2; for (auto const& transformer : state1.components.template citer()) { - trafo_state_1.push_back({transformer.id(), transformer.tap_pos()}); + trafo_state_1.emplace_back(transformer.id(), transformer.tap_pos()); } for (auto const& transformer : state2.components.template citer()) { - trafo_state_2.push_back({transformer.id(), transformer.tap_pos()}); - } - - if (trafo_state_1 != trafo_state_2) { - return false; + trafo_state_2.emplace_back(transformer.id(), transformer.tap_pos()); } - return true; + return trafo_state_1 == trafo_state_2; }; auto const get_optimizer = [&](OptimizerStrategy strategy, SearchMethod tap_search) { @@ -848,14 +858,14 @@ TEST_CASE("Test Tap position optimizer") { state_b.tap_max = 3; SUBCASE("start low in range") { state_b.tap_pos = state_b.tap_min; } SUBCASE("start high in range") { state_b.tap_pos = state_b.tap_max; } - SUBCASE("start mid range") { state_b.tap_pos = state_b.tap_min + 1; } + SUBCASE("start mid range") { state_b.tap_pos = narrow_cast(state_b.tap_min + 1); } } SUBCASE("inverted tap range") { state_b.tap_min = 3; state_b.tap_max = 1; SUBCASE("start low in range") { state_b.tap_pos = state_b.tap_min; } SUBCASE("start high in range") { state_b.tap_pos = state_b.tap_max; } - SUBCASE("start mid range") { state_b.tap_pos = state_b.tap_min - 1; } + SUBCASE("start mid range") { state_b.tap_pos = narrow_cast(state_b.tap_min - 1); } } SUBCASE("extreme tap range") { state_b.tap_min = IntS{0}; @@ -1105,7 +1115,7 @@ TEST_CASE("Test Tap position optimizer") { state_a.tap_side = tap_side; auto optimizer = get_optimizer(strategy, SearchMethod::linear_search); - auto const cached_state = state; // NOSONAR + auto const cached_state = MockState{state}; // explicit copy CHECK_THROWS_AS(optimizer.optimize(state, CalculationMethod::default_method), MaxIterationReached); CHECK(twoStatesEqual(cached_state, state)); } diff --git a/tests/cpp_unit_tests/test_transformer_tap_regulator.cpp b/tests/cpp_unit_tests/test_transformer_tap_regulator.cpp index a16aba9b0a..db3bee5c02 100644 --- a/tests/cpp_unit_tests/test_transformer_tap_regulator.cpp +++ b/tests/cpp_unit_tests/test_transformer_tap_regulator.cpp @@ -199,14 +199,14 @@ TEST_CASE("Test transformer tap regulator") { } SUBCASE("Test default line drop compensation") { - TransformerTapRegulator regulator{{.id = 1, - .regulated_object = 2, - .status = 1, - .control_side = ControlSide::from, - .u_set = 10.0e3, - .u_band = 1.0e3}, - ComponentType::branch, - u_rated}; + TransformerTapRegulator const regulator{{.id = 1, + .regulated_object = 2, + .status = 1, + .control_side = ControlSide::from, + .u_set = 10.0e3, + .u_band = 1.0e3}, + ComponentType::branch, + u_rated}; TransformerTapRegulatorCalcParam const param = regulator.calc_param(); CHECK(!is_nan(param.z_compensation)); diff --git a/tests/cpp_validation_tests/test_validation.cpp b/tests/cpp_validation_tests/test_validation.cpp index fada4f09f3..a4fe5d0bdf 100644 --- a/tests/cpp_validation_tests/test_validation.cpp +++ b/tests/cpp_validation_tests/test_validation.cpp @@ -94,7 +94,7 @@ auto construct_individual_scenarios(OwningDataset& owning_dataset) { } } -auto load_dataset(std::filesystem::path const& path) { +OwningDataset load_dataset(std::filesystem::path const& path) { // Issue in msgpack, reported in https://github.com/msgpack/msgpack-c/issues/1098 // May be a Clang Analyzer bug #ifndef __clang_analyzer__ // TODO(mgovers): re-enable this when issue in msgpack is fixed @@ -106,7 +106,9 @@ auto load_dataset(std::filesystem::path const& path) { return dataset; #else // __clang_analyzer__ // issue in msgpack (void)path; - return OwningDataset{}; // fallback for https://github.com/msgpack/msgpack-c/issues/1098 + // fallback for https://github.com/msgpack/msgpack-c/issues/1098 + return OwningDataset{.dataset = {false, 0, "", meta_data_gen::meta_data}, + .const_dataset = {false, 0, "", meta_data_gen::meta_data}}; #endif // __clang_analyzer__ // issue in msgpack } @@ -539,7 +541,7 @@ void validate_single_case(CaseParam const& param) { MainModel model{50.0, validation_case.input.const_dataset, 0}; CalculationFunc const func = calculation_func(param); - ConstDataset empty{false, 1, "update", meta_data_gen::meta_data}; + ConstDataset const empty{false, 1, "update", meta_data_gen::meta_data}; func(model, calculation_method_mapping.at(param.calculation_method), result.dataset, empty, -1); assert_result(result.const_dataset, validation_case.output.value().const_dataset, param.atol, param.rtol); }); @@ -567,7 +569,7 @@ void validate_batch_case(CaseParam const& param) { // update and run model_copy.update_component( validation_case.update_batch.value().batch_scenarios[scenario]); - ConstDataset empty{false, 1, "update", meta_data_gen::meta_data}; + ConstDataset const empty{false, 1, "update", meta_data_gen::meta_data}; func(model_copy, calculation_method_mapping.at(param.calculation_method), result.dataset, empty, -1); // check