package unify; import java.util.Arrays; import java.util.HashSet; import java.util.Set; import java.util.stream.Collectors; import org.junit.Assert; import org.junit.Test; import de.dhbwstuttgart.typeinference.unify.interfaces.IFiniteClosure; import de.dhbwstuttgart.typeinference.unify.model.UnifyType; public class FiniteClosureTest { @Test public void testSmaller() { TypeFactory tf = new TypeFactory(); UnifyType integer = tf.getSimpleType("Integer"); UnifyType number = tf.getSimpleType("Number"); FiniteClosureBuilder fcb = new FiniteClosureBuilder(); fcb.add(integer, number); fcb.add(tf.getSimpleType("MyMap", "T"), tf.getSimpleType("HashMap", tf.getSimpleType("Integer"))); fcb.add(tf.getSimpleType("HashMap", "T"), tf.getSimpleType("Collection")); IFiniteClosure fc = fcb.getCollectionExample(); /* * Test Case 1: * * smaller(Set) = { HashSet, Set, LinkedHashSet } */ UnifyType setInt = tf.getSimpleType("Set", integer); UnifyType hashSetInt = tf.getSimpleType("HashSet", integer); UnifyType treeSetInt = tf.getSimpleType("TreeSet", integer); UnifyType linkedHashSetInt = tf.getSimpleType("LinkedHashSet", integer); Set expectedResult = new HashSet<>(Arrays.stream(new UnifyType[] { setInt, hashSetInt, linkedHashSetInt, treeSetInt, }).collect(Collectors.toSet())); Assert.assertEquals(expectedResult, fc.smaller(setInt)); /* * Test Case 2: * * smaller(Set) = * { HashSet, Set, TreeSet, LinkedHashSet, * HashSet, Set, TreeSet, LinkedHashSet } */ UnifyType extInt = tf.getExtendsType(integer); UnifyType hashSetExtInt = tf.getSimpleType("HashSet", extInt); UnifyType treeSetExtInt = tf.getSimpleType("TreeSet", extInt); UnifyType linkedHashSetExtInt = tf.getSimpleType("LinkedHashSet", extInt); UnifyType setExtInt = tf.getSimpleType("Set", extInt); expectedResult = new HashSet<>(Arrays.stream(new UnifyType[] { setInt, hashSetInt, linkedHashSetInt, treeSetInt, hashSetExtInt, treeSetExtInt, linkedHashSetExtInt, setExtInt, }).collect(Collectors.toSet())); Assert.assertEquals(expectedResult, fc.smaller(setExtInt)); /* * Test Case 3: * * smaller(Set) = * { HashSet, Set, TreeSet, LinkedHashSet, * HashSet, Set, TreeSet, LinkedHashSet, * HashSet, Set, TreeSet, LinkedHashSet * HashSet } */ UnifyType hashSetNum = tf.getSimpleType("HashSet", number); UnifyType treeSetNum = tf.getSimpleType("TreeSet", number); UnifyType linkedHashSetNum = tf.getSimpleType("LinkedHashSet", number); UnifyType setNum = tf.getSimpleType("Set", number); UnifyType extNum = tf.getExtendsType(number); UnifyType hashSetExtNum = tf.getSimpleType("HashSet", extNum); UnifyType treeSetExtNum = tf.getSimpleType("TreeSet", extNum); UnifyType linkedHashSetExtNum = tf.getSimpleType("LinkedHashSet", extNum); UnifyType setExtNum = tf.getSimpleType("Set", extNum); expectedResult = new HashSet<>(Arrays.stream(new UnifyType[] { setInt, hashSetInt, linkedHashSetInt, treeSetInt, setNum, hashSetNum, linkedHashSetNum, treeSetNum, setExtInt, hashSetExtInt, linkedHashSetExtInt, treeSetExtInt, setExtNum, hashSetExtNum, linkedHashSetExtNum, treeSetExtNum }).collect(Collectors.toSet())); Assert.assertEquals(expectedResult, fc.smaller(setExtNum)); /* * Test Case 4: * smaller(Set) = * { HashSet, Set, TreeSet, LinkedHashSet } */ UnifyType t = tf.getPlaceholderType("T"); UnifyType setT = tf.getSimpleType("Set", t); UnifyType hashSetT = tf.getSimpleType("HashSet", t); UnifyType treeSetT = tf.getSimpleType("TreeSet", t); UnifyType linkedHashSetT = tf.getSimpleType("LinkedHashSet", t); expectedResult = new HashSet<>(Arrays.stream(new UnifyType[] { setT, hashSetT, treeSetT, linkedHashSetT }).collect(Collectors.toSet())); Assert.assertEquals(expectedResult, fc.smaller(setT)); /* * Test Case 5 * * smaller(Set = * { Set, HashSet, TreeSet, LinkedHashSet, * Set, HashSet, TreeSet, LinkedHashSet, * Set, HashSet, TreeSet, LinkedHashSet } */ UnifyType superNum = tf.getSuperType(number); UnifyType superInt = tf.getSuperType(integer); UnifyType setSupInt = tf.getSimpleType("Set", superInt); UnifyType hashSetSupInt = tf.getSimpleType("HashSet", superInt); UnifyType linkedHashSetSupInt = tf.getSimpleType("LinkedHashSet", superInt); UnifyType treeSetSupInt = tf.getSimpleType("TreeSet", superInt); UnifyType setSupNum = tf.getSimpleType("Set", superNum); UnifyType hashSetSupNum = tf.getSimpleType("HashSet", superNum); UnifyType linkedHashSetSupNum = tf.getSimpleType("LinkedHashSet", superNum); UnifyType treeSetSupNum = tf.getSimpleType("TreeSet", superNum); expectedResult = new HashSet<>(Arrays.stream(new UnifyType[] { setSupInt, hashSetSupInt, linkedHashSetSupInt, treeSetSupInt, setSupNum, hashSetSupNum, linkedHashSetSupNum, treeSetSupNum, setInt, hashSetInt, linkedHashSetInt, treeSetInt, setNum, hashSetNum, linkedHashSetNum, treeSetNum }).collect(Collectors.toSet())); Assert.assertEquals(expectedResult, fc.smaller(setSupInt)); /* * Test Case 6: * TODO probleme wenn Set weil T auch in der Klassendeklaration class Set verwendet wird. * smaller(Set, Set, TreeSet, LinkedHashSet, * HashSet, Set, TreeSet, LinkedHashSet } * */ UnifyType t1 = tf.getPlaceholderType("T1"); UnifyType extT1 = tf.getExtendsType(t1); UnifyType setExtT1 = tf.getSimpleType("Set", extT1); UnifyType hashSetExtT1 = tf.getSimpleType("HashSet", extT1); UnifyType treeSetExtT1 = tf.getSimpleType("TreeSet", extT1); UnifyType linkedHashSetExtT1 = tf.getSimpleType("LinkedHashSet", extT1); UnifyType setT1 = tf.getSimpleType("Set", t1); UnifyType hashSetT1 = tf.getSimpleType("HashSet", t1); UnifyType treeSetT1 = tf.getSimpleType("TreeSet", t1); UnifyType linkedHashSetT1 = tf.getSimpleType("LinkedHashSet", t1); expectedResult = new HashSet<>(Arrays.stream(new UnifyType[] { setT1, hashSetT1, treeSetT1, linkedHashSetT1, setExtT1, hashSetExtT1, treeSetExtT1, linkedHashSetExtT1 }).collect(Collectors.toSet())); //System.out.println(fc.smaller(setExtT1)); Assert.assertEquals(expectedResult, fc.smaller(setExtT1)); /* * Test Case 7: * * smaller(Set) = * { HashSet, Set, TreeSet, LinkedHashSet, * HashSet, Set, TreeSet, LinkedHashSet } */ UnifyType notInFc = tf.getSimpleType("notInFC"); UnifyType setNotInFc = tf.getSimpleType("Set", notInFc); UnifyType hashSetNotInFc = tf.getSimpleType("HashSet", notInFc); UnifyType treeSetNotInFc = tf.getSimpleType("TreeSet", notInFc); UnifyType linkedHashSetNotInFc = tf.getSimpleType("LinkedHashSet", notInFc); UnifyType hashSetExtNotInFc = tf.getSimpleType("HashSet", notInFc); UnifyType treeSetExtNotInFc = tf.getSimpleType("TreeSet", notInFc); UnifyType linkedHashSetExtNotInFc = tf.getSimpleType("LinkedHashSet", notInFc); UnifyType setExtNotInFc = tf.getSimpleType("Set", notInFc); expectedResult = new HashSet<>(Arrays.stream(new UnifyType[] { setNotInFc, hashSetNotInFc, treeSetNotInFc, linkedHashSetNotInFc, setExtNotInFc, hashSetExtNotInFc, treeSetExtNotInFc, linkedHashSetExtNotInFc }).collect(Collectors.toSet())); Assert.assertEquals(expectedResult, fc.smaller(setNotInFc)); /* * Test Case 8: * * smaller(Set) = * { Set, HashSet, LinkedHashSet, TreeSet, * Set, HashSet, LinkedHashSet, TreeSet } */ UnifyType superNotInFc = tf.getSuperType(notInFc); UnifyType setSuperNotInFc = tf.getSimpleType("Set", superNotInFc); UnifyType hashSetSuperNotInFc = tf.getSimpleType("HashSet", superNotInFc); UnifyType treeSetSuperNotInFc = tf.getSimpleType("TreeSet", superNotInFc); UnifyType linkedHashSetSuperNotInFc = tf.getSimpleType("LinkedHashSet", superNotInFc); expectedResult = new HashSet<>(Arrays.stream(new UnifyType[] { setNotInFc, hashSetNotInFc, treeSetNotInFc, linkedHashSetNotInFc, setSuperNotInFc, hashSetSuperNotInFc, treeSetSuperNotInFc, linkedHashSetSuperNotInFc }).collect(Collectors.toSet())); Assert.assertEquals(expectedResult, fc.smaller(setSuperNotInFc)); /* * Test Case 8: * * smaller(NotInFc) = * { NotInFc, NotInFc, NotInFc, NotInFc } */ UnifyType notInFcExtNumber = tf.getSimpleType("NotInFc", extNum); UnifyType notInFcInteger = tf.getSimpleType("NotInFc", integer); UnifyType notInFcNumber = tf.getSimpleType("NotInFc", number); UnifyType notInFcExtInt = tf.getSimpleType("NotInFc", extInt); expectedResult = new HashSet<>(Arrays.stream(new UnifyType[] { notInFcExtNumber, notInFcInteger, notInFcNumber, notInFcExtInt }).collect(Collectors.toSet())); Assert.assertEquals(expectedResult, fc.smaller(notInFcExtNumber)); /* * Test Case 9: * * smaller(NotInFc = * { NotInFc, NotInFc } */ UnifyType alsoNotInFc = tf.getSimpleType("AlsoNotInFc"); UnifyType notInFcAlsoNotInFc = tf.getSimpleType("NotInFc", alsoNotInFc); UnifyType notInFcSupAlsoNotInFc = tf.getSimpleType("NotInFc", tf.getSuperType(alsoNotInFc)); expectedResult = new HashSet<>(Arrays.stream(new UnifyType[] { notInFcAlsoNotInFc, notInFcSupAlsoNotInFc }).collect(Collectors.toSet())); Set actual = fc.smaller(notInFcSupAlsoNotInFc); Assert.assertEquals(expectedResult, actual); /* * Test Case 10: * * smaller(TreeMap) = * { TreeMap, TreeMap, TreeMap, TreeMap * TreeMap, TreeMap, TreeMap, TreeMap, * TreeMap, TreeMap, TreeMap * TreeMap, TreeMap, TreeMap, TreeMap } */ UnifyType treeMapExtNumSupInt = tf.getSimpleType("TreeMap", extNum, superInt); expectedResult = new HashSet<>(Arrays.stream(new UnifyType[] { treeMapExtNumSupInt, tf.getSimpleType("TreeMap", extNum, superNum), tf.getSimpleType("TreeMap", extNum, integer), tf.getSimpleType("TreeMap", extNum, number), tf.getSimpleType("TreeMap", number, superInt), tf.getSimpleType("TreeMap", number, superNum), tf.getSimpleType("TreeMap", number, integer), tf.getSimpleType("TreeMap", number, number), tf.getSimpleType("TreeMap", integer, superInt), tf.getSimpleType("TreeMap", integer, superNum), tf.getSimpleType("TreeMap", integer, integer), tf.getSimpleType("TreeMap", integer, number), tf.getSimpleType("TreeMap", extInt, superInt), tf.getSimpleType("TreeMap", extInt, superNum), tf.getSimpleType("TreeMap", extInt, integer), tf.getSimpleType("TreeMap", extInt, number) }).collect(Collectors.toSet())); actual = fc.smaller(treeMapExtNumSupInt); Assert.assertEquals(expectedResult, actual); /* * Test Case 11: * * smaller(SortedMap) = { SortedMap, NavigableMap, TreeMap } */ UnifyType sortedMapNumberT = tf.getSimpleType("SortedMap", number, t); UnifyType navigableMapNumberT = tf.getSimpleType("NavigableMap", number, t); UnifyType treeMapNumberT = tf.getSimpleType("TreeMap", number, t); expectedResult = new HashSet<>(Arrays.stream(new UnifyType[] { sortedMapNumberT, navigableMapNumberT, treeMapNumberT }).collect(Collectors.toSet())); actual = fc.smaller(sortedMapNumberT); Assert.assertEquals(expectedResult, actual); /* * Test Case 12: * * MyMap <* TreeMap> * * smaller(TreeMap) = { TreeMap>, MyMap } */ fcb = new FiniteClosureBuilder(); UnifyType k = tf.getPlaceholderType("K"); UnifyType myMap = tf.getSimpleType("MyMap", k); fcb.add(myMap, tf.getSimpleType("TreeMap", k, tf.getSimpleType("List", k))); fcb.add(integer, number); fc = fcb.getCollectionExample(); UnifyType treeMapNumberListNumber = tf.getSimpleType("TreeMap", number, tf.getSimpleType("List", number)); expectedResult = new HashSet<>(Arrays.stream(new UnifyType[] { treeMapNumberListNumber, tf.getSimpleType("MyMap", number) }).collect(Collectors.toSet())); actual = fc.smaller(treeMapNumberListNumber); Assert.assertEquals(expectedResult, actual); /* * Test Case 13: * * MyMap <* TreeMap> * * smaller(TreeMap) = * { TreeMap, List>, * TreeMap>, * TreeMap>, * TreeMap>, * MyMap } */ UnifyType listInteger = tf.getSimpleType("List", integer); UnifyType treeMapExtNumberListInteger = tf.getSimpleType("TreeMap", extNum, listInteger); expectedResult = new HashSet<>(Arrays.stream(new UnifyType[] { treeMapExtNumberListInteger, tf.getSimpleType("TreeMap", extInt, listInteger), tf.getSimpleType("TreeMap", number, listInteger), tf.getSimpleType("TreeMap", integer, listInteger), tf.getSimpleType("MyMap", integer) }).collect(Collectors.toSet())); actual = fc.smaller(treeMapExtNumberListInteger); Assert.assertEquals(expectedResult, actual); /* * Test Case 14 * * MyMap <* TreeMap> * * smaller(TreeMap) = * { TreeMap, List>, * TreeMap>, * TreeMap>, * TreeMap>, * MyMap * MyMap * MyMap * MyMap */ UnifyType listExtNum = tf.getSimpleType("List", extNum); UnifyType treeMapExtNumListExtNum = tf.getSimpleType("TreeMap", extNum, listExtNum); UnifyType myMapInt = tf.getSimpleType("MyMap", integer); UnifyType myMapNumber = tf.getSimpleType("MyMap", number); UnifyType myMapExtInt = tf.getSimpleType("MyMap", extInt); UnifyType myMapExtNum = tf.getSimpleType("MyMap", extNum); actual = fc.smaller(treeMapExtNumListExtNum); expectedResult = new HashSet<>(Arrays.stream(new UnifyType[] { tf.getSimpleType("TreeMap", extNum, listExtNum), tf.getSimpleType("TreeMap", extInt, listExtNum), tf.getSimpleType("TreeMap", number, listExtNum), tf.getSimpleType("TreeMap", integer, listExtNum), myMapInt, myMapNumber, myMapExtInt, myMapExtNum }).collect(Collectors.toSet())); Assert.assertEquals(expectedResult, actual); /* * Test Case 15: * * MyMap <* TreeMap> * * smaller(NavigableSet>) = * { Permutationen der List, * Permutationen der List in TreeSets, * MyMap und MyMap * } */ UnifyType navSet = tf.getSimpleType("NavigableMap", extInt, tf.getExtendsType(tf.getSimpleType("List", extInt))); actual = fc.smaller(navSet); Assert.assertEquals(82, actual.size()); Assert.assertTrue(actual.contains(myMapExtInt)); Assert.assertTrue(actual.contains(myMapInt)); /* * Test Case 16: * * smaller(FunN) = * { FunN, FunN, * FunN, FunN, * FunN, FunN, * FunN, FunN } */ UnifyType object = tf.getSimpleType("Object"); fcb = new FiniteClosureBuilder(); fcb.add(integer, number); fcb.add(number, object); fc = fcb.getCollectionExample(); UnifyType funNNumber = tf.getFunNType(number, number, number); expectedResult = new HashSet<>(Arrays.stream(new UnifyType[] { tf.getFunNType(number, number, number), tf.getFunNType(number, object, number), tf.getFunNType(number, number, object), tf.getFunNType(number, object, object), tf.getFunNType(integer, number, number), tf.getFunNType(integer, object, number), tf.getFunNType(integer, number, object), tf.getFunNType(integer, object, object), }).collect(Collectors.toSet())); actual = fc.smaller(funNNumber); //System.out.println(actual); Assert.assertEquals(expectedResult, actual); } @Test public void testGreater() { TypeFactory tf = new TypeFactory(); FiniteClosureBuilder fcb = new FiniteClosureBuilder(); UnifyType k = tf.getPlaceholderType("K"); UnifyType integer = tf.getSimpleType("Integer"); UnifyType number = tf.getSimpleType("Number"); UnifyType myMap = tf.getSimpleType("MyMap", k); UnifyType myIntMap = tf.getSimpleType("MyIntMap"); UnifyType collection = tf.getSimpleType("Collection"); UnifyType sortedSet =tf.getSimpleType("SortedSet", "T"); UnifyType extInt = tf.getExtendsType(integer); UnifyType extNum = tf.getExtendsType(number); UnifyType supInt = tf.getSuperType(integer); UnifyType supNum = tf.getSuperType(number); fcb.add(myMap, tf.getSimpleType("Map", k, tf.getSimpleType("List", k))); fcb.add(myIntMap, tf.getSimpleType("MyMap", integer)); fcb.add(sortedSet, tf.getSimpleType("Set", "T")); // sortedSet < Set missing in collection example fcb.add(integer, number); IFiniteClosure fc = fcb.getCollectionExample(); /* * Test Case 1: * * greater(SortedSet) = * { SortedSet, Set, Collection * SortedSet, SortedSet, SortedSet, * Set, Set, Set } */ UnifyType sortedSetInteger = tf.getSimpleType("SortedSet", integer); Set expectedResult = new HashSet<>(Arrays.stream(new UnifyType[] { sortedSetInteger, tf.getSimpleType("Set", integer), collection, tf.getSimpleType("SortedSet", extInt), tf.getSimpleType("SortedSet", supInt), tf.getSimpleType("SortedSet", extNum), tf.getSimpleType("Set", extInt), tf.getSimpleType("Set", supInt), tf.getSimpleType("Set", extNum) }).collect(Collectors.toSet())); Set actual = fc.greater(sortedSetInteger); Assert.assertEquals(expectedResult, actual); /* * Test Case 2: * * greater(SortedSet) = * { SortedSet, SortedSet, * Set, Set, Collection } */ UnifyType sortedSetExtInt = tf.getSimpleType("SortedSet", extInt); expectedResult = new HashSet<>(Arrays.stream(new UnifyType[] { sortedSetExtInt, tf.getSimpleType("SortedSet", extNum), collection, tf.getSimpleType("Set", extInt), tf.getSimpleType("Set", extNum) }).collect(Collectors.toSet())); actual = fc.greater(sortedSetExtInt); Assert.assertEquals(expectedResult, actual); /* * Test Case 3: * * TODO hier extends und super? (siehe test case 4 bei smaller) * greater(SortedSet) = * { SortedSet, SortedSet, SortedSet, * Set, Set, Set, Collection } */ /* * Test Case 4: * * greater(SortedSet) = * { SortedSet, SortedSet * Set, Set, Collection } */ UnifyType sortedSetSupNum = tf.getSimpleType("SortedSet", supNum); expectedResult = new HashSet<>(Arrays.stream(new UnifyType[] { sortedSetSupNum, tf.getSimpleType("SortedSet", supInt), collection, tf.getSimpleType("Set", supNum), tf.getSimpleType("Set", supInt) }).collect(Collectors.toSet())); actual = fc.greater(sortedSetSupNum); Assert.assertEquals(expectedResult, actual); /* * Test Case 5: * * TODO nicht unifizierbar bei T wenn Set deklariert wurde. Können die beiden T's verschieden sein? * greater(SortedSet) = * { SortedSet, Set, Collection } */ UnifyType extT = tf.getExtendsType(tf.getPlaceholderType("T1")); UnifyType sortedSetExtT = tf.getSimpleType("SortedSet", extT); expectedResult = new HashSet<>(Arrays.stream(new UnifyType[] { sortedSetExtT, tf.getSimpleType("Set", extT), collection, }).collect(Collectors.toSet())); actual = fc.greater(sortedSetExtT); Assert.assertEquals(expectedResult, actual); /* * Test Case 6: * * greater(SortedSet) = * { SortedSet, SortedSet, SortedSet, * Set, Set, Set, Collection } */ UnifyType notInFc = tf.getSimpleType("NotInFc"); UnifyType extNotInFc = tf.getExtendsType(notInFc); UnifyType supNotInFc = tf.getSuperType(notInFc); UnifyType sortedSetNotInFc= tf.getSimpleType("SortedSet", notInFc); expectedResult = new HashSet<>(Arrays.stream(new UnifyType[] { sortedSetNotInFc, tf.getSimpleType("SortedSet", extNotInFc), tf.getSimpleType("SortedSet", supNotInFc), tf.getSimpleType("Set", notInFc), tf.getSimpleType("Set", extNotInFc), tf.getSimpleType("Set", supNotInFc), collection }).collect(Collectors.toSet())); actual = fc.greater(sortedSetNotInFc); Assert.assertEquals(expectedResult, actual); /* * Test Case 7: * * greater(SortedSet, Set, Collection } */ UnifyType sortedSetSupNotInFc= tf.getSimpleType("SortedSet", supNotInFc); expectedResult = new HashSet<>(Arrays.stream(new UnifyType[] { sortedSetSupNotInFc, tf.getSimpleType("Set", supNotInFc), collection }).collect(Collectors.toSet())); actual = fc.greater(sortedSetSupNotInFc); Assert.assertEquals(expectedResult, actual); /* * Test Case 8: * * greater(NotInFc) = * { NotInFc, NotInFc, NotInFC, * NotInFc } */ UnifyType notInFcInteger = tf.getSimpleType("NotInFc", integer); expectedResult = new HashSet<>(Arrays.stream(new UnifyType[] { notInFcInteger, tf.getSimpleType("NotInFc", supInt), tf.getSimpleType("NotInFc", extInt), tf.getSimpleType("NotInFc", extNum) }).collect(Collectors.toSet())); actual = fc.greater(notInFcInteger); Assert.assertEquals(expectedResult, actual); /* * Test Case 9: * greater(NotInFc) = * { NotInFc, NotInFc } */ UnifyType notInFcAlsoNotInFc = tf.getSimpleType("NotInFc", tf.getSimpleType("AlsoNotInFc")); expectedResult = new HashSet<>(Arrays.stream(new UnifyType[] { notInFcAlsoNotInFc, tf.getSimpleType("NotInFc", tf.getExtendsType(tf.getSimpleType("AlsoNotInFc"))), tf.getSimpleType("NotInFc", tf.getSuperType(tf.getSimpleType("AlsoNotInFc"))) }).collect(Collectors.toSet())); actual = fc.greater(notInFcAlsoNotInFc); Assert.assertEquals(expectedResult, actual); /* * Test Case 10: * greater(Map) = * { Map, Map, * Map, Map, * Map, Map, * Map, Map } */ UnifyType mapExtIntInt = tf.getSimpleType("Map", extInt, integer); expectedResult = new HashSet<>(Arrays.stream(new UnifyType[] { mapExtIntInt, tf.getSimpleType("Map", extInt, extInt), tf.getSimpleType("Map", extInt, supInt), tf.getSimpleType("Map", extInt, extNum), tf.getSimpleType("Map", extNum, integer), tf.getSimpleType("Map", extNum, extInt), tf.getSimpleType("Map", extNum, supInt), tf.getSimpleType("Map", extNum, extNum) }).collect(Collectors.toSet())); actual = fc.greater(mapExtIntInt); Assert.assertEquals(expectedResult, actual); /* * Test Case 11: * * MyIntMap < MyMap * MyMap < Map> * * greater(MyIntMap) = * { MyMap, MyMap, MyMap, MyMap, * Map, Map, List, * Map, List, Map, MyIntMap } */ UnifyType listInteger = tf.getSimpleType("List", integer); expectedResult = new HashSet<>(Arrays.stream(new UnifyType[] { myIntMap, tf.getSimpleType("MyMap", integer), tf.getSimpleType("MyMap", extInt), tf.getSimpleType("MyMap", extNum), tf.getSimpleType("MyMap", supInt), tf.getSimpleType("Map", integer, listInteger), tf.getSimpleType("Map", extInt, listInteger), tf.getSimpleType("MyMap", extNum, listInteger), tf.getSimpleType("MyMap", supInt, listInteger) }).collect(Collectors.toSet())); actual = fc.greater(myIntMap); //Assert.assertEquals(expectedResult, actual); /* * Test Case 12: * * MyIntMap < MyMap * MyMap < Map> * * TODO * D d = null; * A> a = null; * a = d; ist nicht möglich! * * greater(MyMap) = * { MyMap, MyMap, * Map>, * Map, List> } */ /* * Test Case 13: * * greater(SortedMap, ? super List>) = * */ /* * Test Case 14: * * greater(FunN) = * { FunN, FunN, * FunN, FunN, * FunN, FunN, * FunN, FunN } */ UnifyType object = tf.getSimpleType("Object"); fcb = new FiniteClosureBuilder(); fcb.add(integer, number); fcb.add(number, object); fc = fcb.getCollectionExample(); UnifyType funNNumber = tf.getFunNType(number, number, number); expectedResult = new HashSet<>(Arrays.stream(new UnifyType[] { tf.getFunNType(number, number, number), tf.getFunNType(number, integer, number), tf.getFunNType(number, number, integer), tf.getFunNType(number, integer, integer), tf.getFunNType(object, number, number), tf.getFunNType(object, integer, number), tf.getFunNType(object, number, integer), tf.getFunNType(object, integer, integer) }).collect(Collectors.toSet())); actual = fc.greater(funNNumber); Assert.assertEquals(expectedResult, actual); } }