Skip to content

Commit f1c0c1a

Browse files
committed
Filter Assignments Not Present in Error Message
1 parent f2e9ea0 commit f1c0c1a

File tree

1 file changed

+17
-2
lines changed

1 file changed

+17
-2
lines changed

liquidjava-verifier/src/main/java/liquidjava/diagnostics/errors/RefinementError.java

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
package liquidjava.diagnostics.errors;
22

3+
import java.util.List;
4+
import java.util.stream.Collectors;
5+
36
import liquidjava.diagnostics.TranslationTable;
47
import liquidjava.rj_language.opt.derivation_node.ValDerivationNode;
58
import liquidjava.smt.Counterexample;
@@ -37,11 +40,23 @@ public String getCounterExampleString() {
3740
if (counterexample == null || counterexample.assignments().isEmpty())
3841
return null;
3942

43+
// filter out assignments of variables that do not appear in the found value
44+
String foundValue = found.getValue().toString();
45+
List<String> relevantAssignments = counterexample.assignments().stream()
46+
.filter(a -> {
47+
String varName = a.contains(" == ") ? a.substring(0, a.indexOf(" == ")).trim() : a;
48+
return foundValue.contains(varName);
49+
})
50+
.collect(Collectors.toList());
51+
52+
if (relevantAssignments.isEmpty())
53+
return null;
54+
4055
// join assignements with &&
41-
String counterexampleExp = String.join(" && ", counterexample.assignments());
56+
String counterexampleExp = String.join(" && ", relevantAssignments);
4257

4358
// check if counterexample is trivial (same as the found value)
44-
if (counterexampleExp.equals(found.getValue().toString()))
59+
if (counterexampleExp.equals(foundValue))
4560
return null;
4661

4762
return counterexampleExp;

0 commit comments

Comments
 (0)