import org.junit.Test; import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.stream.Collectors; import static org.junit.Assert.*; public class GeneratePalindromicDecompositionsTest { private List<List<String>> expected; private String input; @Test public void palindromicPartitioning1() throws Exception { expected = Arrays.asList( Arrays.asList("6","1","1","1","1","6"), Arrays.asList("6","11","1","1","6"), Arrays.asList("6","1","1","11","6"), Arrays.asList("6","11","11","6"), Arrays.asList("6","1111","6") ); input = "611116"; test(expected, input); } @Test public void palindromicPartitioning2() throws Exception { expected = Arrays.asList( Arrays.asList("0","2","0","4","4","5","1","8","8","1"), Arrays.asList("0","2","0","44","5","1","8","8","1"), Arrays.asList("0","2","0","4","4","5","1","88","1"), Arrays.asList("0","2","0","4","4","5","1881"), Arrays.asList("0","2","0","44","5","1","88","1"), Arrays.asList("0","2","0","44","5","1881"), Arrays.asList("020","4","4","5","1","8","8","1"), Arrays.asList("020","44","5","1","8","8","1"), Arrays.asList("020","4","4","5","1","88","1"), Arrays.asList("020","4","4","5","1881"), Arrays.asList("020","44","5","1","88","1"), Arrays.asList("020","44","5","1881") ); input = "0204451881"; test(expected, input); } private void test(List<List<String>> expected, String input) { expected.forEach(Collections::sort); List<List<String>> result = GeneratePalindromicDecompositions.palindromicPartitioning(input); assertEquals(expected.size(), result.size()); result.forEach( i -> { Collections.sort(i); assertTrue(expected.remove(i)); }); } }