diff --git a/src/main/java/inference/rewrite/RewriteInferenceSystem.java b/src/main/java/inference/rewrite/RewriteInferenceSystem.java index 15643a0..0f214b0 100644 --- a/src/main/java/inference/rewrite/RewriteInferenceSystem.java +++ b/src/main/java/inference/rewrite/RewriteInferenceSystem.java @@ -79,8 +79,10 @@ System.out.println("Loop is detected"); return false; } + Set conclusionLeftResult = new HashSet<>(); + Set conclusionRightResult = new HashSet<>(); for (EquationFormula inputFormula : inputFormulas) { - System.out.println("---------------------------" + inputFormula + "-------------------------------------------------"); +// System.out.println("---------------------------" + inputFormula + "-------------------------------------------------"); // ResourceTree baseTree = expandTree(i); // System.out.println("baseTree: " + baseTree); // Set result = rewriteTree(baseTree, i); @@ -96,12 +98,9 @@ // System.out.println("====================================="); Map> leftRewriteGraph = new HashMap<>(); Map> rightRewriteGraph = new HashMap<>(); - Set conclusionLeftResult = rewriteTree(new ResourceTree(conclusion.getLeftSideHand()), inputFormula, leftRewriteGraph); - Set conclusionRightResult = rewriteTree(new ResourceTree(conclusion.getRightSideHand()), inputFormula, rightRewriteGraph); -// System.out.println(conclusionLeftResult); + conclusionLeftResult.addAll(rewriteTree(new ResourceTree(conclusion.getLeftSideHand()), inputFormula, leftRewriteGraph)); + conclusionRightResult.addAll(rewriteTree(new ResourceTree(conclusion.getRightSideHand()), inputFormula, rightRewriteGraph)); // System.out.println(conclusionRightResult); - conclusionLeftResult.retainAll(conclusionRightResult); - System.out.println(conclusionLeftResult.size() != 0); // if (conclusionLeftResult.size() != 0) { // ResourceTree resultRoot = conclusionLeftResult.iterator().next(); // showRewriteGraph(resultRoot, leftRewriteGraph); @@ -111,8 +110,9 @@ // } } - - return false; + conclusionLeftResult.retainAll(conclusionRightResult); +// System.out.println(conclusionLeftResult.size() != 0); + return conclusionLeftResult.size() != 0; } diff --git a/src/test/java/rewrite/RewriteInferenceTest.java b/src/test/java/rewrite/RewriteInferenceTest.java new file mode 100644 index 0000000..d9d445b --- /dev/null +++ b/src/test/java/rewrite/RewriteInferenceTest.java @@ -0,0 +1,107 @@ +package rewrite; +import static org.junit.jupiter.api.Assertions.*; + +import org.junit.jupiter.api.Test; + +import java.util.List; + +import inference.rewrite.RewriteInferenceSystem; +import models.formulas.EquationFormula; +import models.formulas.Then; +import models.terms.DependencyTerm; +import models.terms.PrimedTerm; +import models.terms.Resource; +import utils.Utils; + +public class RewriteInferenceTest { + + @Test + void RewriteInferenceTest1() { + Resource totalAmount = new Resource("totalAmount", Utils.INT, 1); + Resource quantity = new Resource("quantity", Utils.INT, 1); + Resource unitPrice = new Resource("unitPrice", Utils.INT, 1); + Resource productId = new Resource("productID", Utils.INT, 1); + Resource productName = new Resource("productName", Utils.INT, 1); + Resource soledProductId = new Resource("soledProductId", Utils.INT, 1); + PrimedTerm totalAmountP = new PrimedTerm(totalAmount); + PrimedTerm quantityP = new PrimedTerm(quantity); + PrimedTerm unitPriceP = new PrimedTerm(unitPrice); + PrimedTerm productIdP = new PrimedTerm(productId); + PrimedTerm productNameP = new PrimedTerm(productName); + PrimedTerm soledProductIdP = new PrimedTerm(soledProductId); + Resource a = new Resource("a", Utils.INT, 0); + Resource b = new Resource("b", Utils.INT, 0); + Resource c = new Resource("c", Utils.INT, 0); + Resource d = new Resource("d", Utils.INT, 0); + Resource e = new Resource("e", Utils.INT, 0); + Resource salesId = new Resource("salesId", Utils.INT, 1); + PrimedTerm salesIdP = new PrimedTerm(salesId); + Resource mul = new Resource("mul", Utils.INT, 1); + Resource mul1= new Resource("mul1", Utils.INT, 1); + Resource mul2 = new Resource("mul2", Utils.INT, 1); + + // reference1 + DependencyTerm te1 = new DependencyTerm(unitPrice, productId, soledProductId); + DependencyTerm te2 = new DependencyTerm(mul, mul1, quantity, mul2, te1); + EquationFormula eq1 = new EquationFormula(totalAmount, te2); + + //reference2 + DependencyTerm te3 = new DependencyTerm(unitPriceP, productIdP, soledProductIdP); + DependencyTerm te4 = new DependencyTerm(mul, mul1, quantityP, mul2, te3); + EquationFormula eq2 = new EquationFormula(totalAmountP, te4); + + //input1 + DependencyTerm te5 = new DependencyTerm(soledProductIdP, salesIdP, a); + EquationFormula eq3 = new EquationFormula(te5, b); + + //input2 + DependencyTerm te6 = new DependencyTerm(quantityP, salesIdP, a); + EquationFormula eq4 = new EquationFormula(te6, c); + + //input3, 4, 5 + EquationFormula eq5 = new EquationFormula(productIdP, productId); + EquationFormula eq6 = new EquationFormula(productNameP, productName); + EquationFormula eq7 = new EquationFormula(unitPriceP, unitPrice); + + // value copy + DependencyTerm te7 = new DependencyTerm(totalAmountP, salesIdP, a); + DependencyTerm te8 = new DependencyTerm(unitPriceP, productIdP, b); + DependencyTerm te9 = new DependencyTerm(mul, mul1, c, mul2, te8); + EquationFormula eq8 = new EquationFormula(te7, te9); + + + //----------------------change value------------------- + //input6 + DependencyTerm te10 = new DependencyTerm(unitPriceP, productIdP, d); + EquationFormula eq9 = new EquationFormula(te10, e); + + //input7, 8, 9, 10 + EquationFormula eq10 = new EquationFormula(productNameP, productName); + EquationFormula eq11 = new EquationFormula(salesIdP, salesId); + EquationFormula eq12 = new EquationFormula(soledProductIdP, soledProductId); + EquationFormula eq13 = new EquationFormula(quantityP, quantity); + + //value copy + EquationFormula eq14 = new EquationFormula(totalAmountP, totalAmount); + + //value copy conclusion + DependencyTerm te11 = new DependencyTerm(totalAmountP, salesIdP, a); + DependencyTerm te12 = new DependencyTerm(totalAmount, salesId, a); + EquationFormula eq15 = new EquationFormula(te11, te12); + + //value copy change value + RewriteInferenceSystem ris = new RewriteInferenceSystem(List.of(eq9, eq10, eq11, eq12, eq13, eq14), eq15); + assertTrue(ris.inference()); + + //reference conclusion + DependencyTerm te13 = new DependencyTerm(soledProductId, salesId, a); + EquationFormula eq16 = new EquationFormula(d, te13); + Then th1 = new Then(eq16, eq15); + + //reference change value + RewriteInferenceSystem ris2 = new RewriteInferenceSystem(List.of(eq1, eq2, eq9, eq10, eq11, eq12, eq13), th1); + + assertFalse(ris2.inference()); + } + +}