Skip to content

Commit 47ac847

Browse files
committed
Add EdgeGroups unit test
Signed-off-by: Dusty DeWeese <[email protected]>
1 parent e4741b1 commit 47ac847

File tree

1 file changed

+73
-0
lines changed

1 file changed

+73
-0
lines changed

vpr/test/test_edge_groups.cpp

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
#include <vector>
2+
#include <utility>
3+
#include <cstddef>
4+
#include <set>
5+
#include <random>
6+
#include <algorithm>
7+
8+
#include "catch.hpp"
9+
10+
#include "rr_graph.h"
11+
12+
namespace {
13+
14+
TEST_CASE("edge_groups_create_sets", "[vpr]") {
15+
// Construct a set of edges that result in these connected sets
16+
std::vector<std::set<int>> connected_sets{{{1, 2, 3, 4, 5, 6, 7, 8},
17+
{9, 0}}};
18+
int max_node_id = 0;
19+
std::vector<std::pair<int, int>> edges;
20+
for (auto set : connected_sets) {
21+
int last = *set.cbegin();
22+
std::for_each(std::next(set.cbegin()),
23+
set.cend(),
24+
[&](int node) {
25+
edges.push_back(std::make_pair(last, node));
26+
last = node;
27+
max_node_id = std::max(max_node_id, node);
28+
});
29+
}
30+
31+
// Build the id map for node IDs
32+
std::vector<int> nodes(max_node_id + 1);
33+
std::iota(nodes.begin(), nodes.end(), 0);
34+
std::random_device rd;
35+
std::mt19937 g(rd());
36+
37+
for (int i = 0; i < 100; i++) {
38+
// Shuffle node IDs
39+
auto random_nodes = nodes;
40+
std::shuffle(random_nodes.begin(), random_nodes.end(), g);
41+
42+
// Apply shuffled IDs to edges
43+
auto random_edges = edges;
44+
for (auto& edge : random_edges) {
45+
edge.first = random_nodes[edge.first];
46+
edge.second = random_nodes[edge.second];
47+
}
48+
49+
// Shuffle edges
50+
std::shuffle(random_edges.begin(), random_edges.end(), g);
51+
52+
// Add edges to the EdgeGroups object
53+
EdgeGroups groups;
54+
for (auto edge : random_edges) {
55+
groups.add_non_config_edge(edge.first, edge.second);
56+
}
57+
58+
// The algorithm to test
59+
groups.create_sets();
60+
t_non_configurable_rr_sets sets = groups.output_sets();
61+
62+
// Check for the expected sets
63+
for (auto set : connected_sets) {
64+
std::set<int> random_set;
65+
for (auto elem : set) {
66+
random_set.insert(random_nodes[elem]);
67+
}
68+
REQUIRE(sets.node_sets.find(random_set) != sets.node_sets.end());
69+
}
70+
}
71+
}
72+
73+
} // namespace

0 commit comments

Comments
 (0)