/* * This file is part of the X10 project (http://x10-lang.org). * * This file is licensed to You under the Eclipse Public License (EPL); * You may not use this file except in compliance with the License. * You may obtain a copy of the License at * http://www.opensource.org/licenses/eclipse-1.0.php * * (C) Copyright IBM Corporation 2006-2010. */ package x10.constraints.tests; //import polyglot.ext.x10.types.X10TypeMixin; import junit.framework.TestCase; import x10.constraint.XConstraint; import x10.constraint.XConstraintManager; import x10.constraint.XField; import x10.constraint.XTerm; import x10.constraint.XVar; public class EntailmentTest extends TestCase { public EntailmentTest() { super("EntailmentTest"); } XTerm zero = XConstraintManager.getConstraintSystem().makeLit(new Integer(0)); XTerm one = XConstraintManager.getConstraintSystem().makeLit(new Integer(1)); XTerm two = XConstraintManager.getConstraintSystem().makeLit(new Integer(2)); XVar v0 = XConstraintManager.getConstraintSystem().makeUQV("v0"); XVar v1 = XConstraintManager.getConstraintSystem().makeUQV("v1"); XVar v2 = XConstraintManager.getConstraintSystem().makeUQV("v2"); /** * v0=v1,v1=v2 |- v0=v2 * @throws Throwable */ public void test1() throws Throwable { XConstraint c = XConstraintManager.getConstraintSystem().makeConstraint(); c.addBinding(v0, v1); c.addBinding(v1, v2); XConstraint d = XConstraintManager.getConstraintSystem().makeConstraint(); d.addBinding(v0, v2); assertTrue(c.entails(d)); } /** * v0=v1 |- exists x. x=v2 * @throws Throwable */ public void test2() throws Throwable { XConstraint c = XConstraintManager.getConstraintSystem().makeConstraint(); c.addBinding(v0,v1); XConstraint d = XConstraintManager.getConstraintSystem().makeConstraint(); XVar x = XConstraintManager.getConstraintSystem().makeEQV(); d.addBinding(x, v2); //XVar x1 = c0.genEQV(XConstraintManager.getConstraintSystem().makeUQV("x1"), true); //XTerm x1f = XConstraintManager.getConstraintSystem().makeField(x1, XConstraintManager.getConstraintSystem().makeUQV(new Object(), "f")); assertTrue(c.entails(d)); } /** * v0=v1 |- exists x, y. x=y * @throws Throwable */ public void test3() throws Throwable { XConstraint c = XConstraintManager.getConstraintSystem().makeConstraint(); c.addBinding(v0,v1); XConstraint d = XConstraintManager.getConstraintSystem().makeConstraint(); XVar x = XConstraintManager.getConstraintSystem().makeEQV(); XVar y = XConstraintManager.getConstraintSystem().makeEQV(); d.addBinding(x, y); //XVar x1 = c0.genEQV(XConstraintManager.getConstraintSystem().makeUQV("x1"), true); //XTerm x1f = XConstraintManager.getConstraintSystem().makeField(x1, XConstraintManager.getConstraintSystem().makeUQV(new Object(), "f")); assertTrue(c.entails(d)); } /** * v0=v1 |- v0.f=v1.f * @throws Throwable */ public void test4() throws Throwable { XConstraint c = XConstraintManager.getConstraintSystem().makeConstraint(); c.addBinding(v0,v1); XConstraint d = XConstraintManager.getConstraintSystem().makeConstraint(); XTerm v0f = XConstraintManager.getConstraintSystem().makeField(v0, "f"); XTerm v1f = XConstraintManager.getConstraintSystem().makeField(v1, "f"); d.addBinding(v0f, v1f); //XVar x1 = c0.genEQV(XConstraintManager.getConstraintSystem().makeUQV("x1"), true); boolean result = c.entails(d); assertTrue(result); } /** * v0=v0.f |- v1=v2 (antecedent is false) * @throws Throwable */ public void test5() throws Throwable { XConstraint c = XConstraintManager.getConstraintSystem().makeConstraint(); XTerm v0f = XConstraintManager.getConstraintSystem().makeField(v0, "f"); c.addBinding(v0f, v0); assertFalse(c.consistent()); XConstraint d = XConstraintManager.getConstraintSystem().makeConstraint(); d.addBinding(v1,v2); //XVar x1 = c0.genEQV(XConstraintManager.getConstraintSystem().makeUQV("x1"), true); boolean result = c.entails(d); assertTrue(result); } /** * |/= exists x1. v1=x1, v2=x2 * @throws Throwable */ public void test6() throws Throwable { XConstraint c = XConstraintManager.getConstraintSystem().makeConstraint(); XConstraint d = XConstraintManager.getConstraintSystem().makeConstraint(); XVar x1 = XConstraintManager.getConstraintSystem().makeEQV(); d.addBinding(v1,x1); d.addBinding(v2,x1); //XVar x1 = c0.genEQV(XConstraintManager.getConstraintSystem().makeUQV("x1"), true); boolean result = c.entails(d); assertFalse(result); } public void test7() throws Throwable { XConstraint c = XConstraintManager.getConstraintSystem().makeConstraint(); XConstraint d = XConstraintManager.getConstraintSystem().makeConstraint(); XVar x1 = XConstraintManager.getConstraintSystem().makeEQV(); XVar x2 = XConstraintManager.getConstraintSystem().makeEQV(); d.addBinding(v1,x1); d.addBinding(x2,x1); d.addBinding(v2,x2); //XVar x1 = c0.genEQV(XConstraintManager.getConstraintSystem().makeUQV("x1"), true); boolean result = c.entails(d); assertFalse(result); } public void test8() throws Throwable { XConstraint c = XConstraintManager.getConstraintSystem().makeConstraint(); XConstraint d = XConstraintManager.getConstraintSystem().makeConstraint(); XVar x1 = XConstraintManager.getConstraintSystem().makeEQV(); XVar x2 = XConstraintManager.getConstraintSystem().makeEQV(); d.addBinding(x2,x1); d.addBinding(v1,x1); d.addBinding(v2,x2); //XVar x1 = c0.genEQV(XConstraintManager.getConstraintSystem().makeUQV("x1"), true); boolean result = c.entails(d); assertFalse(result); } /** * |- exists x1. x1=v1, x1.f=v2 -- should fail * @throws Throwable */ public void test9() throws Throwable { XConstraint c = XConstraintManager.getConstraintSystem().makeConstraint(); XConstraint d = XConstraintManager.getConstraintSystem().makeConstraint(); XVar x1 = XConstraintManager.getConstraintSystem().makeEQV(); XTerm x1f = XConstraintManager.getConstraintSystem().makeField(x1, "f"); d.addBinding(v1,x1); d.addBinding(v2,x1f); //XVar x1 = c0.genEQV(XConstraintManager.getConstraintSystem().makeUQV("x1"), true); boolean result = c.entails(d); assertFalse(result); } /** * |- exists x1. x1=v1, x2=x1.f, x2=v2 -- should fail * @throws Throwable */ public void test10() throws Throwable { XConstraint c = XConstraintManager.getConstraintSystem().makeConstraint(); XConstraint d = XConstraintManager.getConstraintSystem().makeConstraint(); XVar x1 = XConstraintManager.getConstraintSystem().makeEQV(); XVar x2 = XConstraintManager.getConstraintSystem().makeEQV(); XTerm x1f = XConstraintManager.getConstraintSystem().makeField(x1, "f"); d.addBinding(v1,x1); d.addBinding(x2,x1f); d.addBinding(x2,v2); boolean result = c.entails(d); assertFalse(result); } /** * |- exists x1. x1=v1, x2=v1.f, x2=v2.f -- should fail * @throws Throwable */ public void test11() throws Throwable { XConstraint c = XConstraintManager.getConstraintSystem().makeConstraint(); XConstraint d = XConstraintManager.getConstraintSystem().makeConstraint(); XVar x1 = XConstraintManager.getConstraintSystem().makeEQV(); XVar x2 = XConstraintManager.getConstraintSystem().makeEQV(); XTerm v1f = XConstraintManager.getConstraintSystem().makeField(v1, "f"); XTerm v2f = XConstraintManager.getConstraintSystem().makeField(v2, "f"); d.addBinding(v1,x1); d.addBinding(x2,v1f); d.addBinding(x2,v2f); boolean result = c.entails(d); assertFalse(result); } /** * exists x1. x1=v1, x2=v1.f, x2=v2.f |- v1=v2 --- should fail * @throws Throwable */ public void test12() throws Throwable { XConstraint c = XConstraintManager.getConstraintSystem().makeConstraint(); XVar x1 = XConstraintManager.getConstraintSystem().makeEQV(); XVar x2 = XConstraintManager.getConstraintSystem().makeEQV(); XTerm v1f = XConstraintManager.getConstraintSystem().makeField(v1, "f"); XTerm v2f = XConstraintManager.getConstraintSystem().makeField(v2, "f"); c.addBinding(v1,x1); c.addBinding(x2,v1f); c.addBinding(x2,v2f); XConstraint d = XConstraintManager.getConstraintSystem().makeConstraint(); d.addBinding(v1,v2); boolean result = c.entails(d); assertFalse(result); } /** * v1=a |- exists x. x=a, x=v1 * @throws Throwable */ public void test13() throws Throwable { XConstraint c = XConstraintManager.getConstraintSystem().makeConstraint(); c.addBinding(v1,zero); XConstraint d = XConstraintManager.getConstraintSystem().makeConstraint(); XVar x1 = XConstraintManager.getConstraintSystem().makeEQV(); d.addBinding(zero,x1); d.addBinding(v1,x1); boolean result = c.entails(d); assertTrue(result); } /** * v0 : _{self=v1} |- v0=v1 * @throws Throwable public void test14() throws Throwable { final XVar v0 = XConstraintManager.getConstraintSystem().makeUQV("v0"); final XVar v1 = XConstraintManager.getConstraintSystem().makeUQV("v1"); final XConstraint s = XConstraintManager.getConstraintSystem().makeConstraint(); s.addBinding(v1, v0); XConstraint c = XConstraintManager.getConstraintSystem().makeConstraint(); c.addTerm(v0); XConstraint d = XConstraintManager.getConstraintSystem().makeConstraint(); d.addBinding(v0, v1); System.out.println(); System.out.println("EntailmentTest.test14: v0 : _{self=v1} |- v0=v1"); System.out.println("c:" + c); System.out.println("s:" + s); System.out.println("d: " + d + " ext:" + d.extConstraints()); assertTrue(c.entails(d, s)); } */ /** * |- exists x. x.a=x.b * @throws Throwable */ public void test15() throws Throwable { XConstraint c = XConstraintManager.getConstraintSystem().makeConstraint(); XConstraint d = XConstraintManager.getConstraintSystem().makeConstraint(); XVar X = XConstraintManager.getConstraintSystem().makeEQV(); XField<String> Xa = XConstraintManager.getConstraintSystem().makeField(X, "a"); XField<String> Xb = XConstraintManager.getConstraintSystem().makeField(X, "b"); d.addBinding(Xa, Xb); assertTrue(c.entails(d)); } }