Steps to reproduce:
- Create 3 models like this:
model 1:
v_A -> e_AtoB /global.someVariable = true; -> v_B Shared B -> e_BtoA [global.someVariable==true] -> v_A
model 2:
v_B Shared B -> e_BtoK -> v_K -> e_KtoB -> v_B Shared B
model 3:
v_Z->e_ZtoB /global.someVariable = false; ->v_B Shared B->e_BtoZ [global.someVariable==false]->v_Z
In this case, it is quite frequent that after reaching state v_B in model 1, graphwalker will jump to v_B state in model 3, where it will not have valid(not blocked by guard) action, because global.someVariable is set to true.
AR: execution returns result null and does not continue traversing models (coverage criteria: random(edge_coverage(100)))
ER: It would be great if, instead of returning null when graphwalker can't find valid steps in model 1, it goes and checks if there are valid steps from that state in other models e.g. model 2 and model 3.
Of course there are workarounds, for example including those edges together in model 2, or including void edge going from v_B to v_B in both model 1 and model 3, but all these workaround harms the modelling process, understandability and runability of models(e.g. you will not be able to run Model 2 separately).