Skip to content

Commit 5e73316

Browse files
committed
adding test for chained labels
1 parent 05a35e8 commit 5e73316

2 files changed

Lines changed: 33 additions & 2 deletions

File tree

prism/src/simulator/LabelEvaluator.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,8 @@ private int[] fixEvaluationOrder(LabelList labels) throws PrismLangException
5252
int numLabels = labels.size();
5353
BitSet done = new BitSet(numLabels);
5454
int[] order = new int[numLabels];
55-
for (int l = done.nextClearBit(0); l < numLabels; l = done.nextClearBit(l)) {
56-
traverseDfs(deps, l, order, -1, done);
55+
for (int l = done.nextClearBit(0), last = -1; l < numLabels; l = done.nextClearBit(l)) {
56+
last = traverseDfs(deps, l, order, last, done);
5757
}
5858
return order;
5959
}

prism/unit-tests/parser/ast/LabelTest.java

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import org.junit.jupiter.api.Nested;
44
import org.junit.jupiter.api.Test;
55
import parser.State;
6+
import parser.type.TypeBool;
67
import parser.type.TypeInt;
78
import prism.PrismLangException;
89
import simulator.LabelEvaluator;
@@ -12,6 +13,7 @@
1213
import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
1314
import static org.junit.jupiter.api.Assertions.assertEquals;
1415
import static org.junit.jupiter.api.Assertions.assertThrows;
16+
import static org.junit.jupiter.api.Assertions.assertTrue;
1517

1618
public class LabelTest
1719
{
@@ -79,6 +81,18 @@ public void testGetLabelValues() throws PrismLangException
7981
assertEquals(l2, actualValues.test("l2"));
8082
}
8183
}
84+
85+
@Test
86+
public void testLabelChainEvaluation() throws PrismLangException
87+
{
88+
LabelList ll = createLabelListWithDependencyChain();
89+
LabelEvaluator labelEvaluator = new LabelEvaluator(ll);
90+
91+
State state = new State(0);
92+
assertTrue(labelEvaluator.getLabelValue(state, "l1"));
93+
assertTrue(labelEvaluator.getLabelValue(state, "l2"));
94+
assertTrue(labelEvaluator.getLabelValue(state, "l3"));
95+
}
8296
}
8397

8498
private LabelList createLabelListWithoutCycle()
@@ -119,4 +133,21 @@ private LabelList createLabelListWith2LabelCycle()
119133
new ExpressionVar("d", TypeInt.getInstance()), new ExpressionLiteral(TypeInt.getInstance(), 5))));
120134
return ll;
121135
}
136+
137+
private LabelList createLabelListWithDependencyChain()
138+
{
139+
LabelList ll = new LabelList();
140+
/*
141+
label "l1" = "l2"
142+
label "l2" = "l3"
143+
label "l3" = true
144+
145+
"l3" must be evaluated as dependency for "l1"
146+
*/
147+
ll.addLabel(new ExpressionIdent("l1"), new ExpressionLabel("l2"));
148+
ll.addLabel(new ExpressionIdent("l2"), new ExpressionLabel("l3"));
149+
ll.addLabel(new ExpressionIdent("l3"), new ExpressionLiteral(TypeBool.getInstance(), true));
150+
151+
return ll;
152+
}
122153
}

0 commit comments

Comments
 (0)