diff --git a/src/main/java/inference/InferenceRule.java b/src/main/java/inference/InferenceRule.java index 1a3243b..ca3b6e7 100644 --- a/src/main/java/inference/InferenceRule.java +++ b/src/main/java/inference/InferenceRule.java @@ -1,21 +1,18 @@ package inference; import java.util.Collection; -import java.util.HashMap; import java.util.HashSet; import java.util.List; -import java.util.Map; import java.util.Set; import exceptions.SubstituteFailedException; import lombok.Getter; -import models.algebra.Variable; import models.formulas.Formula; import models.formulas.meta.MetaDependencyFormula; import models.formulas.meta.MetaEquationFormula; import models.formulas.meta.MetaFormula; import models.terms.RDLTerm; -import models.terms.meta.OrderVariableConstraint; +import models.terms.meta.MatchConstraint; import utils.Permutation; public class InferenceRule { @@ -63,19 +60,14 @@ return false; } - Map binding = new HashMap<>(); - Map orderConstraints = new HashMap<>(); - this.conclusion.isMatchedBy(conclusion, binding, orderConstraints); + Set matchResult = this.conclusion.isMatchedBy(conclusion); Set givenAssumptions = new HashSet<>(assumptions); for (MetaFormula assumption : this.assumptions) { boolean flg = false; for (Formula given : givenAssumptions) { - Map tmpBinding = new HashMap<>(binding); - Map tmpOrderConstraints = new HashMap<>(orderConstraints); - if (assumption.isMatchedBy(given, tmpBinding, tmpOrderConstraints)) { - binding.putAll(tmpBinding); - orderConstraints.putAll(tmpOrderConstraints); + matchResult = assumption.isMatchedBy(given, matchResult); + if (! matchResult.isEmpty()) { flg = true; givenAssumptions.remove(given); break; @@ -87,7 +79,12 @@ } if (this.defaultOrderConstraint != null) { - return defaultOrderConstraint.check(orderConstraints); + for (MatchConstraint constraint: matchResult) { + if (defaultOrderConstraint.check(constraint.getOrderConstraint())) { + return true; + } + } + return false; } return true; @@ -101,18 +98,24 @@ } private boolean check(List assumptions, Formula conclusion) { - Map binding = new HashMap<>(); - Map orderConstraints = new HashMap<>(); - for (int i = 0; i < assumptions.size(); i++) { - if (! this.assumptions.get(i).isMatchedBy(assumptions.get(i), binding, orderConstraints)) { + Set matchResult = this.assumptions.get(0).isMatchedBy(assumptions.get(0)); + for (int i = 1; i < assumptions.size(); i++) { + matchResult = this.assumptions.get(i).isMatchedBy(assumptions.get(i), matchResult); + if (matchResult.isEmpty()) { return false; } } - if (! this.conclusion.isMatchedBy(conclusion, binding, orderConstraints)) { + + if (this.conclusion.isMatchedBy(conclusion, matchResult).isEmpty()) { return false; } if (this.defaultOrderConstraint != null) { - return defaultOrderConstraint.check(orderConstraints); + for (MatchConstraint constraint: matchResult) { + if (defaultOrderConstraint.check(constraint.getOrderConstraint())) { + return true; + } + } + return false; } return true; } @@ -122,14 +125,14 @@ if (assumptions.size() != getAssumptionSize()) { return null; } - Map binding = new HashMap<>(); - Map orderConstraint = new HashMap<>(); + Set result = this.assumptions.get(0).isMatchedBy(assumptions.get(0)); for (int i = 0; i < getAssumptionSize(); i++) { - if (! this.assumptions.get(i).isMatchedBy(assumptions.get(i), binding, orderConstraint)) { + result = this.assumptions.get(i).isMatchedBy(assumptions.get(i), result); + if (result.isEmpty()) { return null; } } - return conclusion.substitution(binding); + return conclusion.substitution(result.iterator().next().getBinding()); } public Set apply(List assumptions, Set existTerms) { @@ -137,43 +140,37 @@ if (assumptions.size() != getAssumptionSize()) { return null; } - Map binding = new HashMap<>(); - Map orderConstraint = new HashMap<>(); + Set res = this.assumptions.get(0).isMatchedBy(assumptions.get(0)); for (int i = 0; i < getAssumptionSize(); i++) { - if (! this.assumptions.get(i).isMatchedBy(assumptions.get(i), binding, orderConstraint)) { + res = this.assumptions.get(i).isMatchedBy(assumptions.get(i), res); + if (res.isEmpty()) { return result; } } - try { - result.add(conclusion.substitution(binding)); - } catch (SubstituteFailedException e) { - + for (MatchConstraint constraint : res) { + try { + result.add(conclusion.substitution(constraint.getBinding())); + } catch (SubstituteFailedException e) {} } for (RDLTerm term : existTerms) { - Map localBinding = new HashMap<>(binding); - Map localOrderConstraint = new HashMap<>(orderConstraint); - if (conclusion instanceof MetaEquationFormula) { - MetaEquationFormula equation = (MetaEquationFormula) conclusion; - if (equation.getLeftSideHand().isMatchedBy(term, localBinding, localOrderConstraint)) { - result.add(conclusion.substitution(localBinding)); - } + Set localConstraints = new HashSet<>(res.stream().map(v -> new MatchConstraint(v)).toList()); + if (conclusion instanceof MetaEquationFormula equation) { + localConstraints= equation.getLeftSideHand().isMatchedBy(term, localConstraints); } - else if (conclusion instanceof MetaDependencyFormula) { - MetaDependencyFormula dependency = (MetaDependencyFormula) conclusion; - if (dependency.getDependency().isMatchedBy(term, localBinding, localOrderConstraint)) { - result.add(conclusion.substitution(localBinding)); - } + else if (conclusion instanceof MetaDependencyFormula dependency) { + localConstraints = dependency.getDependency().isMatchedBy(term, localConstraints); } + for (MatchConstraint constraint : localConstraints) { + result.add(conclusion.substitution(constraint.getBinding())); + } } - for (RDLTerm term : existTerms) { - Map localBinding = new HashMap<>(binding); - Map localOrderConstraint = new HashMap<>(orderConstraint); - if (conclusion instanceof MetaEquationFormula) { - MetaEquationFormula equation = (MetaEquationFormula) conclusion; - if (equation.getRightSideHand().isMatchedBy(term, localBinding, localOrderConstraint)) { - result.add(conclusion.substitution(localBinding)); - } + Set localConstraints = new HashSet<>(res.stream().map(v -> new MatchConstraint(v)).toList()); + if (conclusion instanceof MetaEquationFormula equation) { + localConstraints= equation.getRightSideHand().isMatchedBy(term, localConstraints); + } + for (MatchConstraint constraint : localConstraints) { + result.add(conclusion.substitution(constraint.getBinding())); } } return result; @@ -186,7 +183,8 @@ for (List assumptionList : Permutation.permutation(assumptions, assumptions.size())) { boolean matchFailed = false; for (int i = 0; i < getAssumptionSize(); i++) { - if (! this.assumptions.get(i).isMatchedBy(assumptionList.get(i))) { + Set result = this.assumptions.get(i).isMatchedBy(assumptionList.get(i)); + if (result.isEmpty()) { matchFailed = true; break; } diff --git a/src/main/java/inference/ProofSystem.java b/src/main/java/inference/ProofSystem.java index 57bfc69..1c48625 100644 --- a/src/main/java/inference/ProofSystem.java +++ b/src/main/java/inference/ProofSystem.java @@ -15,7 +15,6 @@ import models.formulas.DependencyFormula; import models.formulas.EquationFormula; import models.formulas.Formula; -import models.formulas.InFormula; import models.terms.EvaluatableTerm; import models.terms.RDLTerm; import utils.Product; @@ -684,7 +683,7 @@ for (int i = 0; i < axiom.getAssumptionSize(); i++) { matchedFormulas.add(new ArrayList<>()); for (Formula formula : formulas) { - if (axiom.getAssumptions().get(i).isMatchedBy(formula)) { + if (! axiom.getAssumptions().get(i).isMatchedBy(formula).isEmpty()) { matchedFormulas.get(i).add(formula); } } @@ -715,12 +714,7 @@ } else if (formula instanceof DependencyFormula) { RDLTerm dependency = ((DependencyFormula) formula).getDependency(); existTerms.addAll(dependency.getSubTerms(RDLTerm.class).values()); - } else if (formula instanceof InFormula){ - RDLTerm leftSideHand = ((InFormula) formula).getLeftSideHand(); - RDLTerm rightSideHand = ((InFormula) formula).getRightSideHand(); - existTerms.addAll(leftSideHand.getSubTerms(RDLTerm.class).values()); - existTerms.addAll(rightSideHand.getSubTerms(RDLTerm.class).values()); - } + } } private static boolean equationTransitionCheck(Collection assumptions, Formula conclusion) { diff --git a/src/main/java/models/formulas/meta/MetaFormula.java b/src/main/java/models/formulas/meta/MetaFormula.java index 3ce57fc..0340d09 100644 --- a/src/main/java/models/formulas/meta/MetaFormula.java +++ b/src/main/java/models/formulas/meta/MetaFormula.java @@ -1,6 +1,7 @@ package models.formulas.meta; import java.util.HashMap; +import java.util.HashSet; import java.util.Map; import java.util.Set; @@ -17,6 +18,15 @@ public abstract Set isMatchedBy(Formula formula, MatchConstraint constraint); + public Set isMatchedBy(Formula formula, Set constraints) { + Set result = new HashSet<>(); + for (MatchConstraint constraint: constraints) { + result.addAll(isMatchedBy(formula, constraint)); + } + return result; + } + + public abstract Formula substitution(Map binding); public abstract String toString(); diff --git a/src/main/java/models/terms/meta/MatchConstraint.java b/src/main/java/models/terms/meta/MatchConstraint.java index fca74c1..05adc4b 100644 --- a/src/main/java/models/terms/meta/MatchConstraint.java +++ b/src/main/java/models/terms/meta/MatchConstraint.java @@ -16,6 +16,11 @@ private final Map binding; private final Map orderConstraint; + public MatchConstraint(MatchConstraint constraint) { + this.binding = constraint.getBinding(); + this.orderConstraint = constraint.getOrderConstraint(); + } + public Map getBinding() { return new HashMap<>(binding); } diff --git a/src/test/java/formulas/meta/MetaEquationFormulaTest.java b/src/test/java/formulas/meta/MetaEquationFormulaTest.java index e77d072..7bb19eb 100644 --- a/src/test/java/formulas/meta/MetaEquationFormulaTest.java +++ b/src/test/java/formulas/meta/MetaEquationFormulaTest.java @@ -41,7 +41,7 @@ MetaEquationFormula metaFormula = new MetaEquationFormula(left, right); // [a : b -> c] = [a : b -> d] matches [se : v -> te] = [se : v -> ue] - assertTrue(metaFormula.isMatchedBy(formula)); + assertTrue(!metaFormula.isMatchedBy(formula).isEmpty()); } @@ -61,7 +61,7 @@ MetaDependencyFormula metaDepF = new MetaDependencyFormula(dep); //[a : b -> c] : d matches te : w - assertTrue(metaDepF.isMatchedBy(depF)); + assertTrue(! metaDepF.isMatchedBy(depF).isEmpty()); } } diff --git a/src/test/java/terms/DependencyTermTest.java b/src/test/java/terms/DependencyTermTest.java index df85bf3..8fedc28 100644 --- a/src/test/java/terms/DependencyTermTest.java +++ b/src/test/java/terms/DependencyTermTest.java @@ -111,6 +111,25 @@ } @Test + void MatchTest3() { + DependencyTerm t1 = new DependencyTerm(a, b, c, d, e); + DependencyTerm t2 = new DependencyTerm(c, f, g); + MetaResource o = new MetaResource(new Variable("o")); + MetaResource p = new MetaResource(new Variable("p")); + MetaResource q = new MetaResource(new Variable("q")); + MetaResource r = new MetaResource(new Variable("r")); + MetaResource s = new MetaResource(new Variable("s")); + MetaResource t = new MetaResource(new Variable("t")); + MetaResource u = new MetaResource(new Variable("u")); + MetaRDLTerm mt1 = new MetaRDLTerm(o, p, q, r, s); + MetaRDLTerm mt2 = new MetaRDLTerm(s, t, u); + Set tmp = mt1.isMatchedBy(t1); + assertTrue(! tmp.isEmpty()); + tmp = mt2.isMatchedBy(t2, tmp); + assertTrue(! tmp.isEmpty()); + } + + @Test void DynamicMatchTest() { Resource a1 = new Resource("a1", Utils.INT, 3); Resource a2 = new Resource("a2", Utils.INT, 1); diff --git a/src/test/java/terms/meta/MetaDependencyVariableTest.java b/src/test/java/terms/meta/MetaDependencyVariableTest.java index b6df427..1d47997 100644 --- a/src/test/java/terms/meta/MetaDependencyVariableTest.java +++ b/src/test/java/terms/meta/MetaDependencyVariableTest.java @@ -25,11 +25,11 @@ MetaDependencyVariable d = new MetaDependencyVariable(new Variable("d")); // [a : b] mathces d(dependency) - assertTrue(d.isMatchedBy(dep1)); + assertTrue(! d.isMatchedBy(dep1).isEmpty()); // a does not mathc d(dependency) - assertFalse(d.isMatchedBy(a)); + assertFalse(! d.isMatchedBy(a).isEmpty()); // [a : b -> c] does not mathc d(dependency) - assertFalse(d.isMatchedBy(te1)); + assertFalse(! d.isMatchedBy(te1).isEmpty()); } @Test @@ -42,9 +42,9 @@ MetaDependencyVariable d = new MetaDependencyVariable(new Variable("d"), new Constant("1")); // [a : b](1) mathces d(=1) - assertTrue(d.isMatchedBy(dep1)); + assertTrue(! d.isMatchedBy(dep1).isEmpty()); // [a : c](2) does not mathc d(=1) - assertFalse(d.isMatchedBy(dep2)); + assertFalse(! d.isMatchedBy(dep2).isEmpty()); } @Test @@ -59,11 +59,11 @@ MetaDependencyVariable d = new MetaDependencyVariable(new Variable("d"), OrderConstraint.LT, new Constant("1")); // [a : b](1) does not match d(<1) - assertFalse(d.isMatchedBy(dep1)); + assertFalse(! d.isMatchedBy(dep1).isEmpty()); // [a : c](2) does not match d(<1) - assertFalse(d.isMatchedBy(dep2)); + assertFalse(! d.isMatchedBy(dep2).isEmpty()); // [a : e](0) matches d(<1) - assertTrue(d.isMatchedBy(dep3)); + assertTrue(! d.isMatchedBy(dep3).isEmpty()); } @Test @@ -78,11 +78,11 @@ MetaDependencyVariable d = new MetaDependencyVariable(new Variable("d"), OrderConstraint.LE, new Constant("1")); // [a : b](1) matches d(<=1) - assertTrue(d.isMatchedBy(dep1)); + assertTrue(! d.isMatchedBy(dep1).isEmpty()); // [a : c](2) does not match d(<=1) - assertFalse(d.isMatchedBy(dep2)); + assertFalse(! d.isMatchedBy(dep2).isEmpty()); // [a : e](0) matches d(<=1) - assertTrue(d.isMatchedBy(dep3)); + assertTrue(! d.isMatchedBy(dep3).isEmpty()); } @Test @@ -97,11 +97,11 @@ MetaDependencyVariable d = new MetaDependencyVariable(new Variable("d"), OrderConstraint.GT, new Constant("1")); // [a : b](1) does not match d(>1) - assertFalse(d.isMatchedBy(dep1)); + assertFalse(! d.isMatchedBy(dep1).isEmpty()); // [a : c](2) matches d(>1) - assertTrue(d.isMatchedBy(dep2)); + assertTrue(! d.isMatchedBy(dep2).isEmpty()); // [a : e](0) does not match d(>1) - assertFalse(d.isMatchedBy(dep3)); + assertFalse(! d.isMatchedBy(dep3).isEmpty()); } @Test @@ -116,11 +116,11 @@ MetaDependencyVariable d = new MetaDependencyVariable(new Variable("d"), OrderConstraint.GE, new Constant("1")); // [a : b](1) matches d(>=1) - assertTrue(d.isMatchedBy(dep1)); + assertTrue(! d.isMatchedBy(dep1).isEmpty()); // [a : c](2) matches d(>=1) - assertTrue(d.isMatchedBy(dep2)); + assertTrue(! d.isMatchedBy(dep2).isEmpty()); // [a : e](0) does not match d(>=1) - assertFalse(d.isMatchedBy(dep3)); + assertFalse(! d.isMatchedBy(dep3).isEmpty()); } } diff --git a/src/test/java/terms/meta/MetaEvaluatableTermVariableTest.java b/src/test/java/terms/meta/MetaEvaluatableTermVariableTest.java index 804a07f..9c2e9c5 100644 --- a/src/test/java/terms/meta/MetaEvaluatableTermVariableTest.java +++ b/src/test/java/terms/meta/MetaEvaluatableTermVariableTest.java @@ -24,9 +24,9 @@ ResourceConstant one = new ResourceConstant("1"); DependencyTerm t1 = new DependencyTerm(a, b, c); - assertTrue(se.isMatchedBy(a)); - assertTrue(se.isMatchedBy(one)); - assertTrue(se.isMatchedBy(t1)); + assertTrue(! se.isMatchedBy(a).isEmpty()); + assertTrue(! se.isMatchedBy(one).isEmpty()); + assertTrue(! se.isMatchedBy(t1).isEmpty()); } } diff --git a/src/test/java/terms/meta/MetaRDLTermTest.java b/src/test/java/terms/meta/MetaRDLTermTest.java index 0aca615..9570299 100644 --- a/src/test/java/terms/meta/MetaRDLTermTest.java +++ b/src/test/java/terms/meta/MetaRDLTermTest.java @@ -35,15 +35,15 @@ MetaRDLTerm metaDep4 = new MetaRDLTerm(metaTe, v3); //[a : b] matches [v1 : v2] - assertTrue(metaDep.isMatchedBy(dep1)); + assertTrue(! metaDep.isMatchedBy(dep1).isEmpty()); //[[a : b -> c] : b] does not match [v1 : v2] - assertFalse(metaDep.isMatchedBy(dep2)); + assertFalse(! metaDep.isMatchedBy(dep2).isEmpty()); //[[a : b -> c] : b] matches [vte : v2] - assertTrue(metaDep2.isMatchedBy(dep2)); + assertTrue(! metaDep2.isMatchedBy(dep2).isEmpty()); //[[a : b -> c] : b] matches [[v1 : v2 -> v3] : v2] - assertTrue(metaDep3.isMatchedBy(dep2)); + assertTrue(! metaDep3.isMatchedBy(dep2).isEmpty()); //[[a : b -> c] : b] does not match [[v1 : v2 -> v3] : v3] - assertFalse(metaDep4.isMatchedBy(dep2)); + assertFalse(! metaDep4.isMatchedBy(dep2).isEmpty()); } @Test @@ -56,12 +56,12 @@ Resource a2 = new Resource("a2", INT, 2); Dependency d1 = new Dependency(a1, a2); //[1 : 2] matches [1 : 2] - assertTrue(vd1.isMatchedBy(d1)); + assertTrue(! vd1.isMatchedBy(d1).isEmpty()); Resource b1 = new Resource("b1", INT, 1); Dependency d2 = new Dependency(a1, b1); //[1 : 1] does not match [1 : 2] - assertFalse(vd1.isMatchedBy(d2)); + assertFalse(! vd1.isMatchedBy(d2).isEmpty()); } @Test @@ -82,17 +82,17 @@ Dependency d3 = new Dependency(new Dependency(a1, b1), a2); Dependency d4 = new Dependency(new Dependency(a1, a2), b2); //[1 : 2] does not match [x : x] - assertFalse(vd1.isMatchedBy(d1)); + assertFalse(! vd1.isMatchedBy(d1).isEmpty()); //[1 : 1] matches [x : x] - assertTrue(vd1.isMatchedBy(d2)); + assertTrue(! vd1.isMatchedBy(d2).isEmpty()); //[1 : 2] matches [x : y] - assertTrue(vd2.isMatchedBy(d1)); + assertTrue(! vd2.isMatchedBy(d1).isEmpty()); //[1 : 1] matches [x : y] - assertTrue(vd2.isMatchedBy(d2)); + assertTrue(! vd2.isMatchedBy(d2).isEmpty()); //[[1 : 1] : 2] does not match [[y : x] : x] - assertFalse(vd3.isMatchedBy(d3)); + assertFalse(! vd3.isMatchedBy(d3).isEmpty()); //[[1 : 2] : 2] matches [[y : x] : x] - assertTrue(vd3.isMatchedBy(d4)); + assertTrue(! vd3.isMatchedBy(d4).isEmpty()); } } diff --git a/src/test/java/terms/meta/MetaResourceVariableTest.java b/src/test/java/terms/meta/MetaResourceVariableTest.java index f076729..5dd30dc 100644 --- a/src/test/java/terms/meta/MetaResourceVariableTest.java +++ b/src/test/java/terms/meta/MetaResourceVariableTest.java @@ -32,19 +32,19 @@ MetaRDLTermVariable t = new MetaRDLTermVariable(new Variable("t")); // a matches x(resource variable) - assertTrue(x.isMatchedBy(a)); + assertTrue(! x.isMatchedBy(a).isEmpty()); // a does not match d(dependency) - assertFalse(d.isMatchedBy(a)); + assertFalse(! d.isMatchedBy(a).isEmpty()); // a does not match dte(dependency term) - assertFalse(dte.isMatchedBy(a)); + assertFalse(! dte.isMatchedBy(a).isEmpty()); // a matches te(evaluatable term) - assertTrue(te.isMatchedBy(a)); + assertTrue(! te.isMatchedBy(a).isEmpty()); // a matches t(term) - assertTrue(t.isMatchedBy(a)); + assertTrue(! t.isMatchedBy(a).isEmpty()); // [a : b] does not match x(resource variable) - assertFalse(x.isMatchedBy(dep)); + assertFalse(! x.isMatchedBy(dep).isEmpty()); // [a : b -> c] does not match x(resource variable) - assertFalse(x.isMatchedBy(depTerm)); + assertFalse(! x.isMatchedBy(depTerm).isEmpty()); } @Test @@ -53,9 +53,9 @@ MetaResource x = new MetaResource(new Variable("x"), parse("0")); MetaResource y = new MetaResource(new Variable("y"), parse("1")); //a(1) does not match x(=0) - assertFalse(x.isMatchedBy(a)); + assertFalse(! x.isMatchedBy(a).isEmpty()); //a(1) matches y(=1) - assertTrue(y.isMatchedBy(a)); + assertTrue(! y.isMatchedBy(a).isEmpty()); } @Test @@ -65,11 +65,11 @@ MetaResource y = new MetaResource(new Variable("y"), OrderConstraint.LT, parse("1")); MetaResource z = new MetaResource(new Variable("z"), OrderConstraint.LT, parse("2")); //a(1) does not match x(<0) - assertFalse(x.isMatchedBy(a)); + assertFalse(! x.isMatchedBy(a).isEmpty()); //a(1) matches y(<1) - assertFalse(y.isMatchedBy(a)); + assertFalse(! y.isMatchedBy(a).isEmpty()); //a(1) matches z(<2) - assertTrue(z.isMatchedBy(a)); + assertTrue(! z.isMatchedBy(a).isEmpty()); } @Test @@ -79,11 +79,11 @@ MetaResource y = new MetaResource(new Variable("y"), OrderConstraint.LE, parse("1")); MetaResource z = new MetaResource(new Variable("z"), OrderConstraint.LE, parse("2")); //a(1) does not match x(<=0) - assertFalse(x.isMatchedBy(a)); + assertFalse(! x.isMatchedBy(a).isEmpty()); //a(1) matches y(<=1) - assertTrue(y.isMatchedBy(a)); + assertTrue(! y.isMatchedBy(a).isEmpty()); //a(1) matches z(<=2) - assertTrue(z.isMatchedBy(a)); + assertTrue(! z.isMatchedBy(a).isEmpty()); } @Test @@ -93,11 +93,11 @@ MetaResource y = new MetaResource(new Variable("y"), OrderConstraint.GT, parse("1")); MetaResource z = new MetaResource(new Variable("z"), OrderConstraint.GT, parse("2")); //a(1) does not match x(>0) - assertTrue(x.isMatchedBy(a)); + assertTrue(! x.isMatchedBy(a).isEmpty()); //a(1) matches y(>1) - assertFalse(y.isMatchedBy(a)); + assertFalse(! y.isMatchedBy(a).isEmpty()); //a(1) matches z(>2) - assertFalse(z.isMatchedBy(a)); + assertFalse(! z.isMatchedBy(a).isEmpty()); } @Test @@ -107,11 +107,11 @@ MetaResource y = new MetaResource(new Variable("y"), OrderConstraint.GE, parse("1")); MetaResource z = new MetaResource(new Variable("z"), OrderConstraint.GE, parse("2")); //a(1) does not match x(>=0) - assertTrue(x.isMatchedBy(a)); + assertTrue(! x.isMatchedBy(a).isEmpty()); //a(1) matches y(>=1) - assertTrue(y.isMatchedBy(a)); + assertTrue(! y.isMatchedBy(a).isEmpty()); //a(1) matches z(>2) - assertFalse(z.isMatchedBy(a)); + assertFalse(! z.isMatchedBy(a).isEmpty()); } @Test @@ -120,7 +120,7 @@ MetaResource x = new MetaResource(new Variable("x"), parse("x")); //a(0) matches x(=x) - assertTrue(x.isMatchedBy(a)); + assertTrue(! x.isMatchedBy(a).isEmpty()); } @Test @@ -129,7 +129,7 @@ MetaResource x = new MetaResource(new Variable("x"), OrderConstraint.LT, parse("x")); //a(2) matches x(x) - assertTrue(x.isMatchedBy(a)); + assertTrue(! x.isMatchedBy(a).isEmpty()); } @Test @@ -156,7 +156,7 @@ MetaResource x = new MetaResource(new Variable("x"), OrderConstraint.GE, parse("x")); //a(2) matches x( binding = new HashMap<>(); - Map orderConstraint = new HashMap<>(); - metaTerm1.isMatchedBy(t1, binding, orderConstraint); - RDLTerm assignedTerm = metaTerm1.substitute(binding); - assertEquals(t1, assignedTerm); - binding.clear(); - orderConstraint.clear(); - metaTerm1.isMatchedBy(t2, binding, orderConstraint); - assertEquals(t2, metaTerm1.substitute(binding)); + Set result = metaTerm1.isMatchedBy(t1); + for (MatchConstraint constraint: result) { + RDLTerm assignedTerm = metaTerm1.substitute(constraint.getBinding()); + assertEquals(t1, assignedTerm); + } + result = metaTerm1.isMatchedBy(t2); + for (MatchConstraint constraint: result) { + RDLTerm assignedTerm = metaTerm1.substitute(constraint.getBinding()); + assertEquals(t2, assignedTerm); + } } }