@@ -223,6 +223,48 @@ SCENARIO("call_graph",
223
223
REQUIRE (exported.has_edge (nodes_by_name[" B" ], nodes_by_name[" D" ]));
224
224
}
225
225
226
+ THEN (" We expect {A,B} to be reachable from {A} in 1 step" )
227
+ {
228
+ irep_idt function_name = " A" ;
229
+ std::size_t depth = 1 ;
230
+ std::set<irep_idt> reachable = get_functions_reachable_within_n_steps (
231
+ exported, function_name, depth, true );
232
+ REQUIRE (reachable.size () == 2 );
233
+ REQUIRE (reachable.count (" A" ));
234
+ REQUIRE (reachable.count (" B" ));
235
+ }
236
+ THEN (" We expect {A,B,C,D} to be reachable from {A} in 2 and 3 steps" )
237
+ {
238
+ irep_idt function_name = " A" ;
239
+ std::size_t depth = 2 ;
240
+ std::set<irep_idt> reachable = get_functions_reachable_within_n_steps (
241
+ exported, function_name, depth, true );
242
+ REQUIRE (reachable.size () == 4 );
243
+ REQUIRE (reachable.count (" A" ));
244
+ REQUIRE (reachable.count (" B" ));
245
+ REQUIRE (reachable.count (" C" ));
246
+ REQUIRE (reachable.count (" D" ));
247
+
248
+ depth = 3 ;
249
+ reachable = get_functions_reachable_within_n_steps (
250
+ exported, function_name, depth, true );
251
+ REQUIRE (reachable.size () == 4 );
252
+ REQUIRE (reachable.count (" A" ));
253
+ REQUIRE (reachable.count (" B" ));
254
+ REQUIRE (reachable.count (" C" ));
255
+ REQUIRE (reachable.count (" D" ));
256
+ }
257
+
258
+ THEN (" We expect only {A} to be reachable from {A} in 0 steps" )
259
+ {
260
+ irep_idt function_name = " A" ;
261
+ std::size_t depth = 0 ;
262
+ std::set<irep_idt> reachable = get_functions_reachable_within_n_steps (
263
+ exported, function_name, depth, true );
264
+ REQUIRE (reachable.size () == 1 );
265
+ REQUIRE (reachable.count (" A" ));
266
+ }
267
+
226
268
THEN (" We expect A to have successors {A, B}" )
227
269
{
228
270
std::set<irep_idt> successors = get_callees (exported, " A" );
0 commit comments