// Program to test solutions to problem #9 on the cse142a final, autumn 2016. // Fill in your solution to collapse, then compile and run the program. import java.util.*; public class FinalTest9 { public static int[] collapse(int[] list) { // fill in your solution here // you can also rename the parameters above } // this is the sample solution public static int[] collapse2(int[] list) { int size = list.length / 2; if (list.length % 2 == 1) { size++; } int[] result = new int[size]; for (int i = 0; i < list.length / 2; i++) { result[i] = list[i * 2] + list[i * 2 + 1]; } if (list.length % 2 == 1) { result[result.length - 1] = list[list.length - 1]; } return result; } private static int testCount, failCount; public static void main(String[] args) { test(0); for (int i = 1; i <= 15; i++) { for (int j = 0; j < 3; j++) { test(i); } } if (failCount == 0) { System.out.println("passed all " + testCount + " tests"); } else { System.out.println("failed " + failCount + " of " + testCount + " tests"); } } public static void test(int n) { int[] list = new int[n]; Random r = new Random(); for (int i = 0; i < n; i++) { list[i] = r.nextInt(19) - 9; } System.out.println("testing " + Arrays.toString(list)); int[] copy = Arrays.copyOf(list, list.length); testCount++; int[] result1 = collapse2(list); System.out.println("correct = " + Arrays.toString(result1)); int[] result2 = null; RuntimeException except = null; boolean fail = false; try { result2 = collapse(list); } catch (RuntimeException e) { except = e; fail = true; } if (!Arrays.equals(result1, result2) || !Arrays.equals(list, copy)) { fail = true; } if (fail) { if (!Arrays.equals(result1, result2)) { if (except == null) { System.out.println("yours = " + Arrays.toString(result2)); } else { int line = except.getStackTrace()[0].getLineNumber(); System.out.println("threw " + except + " at line#" + line); } } if (!Arrays.equals(list, copy)) { System.out.println("array now = " + Arrays.toString(list)); } failCount++; System.out.println("failed"); } else { System.out.println("passed"); } System.out.println(); } }