Skip to content

Resolve sonar cloud issues #851

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
Dec 5, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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(); }
Expand Down Expand Up @@ -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)
Expand Down
2 changes: 1 addition & 1 deletion tests/cpp_validation_tests/test_validation.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand Down
124 changes: 62 additions & 62 deletions tests/native_api_tests/test_api_model.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -279,35 +279,35 @@ TEST_CASE("API Model") {
}

SUBCASE("Test get indexer") {
std::vector<ID> const node_id{1, 2, 3};
std::vector<double> const node_u_rated{10.0e3, 10.0e3, 10.0e3};
std::vector<ID> const node_id_2{1, 2, 3};
std::vector<double> 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<ID> const ids_to_index{2, 1, 3, 2};
std::vector<Idx> const expected_indexer{1, 0, 2, 1};
std::vector<Idx> 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<ID> const ids_to_index{2, 1, 3, 4};
std::vector<Idx> 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<ID> const ids_to_index{2, 1, 3, 2};
std::vector<Idx> 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);
}
}
Expand Down Expand Up @@ -868,46 +868,46 @@ TEST_CASE("API Model") {
}

SUBCASE("Test duplicated id") {
std::vector<ID> node_id{1, 1, 3};
DatasetConst input_dataset{"input", false, 1};
std::vector<ID> 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<ID> const node_id{1, 2, 3};
std::vector<double> const node_u_rated{10.0e3, 10.0e3, 10.0e3};
std::vector<ID> const node_id_2{1, 2, 3};
std::vector<double> const node_u_rated_2{10.0e3, 10.0e3, 10.0e3};

std::vector<ID> link_id{5};
std::vector<ID> link_from_node{99};
std::vector<ID> 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<ID> const node_id{1, 2, 3};
std::vector<double> const node_u_rated{10.0e3, 10.0e3, 10.0e3};
std::vector<ID> const node_id_2{1, 2, 3};
std::vector<double> const node_u_rated_2{10.0e3, 10.0e3, 10.0e3};

std::vector<ID> line_id{9};
std::vector<ID> line_from_node{1};
std::vector<ID> line_to_node{2};
std::vector<ID> line_id_2{9};
std::vector<ID> line_from_node_2{1};
std::vector<ID> line_to_node_2{2};

std::vector<ID> link_id{5};
std::vector<ID> link_from_node{2};
Expand All @@ -920,37 +920,37 @@ TEST_CASE("API Model") {
std::vector<ID> sym_power_sensor_measured_object{3};
std::vector<MeasuredTerminalType> 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") {
Expand Down
32 changes: 17 additions & 15 deletions tests/native_api_tests/test_api_model_update.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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, [&]<typename T>() {
pgm_type_func_selector(attr_meta, [&model, &update_data, &output_dataset_type, &comp_type, &attribute_name,
elements_per_scenario, total_elements]<typename T>() {
std::vector<T> sym_output_from_batch(total_elements);
std::vector<T> sym_output_from_updated_single(total_elements);

Expand Down Expand Up @@ -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<double> sym_node_output_u_pu(3);
std::vector<double> sym_line_output_i_from(1);
std::vector<double> sym_source_output_i(2);
Expand Down Expand Up @@ -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<double> asym_node_output_u_pu(9);
std::vector<double> asym_line_output_i_from(3);
std::vector<double> asym_source_output_i(6);
Expand Down Expand Up @@ -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, [&]<typename T> {
T test_value{nan_value<T>()};
T ref_value{nan_value<T>()};
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<T>) {
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]<typename T> {
T test_value{nan_value<T>()};
T ref_value{nan_value<T>()};
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<T>) {
CHECK(test_value == doctest::Approx(ref_value));
} else {
CHECK(test_value == ref_value);
}
});
}
}
}
Expand Down
Loading