# HG changeset patch # User Christian Humer # Date 1377779312 -7200 # Node ID e55e24cc3e7bf390d105413db0c5bc8c71f69a35 # Parent 5fbd1ba4a5f3514cdb9448dd1033d56b0fac4439 Truffle-DSL: added permutation util functions to the TestHelper. diff -r 5fbd1ba4a5f3 -r e55e24cc3e7b graal/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/TestHelper.java --- a/graal/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/TestHelper.java Wed Aug 28 18:45:32 2013 +0200 +++ b/graal/com.oracle.truffle.api.dsl.test/src/com/oracle/truffle/api/dsl/test/TestHelper.java Thu Aug 29 14:28:32 2013 +0200 @@ -75,4 +75,44 @@ return createCallTarget(node).call(new TestArguments(values)); } + static Object array(Object... val) { + return val; + } + + static List> permutations(List list) { + return permutations(new ArrayList(), list, new ArrayList>()); + } + + static Object[][] permutations(Object... list) { + List> permutations = permutations(Arrays.asList(list)); + + Object[][] a = new Object[permutations.size()][]; + int index = 0; + for (List p : permutations) { + a[index] = p.toArray(new Object[p.size()]); + index++; + } + + return a; + } + + static List> permutations(List prefix, List suffix, List> output) { + if (suffix.size() == 1) { + ArrayList newElement = new ArrayList<>(prefix); + newElement.addAll(suffix); + output.add(newElement); + return output; + } + + for (int i = 0; i < suffix.size(); i++) { + List newPrefix = new ArrayList<>(prefix); + newPrefix.add(suffix.get(i)); + List newSuffix = new ArrayList<>(suffix); + newSuffix.remove(i); + permutations(newPrefix, newSuffix, output); + } + + return output; + } + }