--- jsr166/src/test/loops/ListBash.java 2005/05/31 15:08:32 1.3 +++ jsr166/src/test/loops/ListBash.java 2005/09/25 13:10:45 1.4 @@ -7,12 +7,17 @@ import java.util.*; public class ListBash { - static Random rnd = new Random(); + static boolean canRemove = true; + static final Random rnd = new Random(); + static int numItr; + static int listSize; + static boolean synch; + static Class cl; public static void main(String[] args) { - int numItr = Integer.parseInt(args[1]); - int listSize = Integer.parseInt(args[2]); - Class cl = null; + numItr = Integer.parseInt(args[1]); + listSize = Integer.parseInt(args[2]); + cl = null; try { cl = Class.forName(args[0]); @@ -20,104 +25,147 @@ public class ListBash { fail("Class " + args[0] + " not found."); } - boolean synch = (args.length>3); + synch = (args.length>3); + oneRun(); + oneRun(); + oneRun(); + oneRun(); + oneRun(); + } - boolean canRemove = true; + static void oneRun() { + long startTime = System.nanoTime(); for (int i=0; i s = newList(cl, synch); for (int i=0; i s1 = newList(cl, synch); + AddRandoms(s1, listSize); + + List s2 = newList(cl, synch); + AddRandoms(s2, listSize); + + sets(s1, s2); + + s1.clear(); + if (s1.size() != 0) + fail("Clear didn't reduce size to zero."); + + s1.addAll(0, s2); + if (!(s1.equals(s2) && s2.equals(s1))) + fail("addAll(int, Collection) doesn't work."); + // Reverse List + for (int j=0, n=s1.size(); j s1, List s2) { + int sum = 0; + for (int k = 0; k < listSize; ++k) { + sum += (s1.get(k)).intValue(); + sum -= (s2.get(k)).intValue(); + } + for (int k = 0; k < listSize; ++k) { + sum += (s1.get(k)).intValue(); + s1.set(k, sum); + sum -= (s2.get(k)).intValue(); + s1.set(k, -sum); + } + for (int k = 0; k < listSize; ++k) { + sum += (s1.get(k)).intValue(); + sum -= (s2.get(k)).intValue(); + } + if (sum == 0) System.out.print(" "); + } + + static void sets(List s1, List s2) { + List intersection = clone(s1, cl,synch);intersection.retainAll(s2); + List diff1 = clone(s1, cl, synch); diff1.removeAll(s2); + List diff2 = clone(s2, cl, synch); diff2.removeAll(s1); + List union = clone(s1, cl, synch); union.addAll(s2); + + if (diff1.removeAll(diff2)) + fail("List algebra identity 2 failed"); + if (diff1.removeAll(intersection)) + fail("List algebra identity 3 failed"); + if (diff2.removeAll(diff1)) + fail("List algebra identity 4 failed"); + if (diff2.removeAll(intersection)) + fail("List algebra identity 5 failed"); + if (intersection.removeAll(diff1)) + fail("List algebra identity 6 failed"); + if (intersection.removeAll(diff1)) + fail("List algebra identity 7 failed"); + + intersection.addAll(diff1); intersection.addAll(diff2); + if (!(intersection.containsAll(union) && + union.containsAll(intersection))) + fail("List algebra identity 1 failed"); + + Iterator e = union.iterator(); + while (e.hasNext()) + intersection.remove(e.next()); + if (!intersection.isEmpty()) + fail("Copy nonempty after deleting all elements."); + + e = union.iterator(); + while (e.hasNext()) { + Object o = e.next(); + if (!union.contains(o)) + fail("List doesn't contain one of its elements."); + if (canRemove) { + try { e.remove(); + } catch (UnsupportedOperationException uoe) { + canRemove = false; + } + } + } + if (canRemove && !union.isEmpty()) + fail("List nonempty after deleting all elements."); + } + + static void evenOdd(List s) { + List even = clone(s, cl, synch); + List odd = clone(s, cl, synch); + List all; + Iterator it; if (!canRemove) all = clone(s, cl, synch); else { it = even.iterator(); while(it.hasNext()) - if(((Integer)it.next()).intValue() % 2 == 1) + if((it.next()).intValue() % 2 == 1) it.remove(); it = even.iterator(); while(it.hasNext()) - if(((Integer)it.next()).intValue() % 2 == 1) + if((it.next()).intValue() % 2 == 1) fail("Failed to remove all odd nubmers."); for (int i=0; i<(listSize/2); i++) odd.remove(i); for (int i=0; i<(listSize/2); i++) { - int ii = ((Integer)odd.get(i)).intValue(); + int ii = (odd.get(i)).intValue(); if(ii % 2 != 1) fail("Failed to remove all even nubmers. " + ii); } @@ -129,8 +177,8 @@ public class ListBash { fail("Failed to reconstruct ints from odds and evens."); all = clone(odd, cl, synch); - ListIterator itAll = all.listIterator(all.size()); - ListIterator itEven = even.listIterator(even.size()); + ListIterator itAll = all.listIterator(all.size()); + ListIterator itEven = even.listIterator(even.size()); while (itEven.hasPrevious()) { itAll.previous(); itAll.add(itEven.previous()); @@ -138,7 +186,7 @@ public class ListBash { } itAll = all.listIterator(); while (itAll.hasNext()) { - Integer i = (Integer)itAll.next(); + Integer i = itAll.next(); itAll.set(new Integer(i.intValue())); } itAll = all.listIterator(); @@ -149,8 +197,11 @@ public class ListBash { } if (!all.equals(s)) fail("Failed to reconstruct ints with ListIterator."); - - it = all.listIterator(); + } + + static void sublists(List s) { + List all = clone(s, cl, synch); + Iterator it = all.listIterator(); int i=0; while (it.hasNext()) { Object o = it.next(); @@ -170,8 +221,10 @@ public class ListBash { } i++; } + } - List l = newList(cl, synch); + static void arrays() { + List l = newList(cl, synch); AddRandoms(l, listSize); Integer[] ia = (Integer[]) l.toArray(new Integer[0]); if (!l.equals(Arrays.asList(ia))) @@ -186,12 +239,10 @@ public class ListBash { if (ia != ib || ia[listSize] != null || !l.equals(Arrays.asList(ia).subList(0, listSize))) fail("toArray(Object[]) is hosed (3)"); - - System.out.println("Success."); } // Done inefficiently so as to exercise toArray - static List clone(List s, Class cl, boolean synch) { + static List clone(List s, Class cl, boolean synch) { List a = Arrays.asList(s.toArray()); if (s.hashCode() != a.hashCode()) fail("Incorrect hashCode computation."); @@ -205,12 +256,12 @@ public class ListBash { if (!clone.containsAll(s)) fail("Copy does not contain list."); - return clone; + return (List)clone; } - static List newList(Class cl, boolean synch) { + static List newList(Class cl, boolean synch) { try { - List s = (List)cl.newInstance(); + List s = (List)cl.newInstance(); if (synch) s = Collections.synchronizedList(s); if (!s.isEmpty()) @@ -222,7 +273,7 @@ public class ListBash { return null; //Shut up compiler. } - static void AddRandoms(List s, int n) { + static void AddRandoms(List s, int n) { for (int i=0; i