diff --git a/power_grid_model_c/power_grid_model_cpp/include/power_grid_model_cpp/dataset.hpp b/power_grid_model_c/power_grid_model_cpp/include/power_grid_model_cpp/dataset.hpp index 4ac301688..45991884c 100644 --- a/power_grid_model_c/power_grid_model_cpp/include/power_grid_model_cpp/dataset.hpp +++ b/power_grid_model_c/power_grid_model_cpp/include/power_grid_model_cpp/dataset.hpp @@ -89,9 +89,8 @@ class DatasetWritable { class DatasetMutable { public: explicit DatasetMutable(std::string const& dataset, bool is_batch, Idx batch_size) - : handle_{}, - dataset_{ - handle_.call_with(PGM_create_dataset_mutable, dataset.c_str(), (is_batch ? Idx{1} : Idx{0}), batch_size)}, + : dataset_{handle_.call_with(PGM_create_dataset_mutable, dataset.c_str(), (is_batch ? Idx{1} : Idx{0}), + batch_size)}, info_{handle_.call_with(PGM_dataset_mutable_get_info, get())} {} RawMutableDataset const* get() const { return dataset_.get(); } @@ -129,9 +128,8 @@ class DatasetMutable { class DatasetConst { public: explicit DatasetConst(std::string const& dataset, bool is_batch, Idx batch_size) - : handle_{}, - dataset_{ - handle_.call_with(PGM_create_dataset_const, dataset.c_str(), (is_batch ? Idx{1} : Idx{0}), batch_size)}, + : dataset_{handle_.call_with(PGM_create_dataset_const, dataset.c_str(), (is_batch ? Idx{1} : Idx{0}), + batch_size)}, info_{handle_.call_with(PGM_dataset_const_get_info, get())} {} DatasetConst(DatasetWritable const& writable_dataset) diff --git a/tests/cpp_validation_tests/test_validation.cpp b/tests/cpp_validation_tests/test_validation.cpp index 1102dbf26..c3316acd6 100644 --- a/tests/cpp_validation_tests/test_validation.cpp +++ b/tests/cpp_validation_tests/test_validation.cpp @@ -132,7 +132,7 @@ 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 - Deserializer deserializer{read_file(path), Idx{0}}; + Deserializer deserializer{read_file(path), PGM_json}; auto& writable_dataset = deserializer.get_dataset(); auto dataset = create_owning_dataset(writable_dataset); deserializer.parse_to_buffer(); diff --git a/tests/native_api_tests/test_api_model.cpp b/tests/native_api_tests/test_api_model.cpp index e9fb186aa..9808715dd 100644 --- a/tests/native_api_tests/test_api_model.cpp +++ b/tests/native_api_tests/test_api_model.cpp @@ -279,35 +279,35 @@ TEST_CASE("API Model") { } SUBCASE("Test get indexer") { - std::vector const node_id{1, 2, 3}; - std::vector const node_u_rated{10.0e3, 10.0e3, 10.0e3}; + std::vector const node_id_2{1, 2, 3}; + std::vector const node_u_rated_2{10.0e3, 10.0e3, 10.0e3}; - DatasetConst input_dataset{"input", false, 1}; - input_dataset.add_buffer("node", std::ssize(node_id), std::ssize(node_id), nullptr, nullptr); - input_dataset.add_attribute_buffer("node", "id", node_id.data()); - input_dataset.add_attribute_buffer("node", "u_rated", node_u_rated.data()); + DatasetConst input_dataset_2{"input", false, 1}; + input_dataset_2.add_buffer("node", std::ssize(node_id_2), std::ssize(node_id_2), nullptr, nullptr); + input_dataset_2.add_attribute_buffer("node", "id", node_id_2.data()); + input_dataset_2.add_attribute_buffer("node", "u_rated", node_u_rated_2.data()); - auto model2 = Model{50.0, input_dataset}; + auto model_2 = Model{50.0, input_dataset_2}; SUBCASE("Good weather") { std::vector const ids_to_index{2, 1, 3, 2}; std::vector const expected_indexer{1, 0, 2, 1}; std::vector indexer(ids_to_index.size()); - model2.get_indexer("node", std::ssize(ids_to_index), ids_to_index.data(), indexer.data()); + model_2.get_indexer("node", std::ssize(ids_to_index), ids_to_index.data(), indexer.data()); CHECK(indexer == expected_indexer); } SUBCASE("Bad weather: wrong id") { std::vector const ids_to_index{2, 1, 3, 4}; std::vector indexer(ids_to_index.size()); CHECK_THROWS_WITH_AS( - model2.get_indexer("node", std::ssize(ids_to_index), ids_to_index.data(), indexer.data()), + model_2.get_indexer("node", std::ssize(ids_to_index), ids_to_index.data(), indexer.data()), doctest::Contains("The id cannot be found: 4"), PowerGridRegularError); } SUBCASE("Bad weather: wrong type") { std::vector const ids_to_index{2, 1, 3, 2}; std::vector indexer(ids_to_index.size()); CHECK_THROWS_WITH_AS( - model2.get_indexer("sym_load", std::ssize(ids_to_index), ids_to_index.data(), indexer.data()), + model_2.get_indexer("sym_load", std::ssize(ids_to_index), ids_to_index.data(), indexer.data()), doctest::Contains("Wrong type for object with id 2"), PowerGridRegularError); } } @@ -868,46 +868,46 @@ TEST_CASE("API Model") { } SUBCASE("Test duplicated id") { - std::vector node_id{1, 1, 3}; - DatasetConst input_dataset{"input", false, 1}; + std::vector node_id_2{1, 1, 3}; + DatasetConst input_dataset_2{"input", false, 1}; - input_dataset.add_buffer("node", std::ssize(node_id), std::ssize(node_id), nullptr, nullptr); - input_dataset.add_attribute_buffer("node", "id", node_id.data()); + input_dataset_2.add_buffer("node", std::ssize(node_id_2), std::ssize(node_id_2), nullptr, nullptr); + input_dataset_2.add_attribute_buffer("node", "id", node_id_2.data()); - auto construct_model = [&] { Model{50.0, input_dataset}; }; + auto construct_model = [&] { Model{50.0, input_dataset_2}; }; CHECK_THROWS_WITH_AS(construct_model(), "Conflicting id detected: 1\n", PowerGridRegularError); } SUBCASE("Test non-existing id") { - std::vector const node_id{1, 2, 3}; - std::vector const node_u_rated{10.0e3, 10.0e3, 10.0e3}; + std::vector const node_id_2{1, 2, 3}; + std::vector const node_u_rated_2{10.0e3, 10.0e3, 10.0e3}; std::vector link_id{5}; std::vector link_from_node{99}; std::vector link_to_node{3}; - DatasetConst input_dataset{"input", false, 1}; + DatasetConst input_dataset_2{"input", false, 1}; - input_dataset.add_buffer("node", std::ssize(node_id), std::ssize(node_id), nullptr, nullptr); - input_dataset.add_attribute_buffer("node", "id", node_id.data()); - input_dataset.add_attribute_buffer("node", "u_rated", node_u_rated.data()); + input_dataset_2.add_buffer("node", std::ssize(node_id_2), std::ssize(node_id_2), nullptr, nullptr); + input_dataset_2.add_attribute_buffer("node", "id", node_id_2.data()); + input_dataset_2.add_attribute_buffer("node", "u_rated", node_u_rated_2.data()); - input_dataset.add_buffer("link", std::ssize(link_id), std::ssize(link_id), nullptr, nullptr); - input_dataset.add_attribute_buffer("link", "id", link_id.data()); - input_dataset.add_attribute_buffer("link", "from_node", link_from_node.data()); - input_dataset.add_attribute_buffer("link", "to_node", link_to_node.data()); + input_dataset_2.add_buffer("link", std::ssize(link_id), std::ssize(link_id), nullptr, nullptr); + input_dataset_2.add_attribute_buffer("link", "id", link_id.data()); + input_dataset_2.add_attribute_buffer("link", "from_node", link_from_node.data()); + input_dataset_2.add_attribute_buffer("link", "to_node", link_to_node.data()); - auto construct_model = [&] { Model{50.0, input_dataset}; }; + auto construct_model = [&] { Model{50.0, input_dataset_2}; }; CHECK_THROWS_WITH_AS(construct_model(), "The id cannot be found: 99\n", PowerGridRegularError); } SUBCASE("Test id for wrong type") { - std::vector const node_id{1, 2, 3}; - std::vector const node_u_rated{10.0e3, 10.0e3, 10.0e3}; + std::vector const node_id_2{1, 2, 3}; + std::vector const node_u_rated_2{10.0e3, 10.0e3, 10.0e3}; - std::vector line_id{9}; - std::vector line_from_node{1}; - std::vector line_to_node{2}; + std::vector line_id_2{9}; + std::vector line_from_node_2{1}; + std::vector line_to_node_2{2}; std::vector link_id{5}; std::vector link_from_node{2}; @@ -920,37 +920,37 @@ TEST_CASE("API Model") { std::vector sym_power_sensor_measured_object{3}; std::vector sym_power_sensor_measured_terminal_type{MeasuredTerminalType::node}; - DatasetConst input_dataset{"input", false, 1}; - - input_dataset.add_buffer("node", std::ssize(node_id), std::ssize(node_id), nullptr, nullptr); - input_dataset.add_attribute_buffer("node", "id", node_id.data()); - input_dataset.add_attribute_buffer("node", "u_rated", node_u_rated.data()); - - input_dataset.add_buffer("line", std::ssize(line_id), std::ssize(line_id), nullptr, nullptr); - input_dataset.add_attribute_buffer("line", "id", line_id.data()); - input_dataset.add_attribute_buffer("line", "from_node", line_from_node.data()); - input_dataset.add_attribute_buffer("line", "to_node", line_to_node.data()); - - input_dataset.add_buffer("link", std::ssize(link_id), std::ssize(link_id), nullptr, nullptr); - input_dataset.add_attribute_buffer("link", "id", link_id.data()); - input_dataset.add_attribute_buffer("link", "from_node", link_from_node.data()); - input_dataset.add_attribute_buffer("link", "to_node", link_to_node.data()); - - input_dataset.add_buffer("sym_voltage_sensor", std::ssize(sym_voltage_sensor_id), - std::ssize(sym_voltage_sensor_id), nullptr, nullptr); - input_dataset.add_attribute_buffer("sym_voltage_sensor", "id", sym_voltage_sensor_id.data()); - input_dataset.add_attribute_buffer("sym_voltage_sensor", "measured_object", - sym_voltage_sensor_measured_object.data()); - - input_dataset.add_buffer("sym_power_sensor", std::ssize(sym_power_sensor_id), std::ssize(sym_power_sensor_id), - nullptr, nullptr); - input_dataset.add_attribute_buffer("sym_power_sensor", "id", sym_power_sensor_id.data()); - input_dataset.add_attribute_buffer("sym_power_sensor", "measured_object", - sym_power_sensor_measured_object.data()); - input_dataset.add_attribute_buffer("sym_power_sensor", "measured_terminal_type", - sym_power_sensor_measured_terminal_type.data()); - - auto construct_model = [&] { Model{50.0, input_dataset}; }; + DatasetConst input_dataset_2{"input", false, 1}; + + input_dataset_2.add_buffer("node", std::ssize(node_id_2), std::ssize(node_id_2), nullptr, nullptr); + input_dataset_2.add_attribute_buffer("node", "id", node_id_2.data()); + input_dataset_2.add_attribute_buffer("node", "u_rated", node_u_rated_2.data()); + + input_dataset_2.add_buffer("line", std::ssize(line_id_2), std::ssize(line_id_2), nullptr, nullptr); + input_dataset_2.add_attribute_buffer("line", "id", line_id_2.data()); + input_dataset_2.add_attribute_buffer("line", "from_node", line_from_node_2.data()); + input_dataset_2.add_attribute_buffer("line", "to_node", line_to_node_2.data()); + + input_dataset_2.add_buffer("link", std::ssize(link_id), std::ssize(link_id), nullptr, nullptr); + input_dataset_2.add_attribute_buffer("link", "id", link_id.data()); + input_dataset_2.add_attribute_buffer("link", "from_node", link_from_node.data()); + input_dataset_2.add_attribute_buffer("link", "to_node", link_to_node.data()); + + input_dataset_2.add_buffer("sym_voltage_sensor", std::ssize(sym_voltage_sensor_id), + std::ssize(sym_voltage_sensor_id), nullptr, nullptr); + input_dataset_2.add_attribute_buffer("sym_voltage_sensor", "id", sym_voltage_sensor_id.data()); + input_dataset_2.add_attribute_buffer("sym_voltage_sensor", "measured_object", + sym_voltage_sensor_measured_object.data()); + + input_dataset_2.add_buffer("sym_power_sensor", std::ssize(sym_power_sensor_id), std::ssize(sym_power_sensor_id), + nullptr, nullptr); + input_dataset_2.add_attribute_buffer("sym_power_sensor", "id", sym_power_sensor_id.data()); + input_dataset_2.add_attribute_buffer("sym_power_sensor", "measured_object", + sym_power_sensor_measured_object.data()); + input_dataset_2.add_attribute_buffer("sym_power_sensor", "measured_terminal_type", + sym_power_sensor_measured_terminal_type.data()); + + auto construct_model = [&] { Model{50.0, input_dataset_2}; }; SUBCASE("Correct type") { CHECK_NOTHROW(construct_model()); } SUBCASE("Wrong branch terminal node") { diff --git a/tests/native_api_tests/test_api_model_update.cpp b/tests/native_api_tests/test_api_model_update.cpp index 8d715ef4a..0614b2535 100644 --- a/tests/native_api_tests/test_api_model_update.cpp +++ b/tests/native_api_tests/test_api_model_update.cpp @@ -493,7 +493,8 @@ TEST_CASE("API model - all updates") { auto const attribute_name = MetaData::attribute_name(attr_meta); CAPTURE(attribute_name); - pgm_type_func_selector(attr_meta, [&]() { + pgm_type_func_selector(attr_meta, [&model, &update_data, &output_dataset_type, &comp_type, &attribute_name, + elements_per_scenario, total_elements]() { std::vector sym_output_from_batch(total_elements); std::vector sym_output_from_updated_single(total_elements); @@ -527,7 +528,7 @@ TEST_CASE("API model - updates w/ alternating compute mode") { auto const input_dataset = state.get_input_dataset(); auto model = Model{50.0, input_dataset}; - auto const check_sym = [&] { + auto const check_sym = [&model] { std::vector sym_node_output_u_pu(3); std::vector sym_line_output_i_from(1); std::vector sym_source_output_i(2); @@ -566,7 +567,7 @@ TEST_CASE("API model - updates w/ alternating compute mode") { CHECK(sym_asym_load_output_i[0] == doctest::Approx(0.0)); CHECK(sym_shunt_output_i[0] == doctest::Approx(0.0)); }; - auto const check_asym = [&] { + auto const check_asym = [&model] { std::vector asym_node_output_u_pu(9); std::vector asym_line_output_i_from(3); std::vector asym_source_output_i(6); @@ -786,18 +787,19 @@ TEST_CASE("API model - incomplete input") { auto const attr_name = MetaData::attribute_name(attr_meta); CAPTURE(attr_name); - pgm_type_func_selector(attr_meta, [&] { - T test_value{nan_value()}; - T ref_value{nan_value()}; - test_node_output.get_value(attr_meta, &test_value, node_idx, 0); - ref_node_output.get_value(attr_meta, &ref_value, node_idx, 0); - - if constexpr (std::is_floating_point_v) { - CHECK(test_value == doctest::Approx(ref_value)); - } else { - CHECK(test_value == ref_value); - } - }); + pgm_type_func_selector(attr_meta, + [&test_node_output, &ref_node_output, attr_meta, node_idx] { + T test_value{nan_value()}; + T ref_value{nan_value()}; + test_node_output.get_value(attr_meta, &test_value, node_idx, 0); + ref_node_output.get_value(attr_meta, &ref_value, node_idx, 0); + + if constexpr (std::is_floating_point_v) { + CHECK(test_value == doctest::Approx(ref_value)); + } else { + CHECK(test_value == ref_value); + } + }); } } }