// Program to test solutions to problem #9 on the cse142a final, autumn 2014. // Fill in your solution to combineSublists, then compile and run the program. import java.util.*; public class FinalTest9 { public static int[] combineSublists(int[] list1, int[] list2, int start, int stop) { // fill in your solution here // you can also rename the parameters above } // this is the sample solution public static int[] combineSublists2(int[] list1, int[] list2, int start, int stop) { int sublistLength = stop - start; int[] result = new int[2 * sublistLength]; for (int i = start; i < stop; i++) { result[i - start] = list1[i]; result[i - start + sublistLength] = list2[i]; } return result; } private static int count, failCount; public static final int ERRORS_MAX = 10; public static void main(String[] args) { for (int i = 1; i < 10; i++) { test(i, 2 * i - 1); } test(0, 5); test(1, 5); test(2, 5); if (failCount == 0) { System.out.println("passed all " + count + " tests"); } else { System.out.println("failed " + failCount + " of " + count + " tests"); } } public static void test(int len1, int len2) { Random r = new Random(); int[] list1 = new int[len1]; int[] list2 = new int[len2]; for (int i = 0; i < len1; i++) { list1[i] = r.nextInt(31) - 15; } for (int i = 0; i < len2; i++) { list2[i] = r.nextInt(31) - 15; } test(list1, list2); test(list2, list1); } public static void test(int[] list1, int[] list2) { int[] copy1 = Arrays.copyOf(list1, list1.length); int[] copy2 = Arrays.copyOf(list2, list2.length); int len = Math.min(list1.length, list2.length); for (int i = 0; i <= len; i++) { for (int j = i; j <= len; j++) { count++; int[] result1 = combineSublists2(list1, list2, i, j); int[] result2 = null; RuntimeException except = null; boolean fail = false; try { result2 = combineSublists(list1, list2, i, j); } catch (RuntimeException e) { except = e; fail = true; } if (!Arrays.equals(result1, result2) || !Arrays.equals(list1, copy1) || !Arrays.equals(list2, copy2)) { fail = true; } if (fail) { System.out.println("failed with:"); System.out.println(" list1 = " + Arrays.toString(copy1)); System.out.println(" list2 = " + Arrays.toString(copy2)); System.out.println(" start = " + i); System.out.println(" stop = " + j); System.out.println(" correct = " + Arrays.toString(result1)); if (except == null) { System.out.println(" theirs = " + Arrays.toString(result2)); } else { int line = except.getStackTrace()[0].getLineNumber(); System.out.println(" threw " + except + " at line #" + line); } if (!Arrays.equals(list1, copy1)) { System.out.println(" list1 now = " + Arrays.toString(list1)); } if (!Arrays.equals(list2, copy2)) { System.out.println(" list2 now = " + Arrays.toString(list2)); } failCount++; if (failCount > ERRORS_MAX) { System.out.println("exceeds " + ERRORS_MAX + " errors"); System.out.println("with " + count + " correct"); System.exit(0); } } } } } }