1
0

added matrixk2 test

This commit is contained in:
NoName11234 2024-05-17 14:44:45 +02:00
parent 48293b3243
commit d8f744a774

View File

@ -673,7 +673,870 @@ public class UnifyTest {
UnifyResultModelParallel urm = new UnifyResultModelParallel(cons, finiteClosure);
UnifyTaskModelParallel tasks = new UnifyTaskModelParallel();
Set<Set<UnifyPair>> solution = unifyAlgo.unify(undConstraints, oderConstraints, finiteClosure, new NullWriter(), false, urm, tasks);
System.out.println(solution);
System.out.println(solution.size());
}
@Test
public void matrixk2(){
UnifyType type1;
UnifyType type2;
//und-constraints
Set<UnifyPair> undConstraints = new HashSet<>();
//T =. BC
type1 = new PlaceholderType("T");
type2 = new PlaceholderType("BC");
undConstraints.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT));
//java.lang.Boolean =. G
type1 = new ReferenceType("java.lang.Boolean");
type2 = new PlaceholderType("G");
undConstraints.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT));
//G =. java.lang.Boolean
type1 = new PlaceholderType("G");
type2 = new ReferenceType("java.lang.Boolean");
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));
//E =. BJ
type1 = new PlaceholderType("E");
type2 = new PlaceholderType("BJ");
undConstraints.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT));
//Vector<java.lang.Integer> <. R
type1 = new ReferenceType("Vector", new TypeParams(new ReferenceType("java.lang.Integer")));
type2 = new PlaceholderType("R");
undConstraints.add(new UnifyPair(type1, type2, PairOperator.SMALLERDOT));
//P <. L
type1 = new PlaceholderType("P");
type2 = new PlaceholderType("L");
undConstraints.add(new UnifyPair(type1, type2, PairOperator.SMALLERDOT));
//E <!=. java.lang.Number
type1 = new PlaceholderType("E");
type2 = new ReferenceType("java.lang.Number");
undConstraints.add(new UnifyPair(type1, type2, PairOperator.SMALLERNEQDOT));
//C =. A
type1 = new PlaceholderType("C");
type2 = new PlaceholderType("A");
undConstraints.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT));
//M =. Matrix
type1 = new PlaceholderType("M");
type2 = new ReferenceType("Matrix");
undConstraints.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT));
//AC <. AB
type1 = new PlaceholderType("AC");
type2 = new PlaceholderType("AB");
undConstraints.add(new UnifyPair(type1, type2, PairOperator.SMALLERDOT));
//Matrix <. C
type1 = new ReferenceType("Matrix");
type2 = new PlaceholderType("C");
undConstraints.add(new UnifyPair(type1, type2, PairOperator.SMALLERDOT));
//AB =. AV
type1 = new PlaceholderType("AB");
type2 = new PlaceholderType("AV");
undConstraints.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT));
//X <!=. java.lang.Number
type1 = new PlaceholderType("X");
type2 = new ReferenceType("java.lang.Number");
undConstraints.add(new UnifyPair(type1, type2, PairOperator.SMALLERNEQDOT));
//java.lang.Boolean =. AD
type1 = new ReferenceType("java.lang.Boolean");
type2 = new PlaceholderType("AD");
undConstraints.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT));
//AU <. Z
type1 = new PlaceholderType("AU");
type2 = new PlaceholderType("Z");
undConstraints.add(new UnifyPair(type1, type2, PairOperator.SMALLERDOT));
//AD =. java.lang.Boolean
type1 = new PlaceholderType("AD");
type2 = new ReferenceType("java.lang.Boolean");
undConstraints.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT));
//H =. Matrix
type1 = new PlaceholderType("H");
type2 = new ReferenceType("Matrix");
undConstraints.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT));
//AA <. Z
type1 = new PlaceholderType("AA");
type2 = new PlaceholderType("Z");
undConstraints.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT));
//AB <!=. java.lang.Number
type1 = new PlaceholderType("AB");
type2 = new ReferenceType("java.lang.Number");
undConstraints.add(new UnifyPair(type1, type2, PairOperator.SMALLERNEQDOT));
//V =. java.lang.Boolean
type1 = new PlaceholderType("V");
type2 = new ReferenceType("java.lang.Boolean");
undConstraints.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT));
//java.lang.Boolean =. V
type1 = new ReferenceType("java.lang.Boolean");
type2 = new PlaceholderType("V");
undConstraints.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT));
//J <!=. java.lang.Number
type1 = new PlaceholderType("J");
type2 = new ReferenceType("java.lang.Number");
undConstraints.add(new UnifyPair(type1, type2, PairOperator.SMALLERNEQDOT));
//oder-constraints
List<Set<Constraint<UnifyPair>>> oderConstraints = new ArrayList<>();
Set<Constraint<UnifyPair>> constraints = new HashSet<>();
Constraint<UnifyPair> constraint = new Constraint<>();
//set #1
constraints = new HashSet<>();
//Matrix <. Matrix
constraint = new Constraint<>();
type1 = new ReferenceType("Matrix");
type2 = new ReferenceType("Matrix");
constraint.add(new UnifyPair(type1, type2, PairOperator.SMALLERDOT));
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");
constraint.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT));
constraints.add(constraint);
//F =. java.lang.Integer
constraint = new Constraint<>();
type1 = new PlaceholderType("F");
type2 = new ReferenceType("java.lang.Integer");
constraint.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT));
constraints.add(constraint);
oderConstraints.add(constraints);
//set #3
constraints = new HashSet<>();
//H =. ? extends Matrix
constraint = new Constraint<>();
type1 = new PlaceholderType("H");
type2 = new ExtendsType(new ReferenceType("Matrix"));
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);
//H =. Vector<ALB>
constraint = new Constraint<>();
type1 = new PlaceholderType("H");
type2 = new ReferenceType("Vector", new TypeParams(new PlaceholderType("ALB")));
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);
//H =. Matrix
constraint = new Constraint<>();
type1 = new PlaceholderType("H");
type2 = new ReferenceType("Matrix");
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);
//H =. ? extends Vector<ALB>
constraint = new Constraint<>();
type1 = new PlaceholderType("H");
type2 = new ExtendsType(new ReferenceType("Vector", new TypeParams(new PlaceholderType("ALB"))));
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);
oderConstraints.add(constraints);
//set #4
constraints = new HashSet<>();
//ALC =. P
constraint = new Constraint<>();
type1 = new PlaceholderType("ALC");
type2 = new PlaceholderType("P");
constraint.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT));
//M =. Vector<ALC>
type1 = new PlaceholderType("M");
type2 = new ReferenceType("Vector", new TypeParams(new PlaceholderType("ALC")));
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));
constraints.add(constraint);
//Vector<java.lang.Integer> =. P
constraint = new Constraint<>();
type1 = new ReferenceType("Vector", new TypeParams(new ReferenceType("java.lang.Integer")));
type2 = new PlaceholderType("P");
constraint.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT));
//M =. ? extends Matrix
type1 = new PlaceholderType("M");
type2 = new ExtendsType(new ReferenceType("Matrix"));
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));
constraints.add(constraint);
//Vector<java.lang.Integer> =. P
constraint = new Constraint<>();
type1 = new ReferenceType("Vector", new TypeParams(new ReferenceType("java.lang.Integer")));
type2 = new PlaceholderType("P");
constraint.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT));
//M =. Matrix
type1 = new PlaceholderType("M");
type2 = new ReferenceType("Matrix");
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));
constraints.add(constraint);
//ALC =. P
constraint = new Constraint<>();
type1 = new PlaceholderType("ALC");
type2 = new PlaceholderType("P");
constraint.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT));
//M =. ? extends Vector<ALC>
type1 = new PlaceholderType("M");
type2 = new ExtendsType(new ReferenceType("Vector", new TypeParams(new PlaceholderType("ALC"))));
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));
constraints.add(constraint);
oderConstraints.add(constraints);
//set #5
constraints = new HashSet<>();
//Vector<ALD> <. Vector<java.lang.Integer>
constraint = new Constraint<>();
type1 = new ReferenceType("Vector", new TypeParams(new PlaceholderType("ALD")));
type2 = new ReferenceType("Vector", new TypeParams(new ReferenceType("java.lang.Integer")));
constraints.add(constraint);
oderConstraints.add(constraints);
//set #6
constraints = new HashSet<>();
//U =. java.lang.Float
constraint = new Constraint<>();
type1 = new PlaceholderType("U");
type2 = new ReferenceType("java.lang.Float");
constraint.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT));
constraints.add(constraint);
//U =. java.lang.Integer
constraint = new Constraint<>();
type1 = new PlaceholderType("U");
type2 = new ReferenceType("java.lang.Integer");
constraint.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT));
constraints.add(constraint);
oderConstraints.add(constraints);
//set #7
constraints = new HashSet<>();
//L =. ? extends Matrix
constraint = new Constraint<>();
type1 = new PlaceholderType("L");
type2 = new ExtendsType(new ReferenceType("Matrix"));
constraint.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT));
//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);
//L =. ? extends Vector<AMH>
constraint = new Constraint<>();
type1 = new PlaceholderType("L");
type2 = new ExtendsType(new ReferenceType("Vector", new TypeParams(new PlaceholderType("AMH"))));
constraint.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT));
//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);
//L =. Matrix
constraint = new Constraint<>();
type1 = new PlaceholderType("L");
type2 = new ReferenceType("Matrix");
constraint.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT));
//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);
//L =. Vector<AMH>
constraint = new Constraint<>();
type1 = new PlaceholderType("L");
type2 = new ReferenceType("Vector", new TypeParams(new PlaceholderType("AMH")));
constraint.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT));
//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);
oderConstraints.add(constraints);
//set #8
constraints = new HashSet<>();
//AA =. java.lang.Float
constraint = new Constraint<>();
type1 = new PlaceholderType("AA");
type2 = new ReferenceType("java.lang.Float");
constraint.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT));
constraints.add(constraint);
//AA =. java.lang.Integer
constraint = new Constraint<>();
type1 = new PlaceholderType("AA");
type2 = new ReferenceType("java.lang.Integer");
constraint.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT));
constraints.add(constraint);
oderConstraints.add(constraints);
//set #9
constraints = new HashSet<>();
//AC =. java.lang.Integer
constraint = new Constraint<>();
type1 = new PlaceholderType("AC");
type2 = new ReferenceType("java.lang.Float");
constraint.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT));
constraints.add(constraint);
//AC =. java.lang.Float
constraint = new Constraint<>();
type1 = new PlaceholderType("AC");
type2 = new ReferenceType("java.lang.Integer");
constraint.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT));
constraints.add(constraint);
oderConstraints.add(constraints);
//set #10
constraints = new HashSet<>();
//L =. ? extends Matrix
constraint = new Constraint<>();
type1 = new PlaceholderType("L");
type2 = new ExtendsType(new ReferenceType("Matrix"));
constraint.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT));
//java.lang.Integer =. AF
type1 = new ReferenceType("java.lang.Integer");
type2 = new PlaceholderType("AF");
constraint.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT));
constraints.add(constraint);
//L =. ? extends Vector<ANL>
constraint = new Constraint<>();
type1 = new PlaceholderType("L");
type2 = new ExtendsType(new ReferenceType("Vector", new TypeParams(new PlaceholderType("ANL"))));
constraint.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT));
//java.lang.Integer =. AF
type1 = new ReferenceType("java.lang.Integer");
type2 = new PlaceholderType("AF");
constraint.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT));
constraints.add(constraint);
//L =. Matrix
constraint = new Constraint<>();
type1 = new PlaceholderType("L");
type2 = new ReferenceType("Matrix");
constraint.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT));
//java.lang.Integer =. AF
type1 = new ReferenceType("java.lang.Integer");
type2 = new PlaceholderType("AF");
constraint.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT));
constraints.add(constraint);
//L =. Vector<ANL>
constraint = new Constraint<>();
type1 = new PlaceholderType("L");
type2 = new ReferenceType("Vector", new TypeParams(new PlaceholderType("ANL")));
constraint.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT));
//java.lang.Integer =. AF
type1 = new ReferenceType("java.lang.Integer");
type2 = new PlaceholderType("AF");
constraint.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT));
constraints.add(constraint);
oderConstraints.add(constraints);
//set #11
constraints = new HashSet<>();
//Vector<java.lang.Integer> =. AJ
constraint = new Constraint<>();
type1 = new ReferenceType("Vector", new TypeParams(new ReferenceType("java.lang.Integer")));
type2 = new PlaceholderType("AJ");
constraint.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT));
//L =. Matrix
type1 = new PlaceholderType("L");
type2 = new ReferenceType("Matrix");
constraint.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT));
//AB <. java.lang.Integer
type1 = new PlaceholderType("AB");
type2 = new ReferenceType("java.lang.Integer");
constraint.add(new UnifyPair(type1, type2, PairOperator.SMALLERDOT));
constraints.add(constraint);
//ANM =. AJ
constraint = new Constraint<>();
type1 = new PlaceholderType("ANM");
type2 = new PlaceholderType("AJ");
constraint.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT));
//L =. ? extends Vector<ANM>
type1 = new PlaceholderType("L");
type2 = new ExtendsType(new ReferenceType("Vector", new TypeParams(new PlaceholderType("ANM"))));
constraint.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT));
//AB <. java.lang.Integer
type1 = new PlaceholderType("AB");
type2 = new ReferenceType("java.lang.Integer");
constraint.add(new UnifyPair(type1, type2, PairOperator.SMALLERDOT));
constraints.add(constraint);
//Vector<java.lang.Integer> =. AJ
constraint = new Constraint<>();
type1 = new ReferenceType("Vector", new TypeParams(new ReferenceType("java.lang.Integer")));
type2 = new PlaceholderType("AJ");
constraint.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT));
//L =. ? extends Matrix
type1 = new PlaceholderType("L");
type2 = new ExtendsType(new ReferenceType("Matrix"));
constraint.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT));
//AB <. java.lang.Integer
type1 = new PlaceholderType("AB");
type2 = new ReferenceType("java.lang.Integer");
constraint.add(new UnifyPair(type1, type2, PairOperator.SMALLERDOT));
constraints.add(constraint);
//ANM =. AJ
constraint = new Constraint<>();
type1 = new PlaceholderType("ANM");
type2 = new PlaceholderType("AJ");
constraint.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT));
//L =. Vector<ANM>
type1 = new PlaceholderType("L");
type2 = new ReferenceType("Vector", new TypeParams(new PlaceholderType("ANM")));
constraint.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT));
//AB <. java.lang.Integer
type1 = new PlaceholderType("AB");
type2 = new ReferenceType("java.lang.Integer");
constraint.add(new UnifyPair(type1, type2, PairOperator.SMALLERDOT));
constraints.add(constraint);
oderConstraints.add(constraints);
//set #12
constraints = new HashSet<>();
//AB <. java.lang.Integer
constraint = new Constraint<>();
type1 = new PlaceholderType("AB");
type2 = new ReferenceType("java.lang.Integer");
constraint.add(new UnifyPair(type1, type2, PairOperator.SMALLERDOT));
//Vector<java.lang.Integer> =. AN
type1 = new ReferenceType("Vector", new TypeParams(new ReferenceType("java.lang.Integer")));
type2 = new PlaceholderType("AN");
constraint.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT));
//B =. Matrix
type1 = new PlaceholderType("B");
type2 = new ReferenceType("Matrix");
constraint.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT));
constraints.add(constraint);
//ANN =. AN
constraint = new Constraint<>();
type1 = new PlaceholderType("ANN");
type2 = new PlaceholderType("AN");
constraint.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT));
//AB <. java.lang.Integer
type1 = new PlaceholderType("AB");
type2 = new ReferenceType("java.lang.Integer");
constraint.add(new UnifyPair(type1, type2, PairOperator.SMALLERDOT));
//B =. ? extends Vector<ANN>
type1 = new PlaceholderType("B");
type2 = new ExtendsType(new ReferenceType("Vector", new TypeParams(new PlaceholderType("ANN"))));
constraint.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT));
constraints.add(constraint);
//B =. Vector<ANN>
constraint = new Constraint<>();
type1 = new PlaceholderType("B");
type2 = new ReferenceType("Vector", new TypeParams(new PlaceholderType("ANN")));
constraint.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT));
//ANN =. AN
type1 = new PlaceholderType("ANN");
type2 = new PlaceholderType("AN");
constraint.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT));
//AB <. java.lang.Integer
type1 = new PlaceholderType("AB");
type2 = new ReferenceType("java.lang.Integer");
constraint.add(new UnifyPair(type1, type2, PairOperator.SMALLERDOT));
constraints.add(constraint);
//B =. ? extends Matrix
constraint = new Constraint<>();
type1 = new PlaceholderType("B");
type2 = new ExtendsType(new ReferenceType("Matrix"));
constraint.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT));
//AB <. java.lang.Integer
type1 = new PlaceholderType("AB");
type2 = new ReferenceType("java.lang.Integer");
constraint.add(new UnifyPair(type1, type2, PairOperator.SMALLERDOT));
//Vector<java.lang.Integer> =. AN
type1 = new ReferenceType("Vector", new TypeParams(new ReferenceType("java.lang.Integer")));
type2 = new PlaceholderType("AN");
constraint.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT));
constraints.add(constraint);
oderConstraints.add(constraints);
//set #13
constraints = new HashSet<>();
//Vector<java.lang.Integer> =. AR
constraint = new Constraint<>();
type1 = new ReferenceType("Vector", new TypeParams(new ReferenceType("java.lang.Integer")));
type2 = new PlaceholderType("AR");
constraint.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT));
//AN =. ? extends Matrix
type1 = new PlaceholderType("AN");
type2 = new ExtendsType(new ReferenceType("Matrix"));
constraint.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT));
//T <. java.lang.Integer
type1 = new PlaceholderType("T");
type2 = new ReferenceType("java.lang.Integer");
constraint.add(new UnifyPair(type1, type2, PairOperator.SMALLERDOT));
constraints.add(constraint);
//AN =. ? extends Vector<ANO>
constraint = new Constraint<>();
type1 = new PlaceholderType("AN");
type2 = new ExtendsType(new ReferenceType("Vector", new TypeParams(new PlaceholderType("ANO"))));
constraint.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT));
//ANO =. AR
type1 = new PlaceholderType("ANO");
type2 = new PlaceholderType("AR");
constraint.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT));
//T <. java.lang.Integer
type1 = new PlaceholderType("T");
type2 = new ReferenceType("java.lang.Integer");
constraint.add(new UnifyPair(type1, type2, PairOperator.SMALLERDOT));
constraints.add(constraint);
//AN =. Vector<ANO>
constraint = new Constraint<>();
type1 = new PlaceholderType("AN");
type2 = new ReferenceType("Vector", new TypeParams(new PlaceholderType("ANO")));
constraint.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT));
//ANO =. AR
type1 = new PlaceholderType("ANO");
type2 = new PlaceholderType("AR");
constraint.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT));
//T <. java.lang.Integer
type1 = new PlaceholderType("T");
type2 = new ReferenceType("java.lang.Integer");
constraint.add(new UnifyPair(type1, type2, PairOperator.SMALLERDOT));
constraints.add(constraint);
//AN =. Matrix
constraint = new Constraint<>();
type1 = new PlaceholderType("AN");
type2 = new ReferenceType("Matrix");
constraint.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT));
//Vector<java.lang.Integer> =. AR
type1 = new ReferenceType("Vector", new TypeParams(new ReferenceType("java.lang.Integer")));
type2 = new PlaceholderType("AR");
constraint.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT));
//T <. java.lang.Integer
type1 = new PlaceholderType("T");
type2 = new ReferenceType("java.lang.Integer");
constraint.add(new UnifyPair(type1, type2, PairOperator.SMALLERDOT));
constraints.add(constraint);
oderConstraints.add(constraints);
//set #14
constraints = new HashSet<>();
//java.lang.Integer =. AT
constraint = new Constraint<>();
type1 = new ReferenceType("java.lang.Integer");
type2 = new PlaceholderType("AT");
constraint.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT));
//AJ <. java.lang.Integer
type1 = new PlaceholderType("AJ");
type2 = new ReferenceType("java.lang.Integer");
constraint.add(new UnifyPair(type1, type2, PairOperator.SMALLERDOT));
//AR <. java.lang.Integer
type1 = new PlaceholderType("AR");
type2 = new ReferenceType("java.lang.Integer");
constraint.add(new UnifyPair(type1, type2, PairOperator.SMALLERDOT));
constraints.add(constraint);
//java.lang.Float =. AT
constraint = new Constraint<>();
type1 = new ReferenceType("java.lang.Float");
type2 = new PlaceholderType("AT");
constraint.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT));
//AR <. java.lang.Float
type1 = new PlaceholderType("AR");
type2 = new ReferenceType("java.lang.Float");
constraint.add(new UnifyPair(type1, type2, PairOperator.SMALLERDOT));
//AJ <. java.lang.Float
type1 = new PlaceholderType("AJ");
type2 = new ReferenceType("java.lang.Float");
constraint.add(new UnifyPair(type1, type2, PairOperator.SMALLERDOT));
constraints.add(constraint);
oderConstraints.add(constraints);
//set #15
constraints = new HashSet<>();
//java.lang.Float =. AU
constraint = new Constraint<>();
type1 = new ReferenceType("java.lang.Float");
type2 = new PlaceholderType("AU");
constraint.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT));
//AT <. java.lang.Float
type1 = new PlaceholderType("AT");
type2 = new ReferenceType("java.lang.Float");
constraint.add(new UnifyPair(type1, type2, PairOperator.SMALLERDOT));
//Z <. java.lang.Float
type1 = new PlaceholderType("Z");
type2 = new ReferenceType("java.lang.Float");
constraint.add(new UnifyPair(type1, type2, PairOperator.SMALLERDOT));
constraints.add(constraint);
//java.lang.Integer =. AU
constraint = new Constraint<>();
type1 = new ReferenceType("java.lang.Integer");
type2 = new PlaceholderType("AU");
constraint.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT));
//Z <. java.lang.Integer
type1 = new PlaceholderType("Z");
type2 = new ReferenceType("java.lang.Integer");
constraint.add(new UnifyPair(type1, type2, PairOperator.SMALLERDOT));
//AT <. java.lang.Integer
type1 = new PlaceholderType("AT");
type2 = new ReferenceType("java.lang.Integer");
constraint.add(new UnifyPair(type1, type2, PairOperator.SMALLERDOT));
constraints.add(constraint);
oderConstraints.add(constraints);
//set #16
constraints = new HashSet<>();
//Z <. ANP
constraint = new Constraint<>();
type1 = new PlaceholderType("Z");
type2 = new PlaceholderType("ANP");
constraint.add(new UnifyPair(type1, type2, PairOperator.SMALLERDOT));
//R =. ? extends Vector<ANP>
type1 = new PlaceholderType("R");
type2 = new ExtendsType(new ReferenceType("Vector", new TypeParams(new PlaceholderType("ANP"))));
constraint.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT));
//java.lang.Boolean =. BA
type1 = new ReferenceType("java.lang.Boolean");
type2 = new PlaceholderType("BA");
constraint.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT));
constraints.add(constraint);
//R =. ? extends Matrix
constraint = new Constraint<>();
type1 = new PlaceholderType("R");
type2 = new ExtendsType(new ReferenceType("Matrix"));
constraint.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT));
//Z <. Vector<java.lang.Integer>
type1 = new PlaceholderType("Z");
type2 = new ReferenceType("Vector", new TypeParams(new ReferenceType("java.lang.Integer")));
constraint.add(new UnifyPair(type1, type2, PairOperator.SMALLERDOT));
//java.lang.Boolean =. BA
type1 = new ReferenceType("java.lang.Boolean");
type2 = new PlaceholderType("BA");
constraint.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT));
constraints.add(constraint);
//Z <. ANP
constraint = new Constraint<>();
type1 = new PlaceholderType("Z");
type2 = new PlaceholderType("ANP");
constraint.add(new UnifyPair(type1, type2, PairOperator.SMALLERDOT));
//R =. Vector<ANP>
type1 = new PlaceholderType("R");
type2 = new ReferenceType("Vector", new TypeParams(new PlaceholderType("ANP")));
constraint.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT));
//java.lang.Boolean =. BA
type1 = new ReferenceType("java.lang.Boolean");
type2 = new PlaceholderType("BA");
constraint.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT));
constraints.add(constraint);
//Z <. Vector<java.lang.Integer>
constraint = new Constraint<>();
type1 = new PlaceholderType("Z");
type2 = new ReferenceType("Vector", new TypeParams(new ReferenceType("java.lang.Integer")));
constraint.add(new UnifyPair(type1, type2, PairOperator.SMALLERDOT));
//java.lang.Boolean =. BA
type1 = new ReferenceType("java.lang.Boolean");
type2 = new PlaceholderType("BA");
constraint.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT));
//R =. Matrix
type1 = new PlaceholderType("R");
type2 = new ReferenceType("Matrix");
constraint.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT));
constraints.add(constraint);
oderConstraints.add(constraints);
//set #17
constraints = new HashSet<>();
//R <. Vector<java.lang.Integer>
constraint = new Constraint<>();
type1 = new PlaceholderType("R");
type2 = new ReferenceType("Vector", new TypeParams(new ReferenceType("java.lang.Integer")));
constraint.add(new UnifyPair(type1, type2, PairOperator.SMALLERDOT));
//C =. ? extends Matrix
type1 = new PlaceholderType("C");
type2 = new ExtendsType(new ReferenceType("Matrix"));
constraint.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT));
//java.lang.Boolean =. BH
type1 = new ReferenceType("java.lang.Boolean");
type2 = new PlaceholderType("BH");
constraint.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT));
constraints.add(constraint);
//java.lang.Boolean =. BH
constraint = new Constraint<>();
type1 = new ReferenceType("java.lang.Boolean");
type2 = new PlaceholderType("BH");
constraint.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT));
//R <. ANQ
type1 = new PlaceholderType("R");
type2 = new PlaceholderType("ANQ");
constraint.add(new UnifyPair(type1, type2, PairOperator.SMALLERDOT));
//C =. Vector<ANQ>
type1 = new PlaceholderType("C");
type2 = new ReferenceType("Vector", new TypeParams(new PlaceholderType("ANQ")));
constraint.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT));
constraints.add(constraint);
//R <. Vector<java.lang.Integer>
constraint = new Constraint<>();
type1 = new PlaceholderType("R");
type2 = new ReferenceType("Vector", new TypeParams(new ReferenceType("java.lang.Integer")));
constraint.add(new UnifyPair(type1, type2, PairOperator.SMALLERDOT));
//java.lang.Boolean =. BH
type1 = new ReferenceType("java.lang.Boolean");
type2 = new PlaceholderType("BH");
constraint.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT));
//C =. Matrix
type1 = new PlaceholderType("C");
type2 = new ReferenceType("Matrix");
constraint.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT));
constraints.add(constraint);
//java.lang.Boolean =. BH
constraint = new Constraint<>();
type1 = new ReferenceType("java.lang.Boolean");
type2 = new PlaceholderType("BH");
constraint.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT));
//C =. ? extends Vector<ANQ>
type1 = new PlaceholderType("C");
type2 = new ReferenceType("Vector", new TypeParams(new PlaceholderType("ANQ")));
constraint.add(new UnifyPair(type1, type2, PairOperator.EQUALSDOT));
//R <. ANQ
type1 = new PlaceholderType("R");
type2 = new PlaceholderType("ANQ");
constraint.add(new UnifyPair(type1, type2, PairOperator.SMALLERDOT));
constraints.add(constraint);
oderConstraints.add(constraints);
//FiniteClosure
Set<UnifyPair> 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.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.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.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.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.Integer < java.lang.Comparable<java.lang.Integer>
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.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<java.lang.Float>
type1 = new ReferenceType("java.lang.Integer");
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));
//Vector<FAU> < java.lang.Object
type1 = new ReferenceType("Vector", new TypeParams(new PlaceholderType("FAU")));
type2 = new ReferenceType("java.lang.Object");
fcConstraints.add(new UnifyPair(type1, type2, PairOperator.SMALLER));
//Scalar<FCV> < java.lang.Object
type1 = new ReferenceType("Scalar", new TypeParams(new PlaceholderType("FCV")));
type2 = new ReferenceType("java.lang.Object");
fcConstraints.add(new UnifyPair(type1, type2, PairOperator.SMALLER));
//Scalar<FCV> < Vector<java.lang.Integer>
type1 = new ReferenceType("Scalar", new TypeParams(new PlaceholderType("FCV")));
type2 = new ReferenceType("Vector", new TypeParams(new ReferenceType("java.lang.Integer")));
fcConstraints.add(new UnifyPair(type1, type2, PairOperator.SMALLER));
//java.lang.Comparable<java.lang.Float> < 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.Integer> < 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));
//Scalar<FCV> < Vector<java.lang.Integer>
type1 = new ReferenceType("Scalar", new TypeParams(new PlaceholderType("FCV")));
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));
//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));
//Vector<Vector<java.lang.Integer>> < java.lang.Object
type1 = new ReferenceType("Vector", new TypeParams(new ReferenceType("Vector", new TypeParams(new ReferenceType("java.lang.Integer")))));
type2 = new ReferenceType("java.lang.Object");
fcConstraints.add(new UnifyPair(type1, type2, PairOperator.SMALLER));
//Matrix < Vector<Vector<java.lang.Integer>>
type1 = new ReferenceType("Matrix");
type2 = new ReferenceType("Vector", new TypeParams(new ReferenceType("Vector", new TypeParams(new ReferenceType("java.lang.Integer")))));
fcConstraints.add(new UnifyPair(type1, type2, PairOperator.SMALLER));
//Matrix < java.lang.Object
type1 = new ReferenceType("Matrix");
type2 = new ReferenceType("java.lang.Object");
fcConstraints.add(new UnifyPair(type1, type2, PairOperator.SMALLER));
//java.lang.Comparable<java.lang.Integer> < 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<>();
UnifyResultModel urm = new UnifyResultModel(cons, finiteClosure);
UnifyTaskModel tasks = new UnifyTaskModel();
Set<Set<UnifyPair>> solution = unifyAlgo.unify(undConstraints, oderConstraints, finiteClosure, new NullWriter(), false, urm, tasks);
System.out.println(solution.size());
}
}