Skip to content

Commit 497f03f

Browse files
committed
add test
Signed-off-by: Nitish Bharambe <nitish.bharambe@alliander.com>
1 parent 5658e22 commit 497f03f

File tree

1 file changed

+88
-83
lines changed

1 file changed

+88
-83
lines changed

tests/cpp_unit_tests/test_tap_position_optimizer.cpp

Lines changed: 88 additions & 83 deletions
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,67 @@ TEST_CASE("Test Transformer ranking") {
184184
CHECK_NOTHROW(pgm_tap::build_transformer_graph(get_state(6, 2, 1, 4, 5)));
185185
}
186186

187+
SUBCASE("Process edge weights") {
188+
using vertex_iterator = boost::graph_traits<pgm_tap::TransformerGraph>::vertex_iterator;
189+
190+
// Dummy graph
191+
pgm_tap::TrafoGraphEdges const edge_array = {{0, 1}, {0, 2}, {2, 3}};
192+
pgm_tap::TrafoGraphEdgeProperties const edge_prop{{{0, 1}, 1}, {{-1, -1}, 0}, {{2, 3}, 1}};
193+
std::vector<pgm_tap::TrafoGraphVertex> vertex_props{{true}, {false}, {false}, {false}};
194+
195+
pgm_tap::TransformerGraph g{boost::edges_are_unsorted_multi_pass, edge_array.cbegin(), edge_array.cend(),
196+
edge_prop.cbegin(), 4};
197+
198+
// Vertex properties can not be set during graph creation
199+
vertex_iterator vi;
200+
vertex_iterator vi_end;
201+
for (boost::tie(vi, vi_end) = vertices(g); vi != vi_end; ++vi) {
202+
g[*vi].is_source = vertex_props[*vi].is_source;
203+
}
204+
205+
pgm_tap::TrafoGraphEdgeProperties const regulated_edge_weights = get_edge_weights(g);
206+
pgm_tap::TrafoGraphEdgeProperties const ref_regulated_edge_weights{{{0, 1}, 1}, {{2, 3}, 1}};
207+
CHECK(regulated_edge_weights == ref_regulated_edge_weights);
208+
}
209+
210+
SUBCASE("Sorting transformer edges") {
211+
pgm_tap::TrafoGraphEdgeProperties const trafoList{
212+
{Idx2D{1, 1}, pgm_tap::infty}, {Idx2D{1, 2}, 5}, {Idx2D{1, 3}, 4}, {Idx2D{2, 1}, 4}};
213+
214+
pgm_tap::RankedTransformerGroups const referenceList{{Idx2D{1, 3}, Idx2D{2, 1}}, {Idx2D{1, 2}}, {Idx2D{1, 1}}};
215+
216+
pgm_tap::RankedTransformerGroups const sortedTrafoList = pgm_tap::rank_transformers(trafoList);
217+
REQUIRE(sortedTrafoList.size() == referenceList.size());
218+
for (Idx idx : boost::counting_range(Idx{0}, static_cast<Idx>(sortedTrafoList.size()))) {
219+
CAPTURE(idx);
220+
CHECK(sortedTrafoList[idx] == referenceList[idx]);
221+
}
222+
}
223+
224+
SUBCASE("Multiple source grid") {
225+
using vertex_iterator = boost::graph_traits<pgm_tap::TransformerGraph>::vertex_iterator;
226+
227+
// Grid with multiple sources and symetric graph
228+
pgm_tap::TrafoGraphEdges const edge_array = {{0, 1}, {1, 2}, {3, 2}, {4, 3}};
229+
pgm_tap::TrafoGraphEdgeProperties const edge_prop{{{0, 1}, 1}, {{1, 2}, 1}, {{2, 3}, 1}, {{3, 4}, 1}};
230+
std::vector<pgm_tap::TrafoGraphVertex> vertex_props{{true}, {false}, {false}, {false}, {true}};
231+
232+
pgm_tap::TransformerGraph g{boost::edges_are_unsorted_multi_pass, edge_array.cbegin(), edge_array.cend(),
233+
edge_prop.cbegin(), 5};
234+
235+
// Vertex properties can not be set during graph creation
236+
vertex_iterator vi;
237+
vertex_iterator vi_end;
238+
for (boost::tie(vi, vi_end) = vertices(g); vi != vi_end; ++vi) {
239+
g[*vi].is_source = vertex_props[*vi].is_source;
240+
}
241+
242+
pgm_tap::TrafoGraphEdgeProperties const regulated_edge_weights = get_edge_weights(g);
243+
pgm_tap::TrafoGraphEdgeProperties const ref_regulated_edge_weights{
244+
{{0, 1}, 1}, {{1, 2}, 2}, {{2, 3}, 2}, {{3, 4}, 1}};
245+
CHECK(regulated_edge_weights == ref_regulated_edge_weights);
246+
}
247+
187248
SUBCASE("Full grid 1 - For graph construction steps") {
188249
// =====Test Grid=====
189250
// ________[0]________
@@ -194,16 +255,20 @@ TEST_CASE("Test Transformer ranking") {
194255
// | [6] |
195256
// [3]----------| [8]
196257
// | |
197-
// L---------------[9]
258+
// L---------------[9] -----x- [100]
259+
//
260+
// [101] ---- [102]
261+
198262
TestState state;
199-
std::vector<NodeInput> nodes{{0, 150e3}, {1, 10e3}, {2, 10e3}, {3, 10e3}, {4, 10e3},
200-
{5, 50e3}, {6, 10e3}, {7, 10e3}, {8, 10e3}, {9, 10e3}};
263+
std::vector<NodeInput> nodes{{0, 150e3}, {1, 10e3}, {2, 10e3}, {3, 10e3}, {4, 10e3}, {5, 50e3}, {6, 10e3},
264+
{7, 10e3}, {8, 10e3}, {9, 10e3}, {100, 10e3}, {101, 10e3}, {102, 10e3}};
201265
main_core::add_component<Node>(state, nodes.begin(), nodes.end(), 50.0);
202266

203267
std::vector<TransformerInput> transformers{
204-
get_transformer(11, 0, 1, BranchSide::from), get_transformer(12, 0, 1, BranchSide::from),
205-
get_transformer(13, 5, 7, BranchSide::from), get_transformer(14, 2, 3, BranchSide::from),
206-
get_transformer(15, 8, 9, BranchSide::from)};
268+
get_transformer(11, 0, 1, BranchSide::from), get_transformer(12, 0, 1, BranchSide::from),
269+
get_transformer(13, 5, 7, BranchSide::from), get_transformer(14, 2, 3, BranchSide::from),
270+
get_transformer(15, 8, 9, BranchSide::from), get_transformer(103, 9, 100, BranchSide::from),
271+
get_transformer(104, 101, 102, BranchSide::from)};
207272
main_core::add_component<Transformer>(state, transformers.begin(), transformers.end(), 50.0);
208273

209274
std::vector<ThreeWindingTransformerInput> transformers3w{
@@ -238,10 +303,11 @@ TEST_CASE("Test Transformer ranking") {
238303
{{{3, 0}, 1}, {{3, 1}, 1}, {{3, 2}, 1}, {{3, 3}, 1}, {{3, 4}, 1}});
239304
expected_edges_prop.insert(expected_edges_prop.end(),
240305
{{{4, 0}, 1}, {{4, 0}, 1}, {unregulated_idx, 0}, {unregulated_idx, 0}});
241-
expected_edges_prop.insert(expected_edges_prop.end(), 10, {unregulated_idx, 0});
306+
expected_edges_prop.insert(expected_edges_prop.end(), 14, {unregulated_idx, 0});
242307

243308
std::vector<pgm_tap::TrafoGraphVertex> const expected_vertex_props{
244-
{true}, {false}, {false}, {false}, {false}, {false}, {false}, {false}, {false}, {false}};
309+
{true}, {false}, {false}, {false}, {false}, {false}, {false},
310+
{false}, {false}, {false}, {false}, {false}, {false}};
245311

246312
pgm_tap::TransformerGraph actual_graph = pgm_tap::build_transformer_graph(state);
247313
pgm_tap::TrafoGraphEdgeProperties actual_edges_prop;
@@ -261,68 +327,6 @@ TEST_CASE("Test Transformer ranking") {
261327
CHECK(actual_edges_prop == expected_edges_prop);
262328
}
263329

264-
SUBCASE("Process edge weights") {
265-
using vertex_iterator = boost::graph_traits<pgm_tap::TransformerGraph>::vertex_iterator;
266-
267-
// Dummy graph
268-
pgm_tap::TrafoGraphEdges const edge_array = {{0, 1}, {0, 2}, {2, 3}};
269-
pgm_tap::TrafoGraphEdgeProperties const edge_prop{{{0, 1}, 1}, {{-1, -1}, 0}, {{2, 3}, 1}};
270-
std::vector<pgm_tap::TrafoGraphVertex> vertex_props{{true}, {false}, {false}, {false}};
271-
272-
pgm_tap::TransformerGraph g{boost::edges_are_unsorted_multi_pass, edge_array.cbegin(), edge_array.cend(),
273-
edge_prop.cbegin(), 4};
274-
275-
// Vertex properties can not be set during graph creation
276-
vertex_iterator vi;
277-
vertex_iterator vi_end;
278-
for (boost::tie(vi, vi_end) = vertices(g); vi != vi_end; ++vi) {
279-
g[*vi].is_source = vertex_props[*vi].is_source;
280-
}
281-
282-
pgm_tap::TrafoGraphEdgeProperties const regulated_edge_weights = get_edge_weights(g);
283-
pgm_tap::TrafoGraphEdgeProperties const ref_regulated_edge_weights{{{0, 1}, 1}, {{2, 3}, 1}};
284-
CHECK(regulated_edge_weights == ref_regulated_edge_weights);
285-
}
286-
287-
SUBCASE("Sorting transformer edges") {
288-
pgm_tap::TrafoGraphEdgeProperties const trafoList{
289-
{Idx2D{1, 1}, pgm_tap::infty}, {Idx2D{1, 2}, 5}, {Idx2D{1, 3}, 4}, {Idx2D{2, 1}, 4}};
290-
291-
pgm_tap::RankedTransformerGroups const referenceList{
292-
{Idx2D{1, 3}, Idx2D{2, 1}}, {Idx2D{1, 2}}, {Idx2D{1, 1}}};
293-
294-
pgm_tap::RankedTransformerGroups const sortedTrafoList = pgm_tap::rank_transformers(trafoList);
295-
REQUIRE(sortedTrafoList.size() == referenceList.size());
296-
for (Idx idx : boost::counting_range(Idx{0}, static_cast<Idx>(sortedTrafoList.size()))) {
297-
CAPTURE(idx);
298-
CHECK(sortedTrafoList[idx] == referenceList[idx]);
299-
}
300-
}
301-
302-
SUBCASE("Multiple source grid") {
303-
using vertex_iterator = boost::graph_traits<pgm_tap::TransformerGraph>::vertex_iterator;
304-
305-
// Grid with multiple sources and symetric graph
306-
pgm_tap::TrafoGraphEdges const edge_array = {{0, 1}, {1, 2}, {3, 2}, {4, 3}};
307-
pgm_tap::TrafoGraphEdgeProperties const edge_prop{{{0, 1}, 1}, {{1, 2}, 1}, {{2, 3}, 1}, {{3, 4}, 1}};
308-
std::vector<pgm_tap::TrafoGraphVertex> vertex_props{{true}, {false}, {false}, {false}, {true}};
309-
310-
pgm_tap::TransformerGraph g{boost::edges_are_unsorted_multi_pass, edge_array.cbegin(), edge_array.cend(),
311-
edge_prop.cbegin(), 5};
312-
313-
// Vertex properties can not be set during graph creation
314-
vertex_iterator vi;
315-
vertex_iterator vi_end;
316-
for (boost::tie(vi, vi_end) = vertices(g); vi != vi_end; ++vi) {
317-
g[*vi].is_source = vertex_props[*vi].is_source;
318-
}
319-
320-
pgm_tap::TrafoGraphEdgeProperties const regulated_edge_weights = get_edge_weights(g);
321-
pgm_tap::TrafoGraphEdgeProperties const ref_regulated_edge_weights{
322-
{{0, 1}, 1}, {{1, 2}, 2}, {{2, 3}, 2}, {{3, 4}, 1}};
323-
CHECK(regulated_edge_weights == ref_regulated_edge_weights);
324-
}
325-
326330
SUBCASE("Ranking complete the graph") {
327331
// The test grid 1 is not compatible with the updated logic for step up transformers
328332
CHECK_THROWS_AS(pgm_tap::rank_transformers(state), AutomaticTapInputError);
@@ -338,18 +342,22 @@ TEST_CASE("Test Transformer ranking") {
338342
// | | |
339343
// [2] | [8]
340344
// | [6] |
341-
// [3]----[7]---| [9]
345+
// [3]----[7]---| [9] ----x- [100]
342346
// | |
343347
// L--------------[10]
348+
//
349+
// [101] ---- [102]
344350
TestState state;
345-
std::vector<NodeInput> nodes{{0, 150e3}, {1, 10e3}, {2, 10e3}, {3, 10e3}, {4, 10e3}, {5, 50e3},
346-
{6, 10e3}, {7, 10e3}, {8, 10e3}, {9, 10e3}, {10, 10e3}};
351+
std::vector<NodeInput> nodes{{0, 150e3}, {1, 10e3}, {2, 10e3}, {3, 10e3}, {4, 10e3},
352+
{5, 50e3}, {6, 10e3}, {7, 10e3}, {8, 10e3}, {9, 10e3},
353+
{10, 10e3}, {100, 10e3}, {101, 10e3}, {102, 10e3}};
347354
main_core::add_component<Node>(state, nodes.begin(), nodes.end(), 50.0);
348355

349356
std::vector<TransformerInput> transformers{
350-
get_transformer(11, 0, 1, BranchSide::to), get_transformer(12, 0, 1, BranchSide::from),
351-
get_transformer(13, 2, 3, BranchSide::from), get_transformer(14, 6, 7, BranchSide::from),
352-
get_transformer(15, 5, 8, BranchSide::from), get_transformer(16, 9, 10, BranchSide::from)};
357+
get_transformer(11, 0, 1, BranchSide::to), get_transformer(12, 0, 1, BranchSide::from),
358+
get_transformer(13, 2, 3, BranchSide::from), get_transformer(14, 6, 7, BranchSide::from),
359+
get_transformer(15, 5, 8, BranchSide::from), get_transformer(16, 9, 10, BranchSide::from),
360+
get_transformer(103, 9, 100, BranchSide::from), get_transformer(104, 101, 102, BranchSide::from)};
353361
main_core::add_component<Transformer>(state, transformers.begin(), transformers.end(), 50.0);
354362

355363
std::vector<ThreeWindingTransformerInput> transformers3w{
@@ -374,13 +382,10 @@ TEST_CASE("Test Transformer ranking") {
374382

375383
state.components.set_construction_complete();
376384

377-
// Subcases
378-
SUBCASE("Ranking complete the graph") {
379-
pgm_tap::RankedTransformerGroups order = pgm_tap::rank_transformers(state);
380-
pgm_tap::RankedTransformerGroups const ref_order{
381-
{{Idx2D{3, 0}, Idx2D{3, 1}, Idx2D{4, 0}, Idx2D{3, 4}}, {Idx2D{3, 2}, Idx2D{3, 3}, Idx2D{3, 5}}}};
382-
CHECK(order == ref_order);
383-
}
385+
pgm_tap::RankedTransformerGroups order = pgm_tap::rank_transformers(state);
386+
pgm_tap::RankedTransformerGroups const ref_order{
387+
{{Idx2D{3, 0}, Idx2D{3, 1}, Idx2D{4, 0}, Idx2D{3, 4}}, {Idx2D{3, 2}, Idx2D{3, 3}, Idx2D{3, 5}}}};
388+
CHECK(order == ref_order);
384389
}
385390
}
386391

0 commit comments

Comments
 (0)