11package liquidjava .rj_language .opt ;
22
3- import static liquidjava .utils .VCTestUtils .assertSimplifiedVC ;
43import 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 ;
84import static liquidjava .utils .VCTestUtils .vc ;
95import static org .junit .jupiter .api .Assertions .assertEquals ;
106import 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}
0 commit comments