@@ -125,8 +125,7 @@ TEST_CASE("read_rr_graph_metadata", "[vpr]") {
125
125
kArchFile ,
126
126
" wire.eblif" ,
127
127
" --route_chan_width" ,
128
- " 100" ,
129
- };
128
+ " 100" };
130
129
vpr_init (sizeof (argv) / sizeof (argv[0 ]), argv,
131
130
&options, &vpr_setup, &arch);
132
131
vpr_setup.RouterOpts .read_rr_edge_metadata = true ;
@@ -165,6 +164,10 @@ TEST_CASE("read_rr_graph_metadata", "[vpr]") {
165
164
" wire.eblif" ,
166
165
" --route_chan_width" ,
167
166
" 100" ,
167
+ " --reorder_rr_graph_nodes_seed" ,
168
+ " 1" ,
169
+ " --reorder_rr_graph_nodes_algorithm" ,
170
+ " random_shuffle" , // Tests node reordering with metadata
168
171
" --read_rr_graph" ,
169
172
kRrGraphFile ,
170
173
};
@@ -175,23 +178,30 @@ TEST_CASE("read_rr_graph_metadata", "[vpr]") {
175
178
vpr_create_device (vpr_setup, arch);
176
179
177
180
const auto & device_ctx = g_vpr_ctx.device ();
181
+
182
+ // recompute ordering from 'random_shuffle'
183
+ std::vector<int > src_order (device_ctx.rr_nodes .size ()); // new id -> old id
184
+ std::iota (src_order.begin (), src_order.end (), 0 ); // Initialize to [0, 1, 2 ...]
185
+ std::mt19937 g (1 );
186
+ std::shuffle (src_order.begin (), src_order.end (), g);
187
+
178
188
CHECK (device_ctx.rr_node_metadata .size () == 1 );
179
189
CHECK (device_ctx.rr_edge_metadata .size () == 1 );
180
190
181
191
auto node = arch.strings .intern_string (vtr::string_view (" node" ));
182
192
auto edge = arch.strings .intern_string (vtr::string_view (" edge" ));
183
193
184
194
for (const auto & node_meta : device_ctx.rr_node_metadata ) {
185
- CHECK (node_meta.first == src_inode);
195
+ CHECK (src_order[ node_meta.first ] == src_inode);
186
196
REQUIRE (node_meta.second .has (node));
187
197
auto * value = node_meta.second .one (node);
188
198
REQUIRE (value != nullptr );
189
199
CHECK_THAT (value->as_string ().get (&arch.strings ), Equals (" test node" ));
190
200
}
191
201
192
202
for (const auto & edge_meta : device_ctx.rr_edge_metadata ) {
193
- CHECK (std::get<0 >(edge_meta.first ) == src_inode);
194
- CHECK (std::get<1 >(edge_meta.first ) == sink_inode);
203
+ CHECK (src_order[ std::get<0 >(edge_meta.first )] == src_inode);
204
+ CHECK (src_order[ std::get<1 >(edge_meta.first )] == sink_inode);
195
205
CHECK (std::get<2 >(edge_meta.first ) == switch_id);
196
206
197
207
REQUIRE (edge_meta.second .has (edge));
0 commit comments