// Program to test solutions to problem #10 on the cse142a final, autumn 2016. // Fill in your solution to sumCount, then compile and run the program. import java.util.*; public class FinalTest10 { public static void sumCount(int[] data, int[] sum, int[] count) { // fill in your solution here // you can also rename the parameters above } // this is the sample solution public static void sumCount2(int[] data, int[] sum, int[] count) { for (int i = 0; i < 4; i++) { sum[i] = 0; count[i] = 0; } for (int i = 0; i < data.length; i++) { int index = (i % 7 + 1) / 2; if (data[i] > 0) { count[index]++; sum[index] += data[i]; } } } private static int testCount, failCount; public static void main(String[] args) { failCount = 0; for (int i = 0; i <= 15; i++) { test(i, true); } for (int i = 0; i <= 15; i++) { test(i, false); } 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, boolean zeroArrays) { int[] data1 = new int[7 * n]; Random r = new Random(); for (int i = 0; i < data1.length; i++) { data1[i] = r.nextInt(11); } int[] data2 = Arrays.copyOf(data1, data1.length); int[] sum1 = new int[4]; int[] count1 = new int[4]; if (!zeroArrays) { for (int i = 0; i < count1.length; i++) { sum1[i] = r.nextInt(150); count1[i] = r.nextInt(15); } } int[] sum2 = Arrays.copyOf(sum1, count1.length); int[] sumCopy = Arrays.copyOf(sum1, count1.length); int[] count2 = Arrays.copyOf(count1, count1.length); int[] countCopy = Arrays.copyOf(count1, count1.length); sumCount2(data2, sum2, count2); testCount++; boolean fail = false; RuntimeException except = null; try { sumCount(data1, sum1, count1); } catch (RuntimeException e) { fail = true; except = e; } System.out.println("testing with:"); System.out.println("data = " + Arrays.toString(data2)); System.out.println("sum = " + Arrays.toString(sumCopy)); System.out.println("count = " + Arrays.toString(countCopy)); System.out.println("after calling sumCount:"); System.out.println("sum = " + Arrays.toString(sum2)); if (Arrays.equals(sum1, sum2)) { System.out.println("your sum matches"); } else { System.out.println("your sum = " + Arrays.toString(sum1)); fail = true; } System.out.println("count = " + Arrays.toString(count2)); if (Arrays.equals(count1, count2)) { System.out.println("your count matches"); } else { System.out.println("your count = " + Arrays.toString(count1)); fail = true; } if (!Arrays.equals(data1, data2)) { System.out.println("data now = " + Arrays.toString(data1)); fail = true; } if (fail) { if (except != null) { int line = except.getStackTrace()[0].getLineNumber(); System.out.println("threw " + except + " at line #" + line); } failCount++; System.out.println("failed"); } else { System.out.println("passed"); } System.out.println(); } }