Value target = assertHasValue(last, "target");
StartNode start = assertHasStartNode(op);
FinishNode finish = assertHasFinishNode(op);
SetNode set = assertHasSetNode(op);
assertGenerated(assertHasExecutionEdge(op, start, set));
assertGenerated(assertHasExecutionEdge(op, set, finish));
Arithmetic arith = assertHasArithmetic(op);
Value one = assertHasValue(op, "one");
assertTrue(one.isReadOnly());
assertEquals(arith.getOperationType(), ArithmeticOperationTypes.SUBTRACT);
// arith <- ExternalValue <- results
// arith <- ExternalValue <- one
{
assertEquals(2, arith.getInFlows().size());
boolean fromResults = false;
boolean fromOne = false;
for (DataFlowEdge ee : arith.getInFlows()) {
assertInstanceOf(ExternalValue.class, ee.getFrom());
ExternalValue ev = (ExternalValue) ee.getFrom();
if (one.equals(ev.getValue())) {
assertFalse(fromOne);
fromOne = true;
} else if (results.equals(ev.getValue())) {
assertFalse(fromResults);
fromResults = true;
} else {
fail("Unknown source: " + ev.getValue());
}
}
assertTrue(fromOne);
assertTrue(fromResults);
}
// arith -> ExternalValue -> set
{
assertEquals(1, arith.getOutFlows().size());
assertEquals(set, arith.getOutFlows().get(0).getTo());
}
assertGenerated(assertHasDataFlowEdge(op, arith, set));
// set -> ExternalValue -> target
{
assertEquals(1, set.getOutFlows().size());
ExternalValue ev = (ExternalValue) set.getOutFlows().get(0).getTo();
assertEquals(target, ev.getValue());
}
}