import java.util.Arrays; import java.util.LinkedList; import java.util.List; import org.junit.Assert; import org.junit.Test; import org.overture.codegen.runtime.traces.Permutor; public class PermutorTest { public List<int[]> consPermutations(int[] limits) { Permutor p = new Permutor(limits); List<int[]> intArrays = new LinkedList<int[]>(); while (p.hasNext()) { intArrays.add(p.next()); } return intArrays; } @Test public void testPermutor1() { List<int[]> intArrays = consPermutations(new int[] { 3 }); assertNoOfPermutations(3, intArrays); assertArrayContained(new int[] { 0 }, intArrays); assertArrayContained(new int[] { 1 }, intArrays); assertArrayContained(new int[] { 2 }, intArrays); } @Test public void testPermutor2() { List<int[]> intArrays = consPermutations(new int[] { 2, 2 }); assertNoOfPermutations(4, intArrays); assertArrayContained(new int[] { 0, 0 }, intArrays); assertArrayContained(new int[] { 1, 0 }, intArrays); assertArrayContained(new int[] { 0, 1 }, intArrays); assertArrayContained(new int[] { 1, 1 }, intArrays); } @Test public void testPermutor3() { List<int[]> intArrays = consPermutations(new int[] { 2, 2, 2 }); assertNoOfPermutations(8, intArrays); assertArrayContained(new int[] { 0, 0, 0 }, intArrays); assertArrayContained(new int[] { 1, 1, 1 }, intArrays); assertArrayContained(new int[] { 1, 0, 0 }, intArrays); assertArrayContained(new int[] { 1, 1, 0 }, intArrays); assertArrayContained(new int[] { 1, 0, 1 }, intArrays); assertArrayContained(new int[] { 0, 1, 0 }, intArrays); assertArrayContained(new int[] { 0, 1, 1 }, intArrays); assertArrayContained(new int[] { 0, 0, 1 }, intArrays); } public static void assertNoOfPermutations(int expected, List<int[]> intArrays) { Assert.assertEquals("Expected number of permutations to be " + expected, expected, intArrays.size()); } public static void assertArrayContained(int[] subject, List<int[]> intArrays) { for (int[] arr : intArrays) { if (Arrays.equals(subject, arr)) { return; } } Assert.fail("Expected " + Arrays.toString(subject) + " to a permutation"); } }