diff --git a/src/test/java/UnifyTest.java b/src/test/java/UnifyTest.java index 5eb0dab..5c1829c 100644 --- a/src/test/java/UnifyTest.java +++ b/src/test/java/UnifyTest.java @@ -676,6 +676,563 @@ public class UnifyTest { System.out.println(solution.size()); } + @Test + public void scalark3(){ + UnifyType type1; + UnifyType type2; + + //und-constraints + Set undConstraints = new HashSet<>(); + //X <. E + type1 = new PlaceholderType("X"); + type2 = new PlaceholderType("E"); + undConstraints.add(new UnifyPair(type1, type2, PairOperator.SMALLERDOT)); + //L =. Scalar + type1 = new PlaceholderType("L"); + type2 = new ReferenceType("Scalar"); + undConstraints.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT)); + //F <. E + type1 = new PlaceholderType("F"); + type2 = new PlaceholderType("E"); + undConstraints.add(new UnifyPair(type1, type2, PairOperator.SMALLERDOT)); + //H =. Scalar + type1 = new PlaceholderType("H"); + type2 = new ReferenceType("Scalar"); + undConstraints.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT)); + //E >> oderConstraints = new ArrayList<>(); + Set> constraints = new HashSet<>(); + Constraint constraint = new Constraint<>(); + + //set #1 + constraints = new HashSet<>(); + //D =. java.lang.Integer + constraint = new Constraint<>(); + type1 = new PlaceholderType("D"); + type2 = new ReferenceType("java.lang.Integer"); + constraints.add(constraint); + //D =. java.lang.Float + constraint = new Constraint<>(); + type1 = new PlaceholderType("D"); + type2 = new ReferenceType("java.lang.Float"); + constraints.add(constraint); + oderConstraints.add(constraints); + + //set #2 + constraints = new HashSet<>(); + //F =. java.lang.Float + constraint = new Constraint<>(); + type1 = new PlaceholderType("F"); + type2 = new ReferenceType("java.lang.Float"); + constraints.add(constraint); + //F =. java.lang.Integer + constraint = new Constraint<>(); + type1 = new PlaceholderType("F"); + type2 = new ReferenceType("java.lang.Integer"); + constraints.add(constraint); + oderConstraints.add(constraints); + + //set #3 + constraints = new HashSet<>(); + //H =. ? extends Scalar + constraint = new Constraint<>(); + type1 = new PlaceholderType("H"); + type2 = new ExtendsType(new ReferenceType("Scalar")); + constraint.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT)); + //java.lang.Integer =. J + type1 = new ReferenceType("java.lang.Integer"); + type2 = new PlaceholderType("J"); + constraint.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT)); + constraints.add(constraint); + //java.lang.Integer =. J + constraint = new Constraint<>(); + type1 = new ReferenceType("java.lang.Integer"); + type2 = new PlaceholderType("J"); + constraint.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT)); + //H =. ? extends Vector + type1 = new PlaceholderType("H"); + type2 = new ExtendsType(new ReferenceType("Vector", new TypeParams(new PlaceholderType("AJU")))); + constraint.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT)); + constraints.add(constraint); + //java.lang.Integer =. J + constraint = new Constraint<>(); + type1 = new ReferenceType("java.lang.Integer"); + type2 = new PlaceholderType("J"); + constraint.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT)); + //H =. Vector + type1 = new PlaceholderType("H"); + type2 = new ReferenceType("Vector", new TypeParams(new PlaceholderType("AJU"))); + constraint.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT)); + constraints.add(constraint); + //java.lang.Integer =. J + constraint = new Constraint<>(); + type1 = new ReferenceType("java.lang.Integer"); + type2 = new PlaceholderType("J"); + constraint.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT)); + //H =. ? extends AbstractList + type1 = new PlaceholderType("H"); + type2 = new ExtendsType(new ReferenceType("AbstractList", new TypeParams(new PlaceholderType("AJT")))); + constraint.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT)); + constraints.add(constraint); + //java.lang.Integer =. J + constraint = new Constraint<>(); + type1 = new ReferenceType("java.lang.Integer"); + type2 = new PlaceholderType("J"); + constraint.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT)); + //H =. Scalar + type1 = new PlaceholderType("H"); + type2 = new ReferenceType("Scalar"); + constraint.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT)); + constraints.add(constraint); + //java.lang.Integer =. J + constraint = new Constraint<>(); + type1 = new ReferenceType("java.lang.Integer"); + type2 = new PlaceholderType("J"); + constraint.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT)); + //H =. AbstractList + type1 = new PlaceholderType("H"); + type2 = new ReferenceType("AbstractList", new TypeParams(new PlaceholderType("AJT"))); + constraint.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT)); + constraints.add(constraint); + oderConstraints.add(constraints); + + //set #4 + constraints = new HashSet<>(); + //E <. java.lang.Integer + constraint = new Constraint<>(); + type1 = new PlaceholderType("E"); + type2 = new ReferenceType("java.lang.Integer"); + constraint.add(new UnifyPair(type1, type2, PairOperator.SMALLERDOT)); + //L =. Scalar + type1 = new PlaceholderType("L"); + type2 = new ReferenceType("Scalar"); + constraint.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT)); + //java.lang.Integer =. O + type1 = new ReferenceType("java.lang.Integer"); + type2 = new PlaceholderType("O"); + constraint.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT)); + constraints.add(constraint); + //E <. java.lang.Integer + constraint = new Constraint<>(); + type1 = new PlaceholderType("E"); + type2 = new ReferenceType("java.lang.Integer"); + constraint.add(new UnifyPair(type1, type2, PairOperator.SMALLERDOT)); + //AJV =. O + type1 = new PlaceholderType("AJV"); + type2 = new PlaceholderType("O"); + constraint.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT)); + //L =. AbstractList + type1 = new PlaceholderType("L"); + type2 = new ReferenceType("AbstractList", new TypeParams(new PlaceholderType("AJV"))); + constraint.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT)); + constraints.add(constraint); + //E <. java.lang.Integer + constraint = new Constraint<>(); + type1 = new PlaceholderType("E"); + type2 = new ReferenceType("java.lang.Integer"); + constraint.add(new UnifyPair(type1, type2, PairOperator.SMALLERDOT)); + //java.lang.Integer =. O + type1 = new ReferenceType("java.lang.Integer"); + type2 = new PlaceholderType("O"); + constraint.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT)); + //L =. ? extends Scalar + type1 = new PlaceholderType("L"); + type2 = new ExtendsType(new ReferenceType("Scalar")); + constraint.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT)); + constraints.add(constraint); + //E <. java.lang.Integer + constraint = new Constraint<>(); + type1 = new PlaceholderType("E"); + type2 = new ReferenceType("java.lang.Integer"); + constraint.add(new UnifyPair(type1, type2, PairOperator.SMALLERDOT)); + //L =. ? extends AbstractList + type1 = new PlaceholderType("L"); + type2 = new ExtendsType(new ReferenceType("AbstractList", new TypeParams(new PlaceholderType("AJV")))); + constraint.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT)); + //AJV =. O + type1 = new PlaceholderType("AJV"); + type2 = new PlaceholderType("O"); + constraint.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT)); + constraints.add(constraint); + //L =. Vector + constraint = new Constraint<>(); + type1 = new PlaceholderType("L"); + type2 = new ReferenceType("Vector", new TypeParams(new PlaceholderType("AJW"))); + constraint.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT)); + //E <. java.lang.Integer + type1 = new PlaceholderType("E"); + type2 = new ReferenceType("java.lang.Integer"); + constraint.add(new UnifyPair(type1, type2, PairOperator.SMALLERDOT)); + //AJW =. O + type1 = new PlaceholderType("AJW"); + type2 = new PlaceholderType("O"); + constraint.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT)); + constraints.add(constraint); + //E <. java.lang.Integer + constraint = new Constraint<>(); + type1 = new PlaceholderType("E"); + type2 = new ReferenceType("java.lang.Integer"); + constraint.add(new UnifyPair(type1, type2, PairOperator.SMALLERDOT)); + //AJW =. O + type1 = new PlaceholderType("AJW"); + type2 = new PlaceholderType("O"); + constraint.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT)); + //L =. ? extends Vector + type1 = new PlaceholderType("L"); + type2 = new ExtendsType(new ReferenceType("Vector", new TypeParams(new PlaceholderType("AJW")))); + constraint.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT)); + constraints.add(constraint); + oderConstraints.add(constraints); + + //set #5 + constraints = new HashSet<>(); + //E <. java.lang.Integer + constraint = new Constraint<>(); + type1 = new PlaceholderType("E"); + type2 = new ReferenceType("java.lang.Integer"); + constraint.add(new UnifyPair(type1, type2, PairOperator.SMALLERDOT)); + //B =. ? extends Scalar + type1 = new PlaceholderType("B"); + type2 = new ExtendsType(new ReferenceType("Scalar")); + constraint.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT)); + //java.lang.Integer =. S + type1 = new ReferenceType("java.lang.Integer"); + type2 = new ReferenceType("S"); + constraint.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT)); + constraints.add(constraint); + //AJX =. S + constraint = new Constraint<>(); + type1 = new PlaceholderType("AJX"); + type2 = new PlaceholderType("S"); + constraint.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT)); + //E <. java.lang.Integer + type1 = new PlaceholderType("E"); + type2 = new ReferenceType("java.lang.Integer"); + constraint.add(new UnifyPair(type1, type2, PairOperator.SMALLERDOT)); + //B =. AbstractList + type1 = new PlaceholderType("B"); + type2 = new ReferenceType("AbstractList", new TypeParams(new PlaceholderType("AJX"))); + constraint.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT)); + constraints.add(constraint); + //AJX =. S + constraint = new Constraint<>(); + type1 = new PlaceholderType("AJX"); + type2 = new PlaceholderType("S"); + constraint.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT)); + //E <. java.lang.Integer + type1 = new PlaceholderType("E"); + type2 = new ReferenceType("java.lang.Integer"); + constraint.add(new UnifyPair(type1, type2, PairOperator.SMALLERDOT)); + //B =. ? extends AbstractList + type1 = new PlaceholderType("B"); + type2 = new ExtendsType(new ReferenceType("AbstractList", new TypeParams(new PlaceholderType("AJX")))); + constraint.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT)); + constraints.add(constraint); + //E <. java.lang.Integer + constraint = new Constraint<>(); + type1 = new PlaceholderType("E"); + type2 = new ReferenceType("java.lang.Integer"); + constraint.add(new UnifyPair(type1, type2, PairOperator.SMALLERDOT)); + //B =. Vector + type1 = new PlaceholderType("B"); + type2 = new ReferenceType("Vector", new TypeParams(new PlaceholderType("AJY"))); + constraint.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT)); + //AJY =. S + type1 = new PlaceholderType("AJY"); + type2 = new PlaceholderType("S"); + constraint.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT)); + constraints.add(constraint); + //E <. java.lang.Integer + constraint = new Constraint<>(); + type1 = new PlaceholderType("E"); + type2 = new ReferenceType("java.lang.Integer"); + constraint.add(new UnifyPair(type1, type2, PairOperator.SMALLERDOT)); + //AJY =. S + type1 = new PlaceholderType("AJY"); + type2 = new PlaceholderType("S"); + constraint.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT)); + //B =. ? extends Vector + type1 = new PlaceholderType("B"); + type2 = new ExtendsType(new ReferenceType("Vector", new TypeParams(new PlaceholderType("AJY")))); + constraint.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT)); + constraints.add(constraint); + //E <. java.lang.Integer + constraint = new Constraint<>(); + type1 = new PlaceholderType("E"); + type2 = new ReferenceType("java.lang.Integer"); + constraint.add(new UnifyPair(type1, type2, PairOperator.SMALLERDOT)); + //java.lang.Integer =. S + type1 = new ReferenceType("java.lang.Integer"); + type2 = new PlaceholderType("S"); + constraint.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT)); + //B =. Scalar + type1 = new PlaceholderType("B"); + type2 = new ReferenceType("Scalar"); + constraint.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT)); + constraints.add(constraint); + oderConstraints.add(constraints); + + //set #6 + constraints = new HashSet<>(); + //S <. java.lang.Float + constraint = new Constraint<>(); + type1 = new PlaceholderType("S"); + type2 = new ReferenceType("java.lang.Float"); + constraint.add(new UnifyPair(type1, type2, PairOperator.SMALLERDOT)); + //O <. java.lang.Float + type1 = new PlaceholderType("O"); + type2 = new ReferenceType("java.lang.Float"); + constraint.add(new UnifyPair(type1, type2, PairOperator.SMALLERDOT)); + //java.lang.Float =. U + type1 = new ReferenceType("java.lang.Float"); + type2 = new PlaceholderType("U"); + constraint.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT)); + constraints.add(constraint); + //S <. java.lang.Integer + constraint = new Constraint<>(); + type1 = new PlaceholderType("S"); + type2 = new ReferenceType("java.lang.Integer"); + constraint.add(new UnifyPair(type1, type2, PairOperator.SMALLERDOT)); + //O <. java.lang.Integer + type1 = new PlaceholderType("O"); + type2 = new ReferenceType("java.lang.Integer"); + constraint.add(new UnifyPair(type1, type2, PairOperator.SMALLERDOT)); + //java.lang.Integer =. U + type1 = new ReferenceType("java.lang.Integer"); + type2 = new PlaceholderType("U"); + constraint.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT)); + constraints.add(constraint); + oderConstraints.add(constraints); + + //set #7 + constraints = new HashSet<>(); + //U <. java.lang.Integer + constraint = new Constraint<>(); + type1 = new PlaceholderType("U"); + type2 = new ReferenceType("java.lang.Integer"); + constraint.add(new UnifyPair(type1, type2, PairOperator.SMALLERDOT)); + //C <. java.lang.Integer + type1 = new PlaceholderType("C"); + type2 = new ReferenceType("java.lang.Integer"); + constraint.add(new UnifyPair(type1, type2, PairOperator.SMALLERDOT)); + //java.lang.Integer =. V + type1 = new ReferenceType("java.lang.Integer"); + type2 = new PlaceholderType("V"); + constraint.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT)); + constraints.add(constraint); + //C <. java.lang.Float + constraint = new Constraint<>(); + type1 = new PlaceholderType("C"); + type2 = new ReferenceType("java.lang.Float"); + constraint.add(new UnifyPair(type1, type2, PairOperator.SMALLERDOT)); + //U <. java.lang.Float# + type1 = new PlaceholderType("U"); + type2 = new ReferenceType("java.lang.Float"); + constraint.add(new UnifyPair(type1, type2, PairOperator.SMALLERDOT)); + //java.lang.Float =. V + type1 = new ReferenceType("java.lang.Float"); + type2 = new PlaceholderType("V"); + constraint.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT)); + constraints.add(constraint); + oderConstraints.add(constraints); + + //set #8 + constraints = new HashSet<>(); + //W =. java.lang.Integer + constraint = new Constraint<>(); + type1 = new PlaceholderType("W"); + type2 = new ReferenceType("java.lang.Integer"); + constraint.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT)); + constraints.add(constraint); + //W =. java.lang.Float + constraint = new Constraint<>(); + type1 = new PlaceholderType("W"); + type2 = new ReferenceType("java.lang.Float"); + constraint.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT)); + constraints.add(constraint); + oderConstraints.add(constraints); + + //set #9 + constraints = new HashSet<>(); + //W <. java.lang.Integer + constraint = new Constraint<>(); + type1 = new PlaceholderType("W"); + type2 = new ReferenceType("java.lang.Integer"); + constraint.add(new UnifyPair(type1, type2, PairOperator.SMALLERDOT)); + //E <. java.lang.Integer + type1 = new PlaceholderType("E"); + type2 = new ReferenceType("java.lang.Integer"); + constraint.add(new UnifyPair(type1, type2, PairOperator.SMALLERDOT)); + //java.lang.Integer =. X + type1 = new ReferenceType("java.lang.Integer"); + type2 = new PlaceholderType("X"); + constraint.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT)); + constraints.add(constraint); + //W <. java.lang.Float + constraint = new Constraint<>(); + type1 = new PlaceholderType("W"); + type2 = new ReferenceType("java.lang.Float"); + constraint.add(new UnifyPair(type1, type2, PairOperator.SMALLERDOT)); + //E <. java.lang.Float + type1 = new PlaceholderType("E"); + type2 = new ReferenceType("java.lang.Float"); + constraint.add(new UnifyPair(type1, type2, PairOperator.SMALLERDOT)); + //java.lang.Float =. X + type1 = new ReferenceType("java.lang.Float"); + type2 = new PlaceholderType("X"); + constraint.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT)); + constraints.add(constraint); + oderConstraints.add(constraints); + + //FiniteClosure + Set fcConstraints = new HashSet<>(); + //java.lang.Number < java.lang.Object + type1 = new ReferenceType("java.lang.Number"); + type2 = new ReferenceType("java.lang.Object"); + fcConstraints.add(new UnifyPair(type1, type2, PairOperator.SMALLER)); + //java.lang.Number < java.io.Serializable + type1 = new ReferenceType("java.lang.Number"); + type2 = new ReferenceType("java.io.Serializable"); + fcConstraints.add(new UnifyPair(type1, type2, PairOperator.SMALLER)); + //java.lang.Integer < java.lang.Number + type1 = new ReferenceType("java.lang.Integer"); + type2 = new ReferenceType("java.lang.Number"); + fcConstraints.add(new UnifyPair(type1, type2, PairOperator.SMALLER)); + //java.lang.Float < java.lang.Number + type1 = new ReferenceType("java.lang.Float"); + type2 = new ReferenceType("java.lang.Number"); + fcConstraints.add(new UnifyPair(type1, type2, PairOperator.SMALLER)); + //java.lang.Float < java.lang.Object + type1 = new ReferenceType("java.lang.Float"); + type2 = new ReferenceType("java.lang.Object"); + fcConstraints.add(new UnifyPair(type1, type2, PairOperator.SMALLER)); + //java.lang.Float < java.lang.constant.Constable + type1 = new ReferenceType("java.lang.Float"); + type2 = new ReferenceType("java.lang.constant.Constable"); + fcConstraints.add(new UnifyPair(type1, type2, PairOperator.SMALLER)); + //java.lang.Float < java.io.Serializable + type1 = new ReferenceType("java.lang.Float"); + type2 = new ReferenceType("java.io.Serializable"); + fcConstraints.add(new UnifyPair(type1, type2, PairOperator.SMALLER)); + //java.lang.Float < java.lang.Comparable + type1 = new ReferenceType("java.lang.Float"); + type2 = new ReferenceType("java.lang.Comparable", new TypeParams(new ReferenceType("java.lang.Float"))); + fcConstraints.add(new UnifyPair(type1, type2, PairOperator.SMALLER)); + //java.lang.Float < java.lang.constant.ConstantDesc + type1 = new ReferenceType("java.lang.Float"); + type2 = new ReferenceType("java.lang.constant.ConstantDesc"); + fcConstraints.add(new UnifyPair(type1, type2, PairOperator.SMALLER)); + //java.lang.Integer < java.lang.Object + type1 = new ReferenceType("java.lang.Integer"); + type2 = new ReferenceType("java.lang.Object"); + fcConstraints.add(new UnifyPair(type1, type2, PairOperator.SMALLER)); + //java.lang.Integer < java.lang.constant.Constable + type1 = new ReferenceType("java.lang.Integer"); + type2 = new ReferenceType("java.lang.constant.Constable"); + fcConstraints.add(new UnifyPair(type1, type2, PairOperator.SMALLER)); + //java.lang.Integer < java.io.Serializable + type1 = new ReferenceType("java.lang.Integer"); + type2 = new ReferenceType("java.io.Serializable"); + fcConstraints.add(new UnifyPair(type1, type2, PairOperator.SMALLER)); + //java.lang.Integer < java.lang.Comparable + type1 = new ReferenceType("java.lang.Integer"); + type2 = new ReferenceType("java.lang.Comparable", new TypeParams(new ReferenceType("java.lang.Integer"))); + fcConstraints.add(new UnifyPair(type1, type2, PairOperator.SMALLER)); + //java.lang.Integer < java.lang.constant.ConstantDesc + type1 = new ReferenceType("java.lang.Integer"); + type2 = new ReferenceType("java.lang.constant.ConstantDesc"); + fcConstraints.add(new UnifyPair(type1, type2, PairOperator.SMALLER)); + //java.lang.Comparable < java.lang.Object + type1 = new ReferenceType("java.lang.Comparable", new TypeParams(new ReferenceType("java.lang.Float"))); + type2 = new ReferenceType("java.lang.Object"); + fcConstraints.add(new UnifyPair(type1, type2, PairOperator.SMALLER)); + //Vector < java.lang.Object + type1 = new ReferenceType("Vector", new TypeParams(new ReferenceType("java.lang.Integer"))); + type2 = new ReferenceType("java.lang.Object"); + fcConstraints.add(new UnifyPair(type1, type2, PairOperator.SMALLER)); + //Vector < AbstractList + type1 = new ReferenceType("Vector", new TypeParams(new ReferenceType("java.lang.Integer"))); + type2 = new ReferenceType("AbstractList", new TypeParams(new ReferenceType("java.lang.Integer"))); + fcConstraints.add(new UnifyPair(type1, type2, PairOperator.SMALLER)); + //Scalar < Vector + type1 = new ReferenceType("Scalar"); + type2 = new ReferenceType("Vector", new TypeParams(new ReferenceType("java.lang.Integer"))); + fcConstraints.add(new UnifyPair(type1, type2, PairOperator.SMALLER)); + //java.lang.constant.ConstantDesc < java.lang.Object + type1 = new ReferenceType("java.lang.constant.ConstantDesc"); + type2 = new ReferenceType("java.lang.Object"); + fcConstraints.add(new UnifyPair(type1, type2, PairOperator.SMALLER)); + //Scalar < java.lang.Object + type1 = new ReferenceType("Scalar"); + type2 = new ReferenceType("java.lang.Object"); + fcConstraints.add(new UnifyPair(type1, type2, PairOperator.SMALLER)); + //Scalar < AbstractList + type1 = new ReferenceType("Scalar"); + type2 = new ReferenceType("AbstractList", new TypeParams(new ReferenceType("java.lang.Integer"))); + fcConstraints.add(new UnifyPair(type1, type2, PairOperator.SMALLER)); + //Vector < AbstractList + type1 = new ReferenceType("Vector", new TypeParams(new PlaceholderType("EXP"))); + type2 = new ReferenceType("AbstractList", new TypeParams(new PlaceholderType("EXP"))); + fcConstraints.add(new UnifyPair(type1, type2, PairOperator.SMALLER)); + //Vector < java.lang.Object + type1 = new ReferenceType("Vector", new TypeParams(new PlaceholderType("EXP"))); + type2 = new ReferenceType("java.lang.Object"); + fcConstraints.add(new UnifyPair(type1, type2, PairOperator.SMALLER)); + //java.lang.constant.Constable < java.lang.Object + type1 = new ReferenceType("java.lang.constant.Constable"); + type2 = new ReferenceType("java.lang.Object"); + fcConstraints.add(new UnifyPair(type1, type2, PairOperator.SMALLER)); + //java.io.Serializable < java.lang.Object + type1 = new ReferenceType("java.io.Serializable"); + type2 = new ReferenceType("java.lang.Object"); + fcConstraints.add(new UnifyPair(type1, type2, PairOperator.SMALLER)); + //AbstractList < java.lang.Object + type1 = new ReferenceType("AbstractList", new TypeParams(new ReferenceType("java.lang.Integer"))); + type2 = new ReferenceType("java.lang.Object"); + fcConstraints.add(new UnifyPair(type1, type2, PairOperator.SMALLER)); + //java.lang.Comparable < java.lang.Object + type1 = new ReferenceType("java.lang.Comparable", new TypeParams(new ReferenceType("java.lang.Integer"))); + type2 = new ReferenceType("java.lang.Object"); + fcConstraints.add(new UnifyPair(type1, type2, PairOperator.SMALLER)); + + FiniteClosure finiteClosure = new FiniteClosure(fcConstraints, new NullWriter()); + TypeUnify unifyAlgo = new TypeUnify(); + ConstraintSet< Pair> cons = new ConstraintSet<>(); + UnifyResultModelParallel urm = new UnifyResultModelParallel(cons, finiteClosure); + UnifyTaskModelParallel tasks = new UnifyTaskModelParallel(); + Set> solution = unifyAlgo.unify(undConstraints, oderConstraints, finiteClosure, new NullWriter(), false, urm, tasks); + System.out.println(solution.size()); + } + @Test public void matrixk2(){ UnifyType type1;