package x10.cconstraints.test;
import java.util.List;
import polyglot.frontend.Compiler;
import polyglot.frontend.ExtensionInfo;
import polyglot.types.TypeSystem;
import x10.constraint.XTerm;
import x10.constraint.XVar;
import x10.types.X10FieldDef;
import x10.types.constraints.CConstraint;
import x10.types.constraints.ConstraintManager;
public class NestedExTest extends X10TestCase{
ExtensionInfo ext;
Compiler compiler;
TypeSystem ts;
X10FieldDef f,g;
public NestedExTest() {
super("NestedExTest");
f = makeField("f");
g = makeField("g");
}
public void test1() throws Throwable {
CConstraint c = ConstraintManager.getConstraintSystem().makeCConstraint();
XVar a = ConstraintManager.getConstraintSystem().makeUQV("a");
XVar x = ConstraintManager.getConstraintSystem().makeUQV("x");
XVar b = ConstraintManager.getConstraintSystem().makeUQV("b");
XVar af = ConstraintManager.getConstraintSystem().makeField(a,f);
XVar afg = ConstraintManager.getConstraintSystem().makeField(af,g);
XVar xf = ConstraintManager.getConstraintSystem().makeField(x,f);
XVar xfg = ConstraintManager.getConstraintSystem().makeField(xf,g);
XVar bg = ConstraintManager.getConstraintSystem().makeField(b,g);
XVar u = ConstraintManager.getConstraintSystem().makeEQV();
c.addBinding(afg,xfg);
c.addBinding(xf,b);
c=c.substitute(u,x);
List<? extends XTerm> xl = c.extConstraints();
System.out.print("constraints:");
for (XTerm z : xl) {
System.out.print(" " + z);
}
System.out.println();
System.out.print("(test1: Should print afg=bg) ");
print(c);
assertTrue(c.entails(afg,bg));
assertFalse(c.valid());
}
}