Skip to content

Commit ee3919c

Browse files
committed
Refactor Tests
1 parent 8cde2d2 commit ee3919c

4 files changed

Lines changed: 81 additions & 154 deletions

File tree

liquidjava-verifier/src/test/java/liquidjava/rj_language/opt/VCFoldingTest.java

Lines changed: 25 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,6 @@
11
package liquidjava.rj_language.opt;
22

3-
import static liquidjava.utils.VCTestUtils.assertSimplifiedVC;
43
import static liquidjava.utils.VCTestUtils.assertSimplificationSteps;
5-
import static liquidjava.utils.VCTestUtils.assertVC;
6-
import static liquidjava.utils.VCTestUtils.parse;
7-
import static liquidjava.utils.VCTestUtils.simplified;
84
import static liquidjava.utils.VCTestUtils.vc;
95
import static org.junit.jupiter.api.Assertions.assertEquals;
106
import static org.junit.jupiter.api.Assertions.assertInstanceOf;
@@ -28,17 +24,19 @@ void applyReturnsNullForNullImplication() {
2824

2925
@Test
3026
void foldsIntegerArithmeticAndComparisons() {
31-
assertSimplificationSteps(VCFolding::apply, vc("1 + 2 == 3"), simplified("3 == 3", "1 + 2 == 3"),
32-
simplified("true", "1 + 2 == 3"));
27+
VCImplication implication = vc("1 + 2 == 3");
28+
29+
assertSimplificationSteps(VCFolding::apply, implication, "3 == 3", "true");
3330
assertFolded("4 > 7", "false");
3431
}
3532

3633
@Test
3734
void foldsRealAndMixedNumericExpressions() {
38-
assertSimplificationSteps(VCFolding::apply, vc("1.5 + 2.0 == 3.5"),
39-
simplified("3.5 == 3.5", "1.5 + 2.0 == 3.5"), simplified("true", "1.5 + 2.0 == 3.5"));
40-
assertSimplificationSteps(VCFolding::apply, vc("2 + 0.5 > 2"), simplified("2.5 > 2", "2 + 0.5 > 2"),
41-
simplified("true", "2 + 0.5 > 2"));
35+
VCImplication realArithmetic = vc("1.5 + 2.0 == 3.5");
36+
VCImplication mixedArithmetic = vc("2 + 0.5 > 2");
37+
38+
assertSimplificationSteps(VCFolding::apply, realArithmetic, "3.5 == 3.5", "true");
39+
assertSimplificationSteps(VCFolding::apply, mixedArithmetic, "2.5 > 2", "true");
4240
}
4341

4442
@Test
@@ -79,8 +77,9 @@ void foldsPartialComparisonsWithoutDroppingSymbolicTerms() {
7977
@Test
8078
void foldsUnaryExpressions() {
8179
assertFolded("!true", "false");
82-
assertSimplificationSteps(VCFolding::apply, vc("-3 < 0"), simplified("-3 < 0", "-3 < 0"),
83-
simplified("true", "-3 < 0"));
80+
VCImplication implication = vc("-3 < 0");
81+
82+
assertSimplificationSteps(VCFolding::apply, implication, "-3 < 0", "true");
8483
}
8584

8685
@Test
@@ -92,8 +91,9 @@ void foldsIteExpressions() {
9291

9392
@Test
9493
void foldsIteBranchesBeforeComparingThem() {
95-
assertSimplificationSteps(VCFolding::apply, vc("cond ? 1 + 2 : 3"),
96-
simplified("cond ? 3 : 3", "cond ? 1 + 2 : 3"), simplified("3", "cond ? 1 + 2 : 3"));
94+
VCImplication implication = vc("cond ? 1 + 2 : 3");
95+
96+
assertSimplificationSteps(VCFolding::apply, implication, "cond ? 3 : 3", "3");
9797
}
9898

9999
@Test
@@ -117,8 +117,7 @@ void foldsResolvedEnumLiterals() {
117117
VCImplication implication = new VCImplication(
118118
new Predicate(new BinaryExpression(limit, "==", new LiteralInt(3))));
119119

120-
assertSimplificationSteps(VCFolding::apply, implication, simplified("3 == 3", "Config.LIMIT == 3"),
121-
simplified("true", "Config.LIMIT == 3"));
120+
assertSimplificationSteps(VCFolding::apply, implication, "3 == 3", "true");
122121
}
123122

124123
@Test
@@ -129,23 +128,20 @@ void foldsResolvedEnumLiteralsInsideLargerExpression() {
129128
VCImplication implication = new VCImplication(
130129
new Predicate(new BinaryExpression(arithmetic, "==", new LiteralInt(5))));
131130

132-
assertSimplificationSteps(VCFolding::apply, implication, simplified("3 + 2 == 5", "Config.LIMIT + 2 == 5"),
133-
simplified("5 == 5", "Config.LIMIT + 2 == 5"), simplified("true", "Config.LIMIT + 2 == 5"));
131+
assertSimplificationSteps(VCFolding::apply, implication, "3 + 2 == 5", "5 == 5", "true");
134132
}
135133

136134
@Test
137135
void preservesOriginFromExistingSimplifiedImplication() {
138136
VCImplication substituted = VCSubstitution.apply(vc("∀x:int. x == 1", "x + 1 + 2 > 0"));
139137

140-
assertSimplificationSteps(VCFolding::apply, substituted, simplified("2 + 2 > 0", "∀x:int. x + 1 + 2 > 0"),
141-
simplified("4 > 0", "∀x:int. x + 1 + 2 > 0"), simplified("true", "∀x:int. x + 1 + 2 > 0"));
138+
assertSimplificationSteps(VCFolding::apply, substituted, "2 + 2 > 0", "4 > 0", "true");
142139
}
143140

144141
@Test
145142
void recordsOriginWhenOnlyGroupIsUnwrapped() {
146-
VCImplication implication = new VCImplication(new Predicate(new GroupExpression(parse("x > 0"))));
147-
148-
VCImplication result = VCFolding.apply(implication);
143+
VCImplication implication = vc("(x > 0)");
144+
VCImplication result = assertSimplificationSteps(VCFolding::apply, implication, "x > 0");
149145

150146
SimplifiedVCImplication simplified = assertInstanceOf(SimplifiedVCImplication.class, result);
151147
assertEquals("x > 0", simplified.getRefinement().toString());
@@ -156,30 +152,26 @@ void recordsOriginWhenOnlyGroupIsUnwrapped() {
156152
void recordsOriginWhenFoldingLaterImplication() {
157153
VCImplication implication = vc("x > 0", "1 + 2 > 0");
158154

159-
VCImplication result = VCFolding.apply(implication);
155+
VCImplication result = assertSimplificationSteps(VCFolding::apply, implication, "x > 0 -> 3 > 0");
160156

161-
assertEquals("x > 0", result.getRefinement().toString());
162157
SimplifiedVCImplication simplifiedNext = assertInstanceOf(SimplifiedVCImplication.class, result.getNext());
163-
assertEquals("3 > 0", simplifiedNext.getRefinement().toString());
164158
assertEquals("1 + 2 > 0", simplifiedNext.getOrigin().getRefinement().toString());
165159

166-
result = VCFolding.apply(result);
160+
result = assertSimplificationSteps(VCFolding::apply, result, "x > 0 -> true");
167161

168-
assertEquals("x > 0", result.getRefinement().toString());
169162
simplifiedNext = assertInstanceOf(SimplifiedVCImplication.class, result.getNext());
170-
assertEquals("true", simplifiedNext.getRefinement().toString());
171163
assertEquals("1 + 2 > 0", simplifiedNext.getOrigin().getRefinement().toString());
172164
}
173165

174166
private static void assertFolded(String original, String folded) {
175-
VCImplication result = VCFolding.apply(vc(original));
167+
VCImplication implication = vc(original);
176168

177-
assertSimplifiedVC(result, simplified(folded, original));
169+
assertSimplificationSteps(VCFolding::apply, implication, folded);
178170
}
179171

180172
private static void assertUnchanged(String original) {
181-
VCImplication result = VCFolding.apply(vc(original));
173+
VCImplication implication = vc(original);
182174

183-
assertVC(result, original);
175+
assertSimplificationSteps(VCFolding::apply, implication, original);
184176
}
185177
}
Lines changed: 14 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
11
package liquidjava.rj_language.opt;
22

3-
import static liquidjava.utils.VCTestUtils.assertSimplifiedVC;
43
import static liquidjava.utils.VCTestUtils.assertSimplificationSteps;
5-
import static liquidjava.utils.VCTestUtils.assertVC;
6-
import static liquidjava.utils.VCTestUtils.simplified;
74
import static liquidjava.utils.VCTestUtils.vc;
85
import static org.junit.jupiter.api.Assertions.assertNull;
96

@@ -26,78 +23,67 @@ void simplifyOnceReturnsNullForNullImplication() {
2623
void simplifyOnceAppliesSubstitutionBeforeFolding() {
2724
VCImplication implication = vc("∀x:int. x == 1 + 2", "x > 2");
2825

29-
assertSimplificationSteps(VCSimplification::simplifyOnce, implication, simplified("1 + 2 > 2", "∀x:int. x > 2"),
30-
simplified("3 > 2", "∀x:int. x > 2"), simplified("true", "∀x:int. x > 2"));
26+
assertSimplificationSteps(VCSimplification::simplifyOnce, implication, "1 + 2 > 2", "3 > 2", "true");
3127
}
3228

3329
@Test
3430
void simplifyOnceDoesNotFoldAfterSubstitutionInSameStep() {
3531
VCImplication implication = vc("∀x:int. x == 1 + 2", "x == 3");
3632

37-
assertSimplificationSteps(VCSimplification::simplifyOnce, implication,
38-
simplified("1 + 2 == 3", "∀x:int. x == 3"), simplified("3 == 3", "∀x:int. x == 3"),
39-
simplified("true", "∀x:int. x == 3"));
33+
assertSimplificationSteps(VCSimplification::simplifyOnce, implication, "1 + 2 == 3", "3 == 3", "true");
4034
}
4135

4236
@Test
4337
void simplifyOnceAppliesFoldingWhenNoSubstitutionIsAvailable() {
4438
VCImplication implication = vc("1 + 2 > 2");
4539

46-
assertSimplificationSteps(VCSimplification::simplifyOnce, implication, simplified("3 > 2", "1 + 2 > 2"),
47-
simplified("true", "1 + 2 > 2"));
40+
assertSimplificationSteps(VCSimplification::simplifyOnce, implication, "3 > 2", "true");
4841
}
4942

5043
@Test
5144
void simplifyKeepsApplyingStepsUntilFixedPoint() {
5245
VCImplication implication = vc("∀x:int. x == 1 + 2", "x + 1 > 3");
5346

54-
VCImplication result = VCSimplification.simplifyToFixedPoint(implication);
55-
56-
assertSimplifiedVC(result, simplified("true", "∀x:int. x + 1 > 3"));
47+
assertSimplificationSteps(VCSimplification::simplifyOnce, implication, "1 + 2 + 1 > 3", "3 + 1 > 3", "4 > 3",
48+
"true");
5749
}
5850

5951
@Test
6052
void simplifyAppliesMultipleSubstitutionsBeforeReachingFixedPoint() {
6153
VCImplication implication = vc("∀x:int. x == 3", "∀y:int. y == x + 1", "y > x");
6254

63-
VCImplication result = VCSimplification.simplifyToFixedPoint(implication);
64-
65-
assertSimplifiedVC(result, simplified("true", "∀y:int. y > x"));
55+
assertSimplificationSteps(VCSimplification::simplifyOnce, implication, "∀y:int. y == 3 + 1 -> y > 3",
56+
"3 + 1 > 3", "4 > 3", "true");
6657
}
6758

6859
@Test
6960
void simplifyAppliesLongSubstitutionChainBeforeReachingFixedPoint() {
7061
VCImplication implication = vc("∀x:int. x == 1", "∀y:int. y == x + 1", "∀z:int. z == y + 1", "z == 3");
7162

72-
VCImplication result = VCSimplification.simplifyToFixedPoint(implication);
73-
74-
assertSimplifiedVC(result, simplified("true", "∀z:int. z == 3"));
63+
assertSimplificationSteps(VCSimplification::simplifyOnce, implication,
64+
"∀y:int. y == 1 + 1 -> ∀z:int. z == y + 1 -> z == 3", "∀z:int. z == 1 + 1 + 1 -> z == 3",
65+
"1 + 1 + 1 == 3", "2 + 1 == 3", "3 == 3", "true");
7566
}
7667

7768
@Test
7869
void simplifyCombinesSubstitutionAndNestedFoldingAcrossFixedPoint() {
7970
VCImplication implication = vc("∀x:int. x == 1", "∀y:int. y == x + 2", "y - 1 == 2");
8071

81-
VCImplication result = VCSimplification.simplifyToFixedPoint(implication);
82-
83-
assertSimplifiedVC(result, simplified("true", "∀y:int. y - 1 == 2"));
72+
assertSimplificationSteps(VCSimplification::simplifyOnce, implication, "∀y:int. y == 1 + 2 -> y - 1 == 2",
73+
"1 + 2 - 1 == 2", "3 - 1 == 2", "2 == 2", "true");
8474
}
8575

8676
@Test
8777
void simplifyStopsAfterSubstitutionWhenOnlyNegativeLiteralShapeChanges() {
8878
VCImplication implication = vc("∀x:int. x == a + 0", "x >= -3");
8979

90-
VCImplication result = VCSimplification.simplifyToFixedPoint(implication);
91-
92-
assertSimplifiedVC(result, simplified("a + 0 >= -3", "∀x:int. x >= -3"));
80+
assertSimplificationSteps(VCSimplification::simplifyOnce, implication, "a + 0 >= -3");
9381
}
9482

9583
@Test
9684
void simplifyLeavesUnchangedVcAsPlainPredicates() {
9785
VCImplication implication = vc("x > 0", "y > x");
9886

99-
VCImplication result = VCSimplification.simplifyToFixedPoint(implication);
100-
101-
assertVC(result, "x > 0", "y > x");
87+
assertSimplificationSteps(VCSimplification::simplifyOnce, implication, "x > 0 -> y > x");
10288
}
10389
}

0 commit comments

Comments
 (0)