@@ -125,8 +125,7 @@ TEST_CASE("read_rr_graph_metadata", "[vpr]") {
125125 kArchFile ,
126126 " wire.eblif" ,
127127 " --route_chan_width" ,
128- " 100" ,
129- };
128+ " 100" };
130129 vpr_init (sizeof (argv) / sizeof (argv[0 ]), argv,
131130 &options, &vpr_setup, &arch);
132131 vpr_setup.RouterOpts .read_rr_edge_metadata = true ;
@@ -165,6 +164,10 @@ TEST_CASE("read_rr_graph_metadata", "[vpr]") {
165164 " wire.eblif" ,
166165 " --route_chan_width" ,
167166 " 100" ,
167+ " --reorder_rr_graph_nodes_seed" ,
168+ " 1" ,
169+ " --reorder_rr_graph_nodes_algorithm" ,
170+ " random_shuffle" , // Tests node reordering with metadata
168171 " --read_rr_graph" ,
169172 kRrGraphFile ,
170173 };
@@ -175,23 +178,30 @@ TEST_CASE("read_rr_graph_metadata", "[vpr]") {
175178 vpr_create_device (vpr_setup, arch);
176179
177180 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+
178188 CHECK (device_ctx.rr_node_metadata .size () == 1 );
179189 CHECK (device_ctx.rr_edge_metadata .size () == 1 );
180190
181191 auto node = arch.strings .intern_string (vtr::string_view (" node" ));
182192 auto edge = arch.strings .intern_string (vtr::string_view (" edge" ));
183193
184194 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);
186196 REQUIRE (node_meta.second .has (node));
187197 auto * value = node_meta.second .one (node);
188198 REQUIRE (value != nullptr );
189199 CHECK_THAT (value->as_string ().get (&arch.strings ), Equals (" test node" ));
190200 }
191201
192202 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);
195205 CHECK (std::get<2 >(edge_meta.first ) == switch_id);
196206
197207 REQUIRE (edge_meta.second .has (edge));
0 commit comments