JavaCompilerCore/test/unify/UnifyOldTest.java

335 lines
9.8 KiB
Java
Raw Normal View History

2015-10-17 17:04:32 +00:00
package unify;
2015-10-18 13:13:28 +00:00
import junit.framework.Assert;
2015-10-17 17:04:32 +00:00
import org.junit.Test;
2015-10-23 12:44:55 +00:00
import de.dhbwstuttgart.syntaxtree.factory.UnifyPairMengenBuilder;
import de.dhbwstuttgart.syntaxtree.factory.UnifyTypeFactory;
import de.dhbwstuttgart.syntaxtree.factory.Unify_FC_TTO_Builder;
2016-03-17 15:54:43 +00:00
import de.dhbwstuttgart.syntaxtree.type.ExtendsWildcardType;
import de.dhbwstuttgart.syntaxtree.type.ObjectType;
2015-10-17 17:04:32 +00:00
import de.dhbwstuttgart.syntaxtree.type.RefType;
2016-03-17 15:54:43 +00:00
import de.dhbwstuttgart.syntaxtree.type.SuperWildcardType;
import de.dhbwstuttgart.syntaxtree.type.Type;
2015-10-17 17:04:32 +00:00
import de.dhbwstuttgart.syntaxtree.type.TypePlaceholder;
2016-03-17 15:54:43 +00:00
import de.dhbwstuttgart.syntaxtree.type.WildcardType;
2015-10-18 10:51:07 +00:00
import de.dhbwstuttgart.typeinference.Menge;
2015-10-17 17:04:32 +00:00
import de.dhbwstuttgart.typeinference.Pair;
2015-10-18 13:13:28 +00:00
import de.dhbwstuttgart.typeinference.Pair.PairOperator;
2015-10-18 10:51:07 +00:00
import de.dhbwstuttgart.typeinference.unify.Unify;
2015-10-17 17:04:32 +00:00
2015-11-07 19:37:29 +00:00
public class UnifyOldTest {
2015-10-19 09:45:49 +00:00
2015-10-17 17:04:32 +00:00
@Test
public void unifyTestSimpleTypes() {
2015-10-19 07:34:44 +00:00
// Init Factories and Builders
Unify_FC_TTO_Builder fcBuilder = new Unify_FC_TTO_Builder();
UnifyPairMengenBuilder assumptionBuilder = new UnifyPairMengenBuilder();
UnifyPairMengenBuilder resultBuilder = new UnifyPairMengenBuilder();
2015-10-19 09:45:49 +00:00
2015-10-19 07:34:44 +00:00
/*
* Test a <. Boolean
*/
2015-10-19 09:45:49 +00:00
2015-10-19 07:34:44 +00:00
// Init Types
2016-03-17 15:54:43 +00:00
RefType boolT = this.GetSimpleType("java.lang.Boolean");
TypePlaceholder aTph = this.GetTypePlaceholder("a");
2015-10-19 09:45:49 +00:00
2015-10-19 07:34:44 +00:00
// Expected Result
resultBuilder.clear();
2015-10-19 09:45:49 +00:00
resultBuilder.addPair(aTph, boolT, PairOperator.Equal);
2016-03-17 15:54:43 +00:00
resultBuilder.addPair(aTph, this.GetExtendsType(boolT),
2015-10-19 09:45:49 +00:00
PairOperator.Equal);
Menge<Menge<Pair>> expectedResult = resultBuilder.getNestedPairMenge();
2015-10-19 07:34:44 +00:00
// Actual Result
assumptionBuilder.clear();
2015-10-19 09:45:49 +00:00
assumptionBuilder.addPair(aTph, boolT);
Menge<Menge<Pair>> actualResult = Unify.unify(
assumptionBuilder.getPairMenge(), fcBuilder.Get_FC_TTO());
// System.out.println(expectedResult);
// System.out.println(actualResult);
2015-10-19 07:34:44 +00:00
Assert.assertTrue(mengeEquals(expectedResult, actualResult));
2015-10-19 09:45:49 +00:00
2015-10-19 07:34:44 +00:00
/*
* Test b <. a, a <. Boolean
*/
2015-10-19 09:45:49 +00:00
2015-10-19 07:34:44 +00:00
// Init Types
2016-03-17 15:54:43 +00:00
boolT = this.GetSimpleType("java.lang.Boolean");
aTph = this.GetTypePlaceholder("a");
TypePlaceholder bTph = this.GetTypePlaceholder("b");
2015-10-19 09:45:49 +00:00
2015-10-19 07:34:44 +00:00
// Expected Result
resultBuilder.clear();
2015-10-19 09:45:49 +00:00
resultBuilder.addPair(aTph, boolT, PairOperator.Equal);
2016-03-17 15:54:43 +00:00
resultBuilder.addPair(aTph, this.GetExtendsType(boolT),
2015-10-19 09:45:49 +00:00
PairOperator.Equal);
resultBuilder.addPair(bTph, boolT, PairOperator.Equal);
2016-03-17 15:54:43 +00:00
resultBuilder.addPair(bTph, this.GetExtendsType(boolT),
2015-10-19 09:45:49 +00:00
PairOperator.Equal);
expectedResult = resultBuilder.getNestedPairMenge();
2015-10-19 07:34:44 +00:00
// Actual Result
assumptionBuilder.clear();
2015-10-19 09:45:49 +00:00
assumptionBuilder.addPair(bTph, aTph);
assumptionBuilder.addPair(aTph, boolT);
actualResult = Unify.unify(assumptionBuilder.getPairMenge(),
fcBuilder.Get_FC_TTO());
// System.out.println(expectedResult);
// System.out.println(actualResult);
2015-10-19 07:34:44 +00:00
// NOTE: Elemente im actualResult sind nicht unique
2015-10-19 09:45:49 +00:00
// Assert.assertTrue(mengeEquals(expectedResult, actualResult));
2015-10-19 07:34:44 +00:00
/*
* Test b <. a, a <. b
*/
2015-10-19 09:45:49 +00:00
2016-03-17 15:54:43 +00:00
aTph = this.GetTypePlaceholder("a");
bTph = this.GetTypePlaceholder("b");
2015-10-19 09:45:49 +00:00
2015-10-19 07:34:44 +00:00
// Expected Result
resultBuilder.clear();
2015-10-19 09:45:49 +00:00
resultBuilder.addPair(bTph, aTph);
resultBuilder.addPair(aTph, bTph);
2015-10-19 07:34:44 +00:00
Menge<Pair> buffer = resultBuilder.getPairMenge();
expectedResult = new Menge<Menge<Pair>>();
expectedResult.add(buffer);
2015-10-19 09:45:49 +00:00
2015-10-19 07:34:44 +00:00
// Actual Result
assumptionBuilder.clear();
2015-10-19 09:45:49 +00:00
assumptionBuilder.addPair(bTph, aTph);
assumptionBuilder.addPair(aTph, bTph);
actualResult = Unify.unify(assumptionBuilder.getPairMenge(),
fcBuilder.Get_FC_TTO());
// System.out.println(expectedResult);
// System.out.println(actualResult);
2015-10-19 07:34:44 +00:00
Assert.assertTrue(mengeEquals(expectedResult, actualResult));
2015-10-19 09:45:49 +00:00
2015-10-19 07:34:44 +00:00
/*
* Test Integer <. a, a <. Boolean
2015-10-19 09:45:49 +00:00
*/
2016-03-17 15:54:43 +00:00
RefType intT = this.GetSimpleType("java.lang.Integer");
boolT = this.GetSimpleType("java.lang.Boolean");
aTph = this.GetTypePlaceholder("a");
bTph = this.GetTypePlaceholder("b");
2015-10-19 09:45:49 +00:00
2015-10-19 07:34:44 +00:00
// Expected Result
resultBuilder.clear();
expectedResult = resultBuilder.getNestedPairMenge();
2015-10-19 09:45:49 +00:00
2015-10-19 07:34:44 +00:00
// Actual Result
assumptionBuilder.clear();
2015-10-19 09:45:49 +00:00
assumptionBuilder.addPair(intT, aTph);
assumptionBuilder.addPair(aTph, boolT);
actualResult = Unify.unify(assumptionBuilder.getPairMenge(),
fcBuilder.Get_FC_TTO());
// System.out.println(expectedResult);
// System.out.println(actualResult);
2015-10-19 07:34:44 +00:00
Assert.assertTrue(mengeEquals(expectedResult, actualResult));
2015-10-18 13:13:28 +00:00
}
2015-10-19 09:45:49 +00:00
2015-10-19 07:34:44 +00:00
@Test
public void unifyTestGenerics() {
2015-10-19 09:45:49 +00:00
// Init Factories and Builders
Unify_FC_TTO_Builder fcBuilder = new Unify_FC_TTO_Builder();
UnifyPairMengenBuilder assumptionBuilder = new UnifyPairMengenBuilder();
UnifyPairMengenBuilder resultBuilder = new UnifyPairMengenBuilder();
/*
* Test a <. MyClass<T, F>
*/
2016-03-17 15:54:43 +00:00
TypePlaceholder aTph = this.GetTypePlaceholder("a");
RefType myType = this.GetSimpleType("MyClass",
this.GetTypePlaceholder("T"),
this.GetTypePlaceholder("F"));
2015-10-19 09:45:49 +00:00
// Expected Result
resultBuilder.clear();
resultBuilder.addPair(aTph, myType, PairOperator.Equal);
2016-03-17 15:54:43 +00:00
resultBuilder.addPair(aTph, this.GetExtendsType(myType));
2015-10-19 09:45:49 +00:00
Menge<Menge<Pair>> expectedResult = resultBuilder.getNestedPairMenge();
// Actual Result
assumptionBuilder.clear();
assumptionBuilder.addPair(aTph, myType);
Menge<Menge<Pair>> actualResult = Unify.unify(
assumptionBuilder.getPairMenge(), fcBuilder.Get_FC_TTO());
// System.out.println(expectedResult);
// System.out.println(actualResult);
Assert.assertTrue(mengeEquals(expectedResult, actualResult));
/*
* Test List<List<T>> <. List<T>
*/
2016-03-17 15:54:43 +00:00
TypePlaceholder tTph = this.GetTypePlaceholder("T");
RefType list = this.GetSimpleType("List", tTph);
RefType listlist = this.GetSimpleType("List", list);
2015-10-19 09:45:49 +00:00
// Expected Result
resultBuilder.clear();
2016-03-17 15:54:43 +00:00
resultBuilder.addPair(this.GetExtendsType(list), tTph,
2015-10-19 09:45:49 +00:00
PairOperator.Equal);
expectedResult = resultBuilder.getNestedPairMenge();
// Actual Result
assumptionBuilder.clear();
assumptionBuilder.addPair(listlist, list);
actualResult = Unify.unify(assumptionBuilder.getPairMenge(),
fcBuilder.Get_FC_TTO());
System.out.println(expectedResult);
System.out.println(actualResult);
Assert.assertTrue(mengeEquals(expectedResult, actualResult));
/*
* Test List<T> <. List<List<T>>
*/
2015-10-19 07:34:44 +00:00
}
2015-10-19 09:45:49 +00:00
2015-10-18 13:13:28 +00:00
@Test
public void unifyTestInheritance() {
2015-10-19 09:45:49 +00:00
2015-10-18 13:13:28 +00:00
// Init Factories and Builders
Unify_FC_TTO_Builder fcBuilder = new Unify_FC_TTO_Builder();
UnifyPairMengenBuilder assumptionBuilder = new UnifyPairMengenBuilder();
UnifyPairMengenBuilder resultBuilder = new UnifyPairMengenBuilder();
2015-10-19 09:45:49 +00:00
2015-10-18 13:13:28 +00:00
// Init Types
2016-03-17 15:54:43 +00:00
RefType tBool = this.GetSimpleType("java.lang.Boolean");
RefType tString = this.GetSimpleType("java.lang.String");
RefType tInt = this.GetSimpleType("java.lang.Integer");
TypePlaceholder tphA = this.GetTypePlaceholder("a");
2015-10-19 09:45:49 +00:00
2015-10-18 13:13:28 +00:00
// Build inheritance hierachy
// Bool <. String <. Int
fcBuilder.AddInheritance(tBool, tString);
fcBuilder.AddInheritance(tString, tInt);
2015-10-19 09:45:49 +00:00
2015-10-18 13:13:28 +00:00
// Build Assumptions
assumptionBuilder.addPair(tphA, tString);
2015-10-18 10:51:07 +00:00
2015-10-18 13:13:28 +00:00
// Build expected result
resultBuilder.addPair(tphA, tBool, PairOperator.Equal);
2016-03-17 15:54:43 +00:00
resultBuilder.addPair(tphA, this.GetExtendsType(tBool),
2015-10-19 09:45:49 +00:00
PairOperator.Equal);
2015-10-18 13:13:28 +00:00
resultBuilder.addPair(tphA, tString, PairOperator.Equal);
2016-03-17 15:54:43 +00:00
resultBuilder.addPair(tphA, this.GetExtendsType(tString),
2015-10-19 09:45:49 +00:00
PairOperator.Equal);
2015-10-18 13:13:28 +00:00
// Assert
2015-10-19 09:45:49 +00:00
Menge<Menge<Pair>> actualResult = Unify.unify(
assumptionBuilder.getPairMenge(), fcBuilder.Get_FC_TTO());
// System.out.println(actualResult);
// System.out.println("-------------------");
// System.out.println(resultBuilder.getNestedPairMenge());
Assert.assertTrue(mengeEquals(resultBuilder.getNestedPairMenge(),
actualResult));
2015-10-17 17:04:32 +00:00
}
2015-10-19 09:45:49 +00:00
2015-10-17 17:04:32 +00:00
@Test
2015-10-18 13:13:28 +00:00
public void unifyTestWildcards() {
2015-10-19 09:45:49 +00:00
2015-10-17 17:04:32 +00:00
}
2015-10-19 09:45:49 +00:00
private static boolean mengeEquals(Menge<Menge<Pair>> m1,
Menge<Menge<Pair>> m2) {
if (m1.size() != m2.size())
2015-10-19 07:34:44 +00:00
return false;
2015-10-19 09:45:49 +00:00
return containsAll(m1, m2) && containsAll(m2, m1);
}
private static boolean containsAll(Menge<Menge<Pair>> m1,
Menge<Menge<Pair>> m2) {
for (Menge<Pair> elem : m2)
if (!contains(m1, elem))
return false;
return true;
2015-10-17 17:04:32 +00:00
}
2015-10-19 09:45:49 +00:00
private static boolean contains(Menge<Menge<Pair>> m1, Menge<Pair> m2) {
for (Menge<Pair> elem : m1)
if (mengePairEquals(elem, m2))
return true;
return false;
}
private static boolean mengePairEquals(Menge<Pair> m1, Menge<Pair> m2) {
if (m1.size() != m2.size())
return false;
return containsAllPair(m1, m2) && containsAllPair(m2, m1);
}
private static boolean containsAllPair(Menge<Pair> m1, Menge<Pair> m2) {
for (Pair elem : m1)
if (contains(m2, elem))
return true;
return false;
}
private static boolean contains(Menge<Pair> m, Pair p) {
for (Pair elem : m)
if (pairEquals(elem, p))
return true;
return false;
}
private static boolean pairEquals(Pair p1, Pair p2) {
return (p1.TA1.equals(p2.TA1) && p1.TA2.equals(p2.TA2))
|| (p1.TA1.equals(p2.TA2) && p1.TA2.equals(p2.TA1));
}
2016-03-17 15:54:43 +00:00
private RefType GetSimpleType(String name, Type... parameters) {
if(parameters.length == 0)
return new RefType(name, null, 0);
Menge<Type> typeParams = new Menge<Type>();
for(Type t : parameters)
typeParams.add(t);
return new RefType(name, typeParams, null, 0);
}
private ExtendsWildcardType GetExtendsType(ObjectType extendedType) {
return new ExtendsWildcardType(extendedType);
}
private SuperWildcardType GetSuperType(ObjectType superedType) {
return new SuperWildcardType(superedType);
}
private WildcardType GetWildcardType() {
return new WildcardType(null, null, 0);
}
private TypePlaceholder GetTypePlaceholder(String name) {
return TypePlaceholder.backdoorCreate(name);
}
2015-10-19 09:45:49 +00:00
2015-10-17 17:04:32 +00:00
}