From b7f41c4d135bb6148d2d2ed635ee0d85e75a722d Mon Sep 17 00:00:00 2001 From: Florian Steurer Date: Thu, 7 Apr 2016 22:30:30 +0200 Subject: [PATCH] funN greater --- .../unify/model/FiniteClosure.java | 18 +++++++++-- test/unify/FiniteClosureTest.java | 32 +++++++++++++++++-- 2 files changed, 46 insertions(+), 4 deletions(-) diff --git a/src/de/dhbwstuttgart/typeinference/unify/model/FiniteClosure.java b/src/de/dhbwstuttgart/typeinference/unify/model/FiniteClosure.java index 2ac30e19..5575dcf6 100644 --- a/src/de/dhbwstuttgart/typeinference/unify/model/FiniteClosure.java +++ b/src/de/dhbwstuttgart/typeinference/unify/model/FiniteClosure.java @@ -241,8 +241,22 @@ public class FiniteClosure implements IFiniteClosure { } protected Set computeGreaterFunN(FunNType type) { - // TODO Auto-generated method stub - return null; + Set result = new HashSet<>(); + + // if T = T' then T <=* T' + result.add(type); + + ArrayList> paramCandidates = new ArrayList<>(); + paramCandidates.add(greater(type.getTypeParams().get(0))); + for (int i = 1; i < type.getTypeParams().size(); i++) + paramCandidates.add(smaller(type.getTypeParams().get(i))); + + Set permResult = permuteParams(paramCandidates); + + for (TypeParams newParams : permResult) + result.add(type.setTypeParams(newParams)); + + return result; } diff --git a/test/unify/FiniteClosureTest.java b/test/unify/FiniteClosureTest.java index 25cd417e..f6dff401 100644 --- a/test/unify/FiniteClosureTest.java +++ b/test/unify/FiniteClosureTest.java @@ -169,7 +169,7 @@ public class FiniteClosureTest { setExtT1, hashSetExtT1, treeSetExtT1, linkedHashSetExtT1 }).collect(Collectors.toSet())); - System.out.println(fc.smaller(setExtT1)); + //System.out.println(fc.smaller(setExtT1)); Assert.assertEquals(expectedResult, fc.smaller(setExtT1)); /* @@ -424,7 +424,7 @@ public class FiniteClosureTest { }).collect(Collectors.toSet())); actual = fc.smaller(funNNumber); - System.out.println(actual); + //System.out.println(actual); Assert.assertEquals(expectedResult, actual); } @@ -664,6 +664,34 @@ public class FiniteClosureTest { * 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); } @Test