import java.util.*; /****************************************************************** A test class for Assignment 7, CS 46B, Spring 2003. This class tests various forms of mapping. ******************************************************************/ public class A7 { /** Creates a pseudorandomly generated string of lower-case characters whose length varies randomly & uniformly between 3 and 6. @param r a Random object used to generate the string @return the string */ public static String getRandomString(Random r, String s) { char ch = (char) (((int) 'A' + r.nextInt(26))); return ch + s; } /** Creates a pseudorandomly generated telephone number as a string of letters and hyphens. @param r a Random object used to generate the string @return the string */ public static String getRandomPhoneNumber(Random r) { return (200 + r.nextInt(800)) + "-" + (1000 + r.nextInt(9000)); } /** The main test function. @param args is ignored */ public static void main(String args[]) { int SIZE = 20; // the sizes int SIZE2 = 100; // of test files Random r = new Random(7); // for generating random data Name.resetCounter(); // initialize a comparison counter // a simple test of the underlying mappings TreePhoneList tpl = new TreePhoneList(); tpl.add(new Name("john","doe"), "12345"); System.out.println(tpl.getNumber("john", "doe")); System.out.println(tpl.getNumber("jane", "doe")); System.out.println(); JHashedPhoneList jpl = new JHashedPhoneList(); jpl.add(new Name("john","doe"), "12345"); System.out.println(jpl.getNumber("john", "doe")); System.out.println(jpl.getNumber("jane", "doe")); System.out.println(); IHashedPhoneList ipl = new IHashedPhoneList(); ipl.add(new Name("john","doe"), "12345"); System.out.println(ipl.getNumber("john", "doe")); System.out.println(ipl.getNumber("jane", "doe")); System.out.println(); System.out.println(); // a test on a small mapping, with traversal ArrayList n = new ArrayList(SIZE); ArrayList p = new ArrayList(SIZE); for (int i=1; i<=SIZE; i++) { n.add(new Name(getRandomString(r,"im"), getRandomString(r,"ee"))); p.add(getRandomPhoneNumber(r)); } tpl = new TreePhoneList(); Iterator nit = n.iterator(); Iterator pit = p.iterator(); while (nit.hasNext()) tpl.add((Name) nit.next(), (String) pit.next()); System.out.println(Name.getCounter()); Name.resetCounter(); tpl.printSortedList(); System.out.println(Name.getCounter()); Name.resetCounter(); System.out.println(); jpl = new JHashedPhoneList(); nit = n.iterator(); pit = p.iterator(); while (nit.hasNext()) jpl.add((Name) nit.next(), (String) pit.next()); System.out.println(Name.getCounter() + " " + jpl.getCounter()); jpl.resetCounter(); Name.resetCounter(); jpl.printSortedList(); System.out.println(Name.getCounter() + " " + jpl.getCounter()); jpl.resetCounter(); Name.resetCounter(); System.out.println(); ipl = new IHashedPhoneList(); nit = n.iterator(); pit = p.iterator(); while (nit.hasNext()) ipl.add((Name) nit.next(), (String) pit.next()); System.out.println(Name.getCounter() + " " + ipl.getCounter()); ipl.resetCounter(); Name.resetCounter(); ipl.printSortedList(); System.out.println(Name.getCounter() + " " + ipl.getCounter()); ipl.resetCounter(); Name.resetCounter(); System.out.println(); System.out.println(); // a second test on a smallish mapping, where the data // arrives in sorted order. ArrayList n2 = new ArrayList(SIZE); ArrayList p2 = new ArrayList(SIZE); for (int i=1; i<=SIZE; i++) { n2.add(new Name(getRandomString(r,"im"), (char) ((int) 'Z' - i) + "ee")); p2.add(getRandomPhoneNumber(r)); } tpl = new TreePhoneList(); nit = n2.iterator(); pit = p2.iterator(); while (nit.hasNext()) tpl.add((Name) nit.next(), (String) pit.next()); System.out.println(Name.getCounter()); Name.resetCounter(); tpl.printSortedList(); System.out.println(Name.getCounter()); Name.resetCounter(); System.out.println(); jpl = new JHashedPhoneList(); nit = n2.iterator(); pit = p2.iterator(); while (nit.hasNext()) jpl.add((Name) nit.next(), (String) pit.next()); System.out.println(Name.getCounter() + " " + jpl.getCounter()); jpl.resetCounter(); Name.resetCounter(); jpl.printSortedList(); System.out.println(Name.getCounter() + " " + jpl.getCounter()); jpl.resetCounter(); Name.resetCounter(); System.out.println(); ipl = new IHashedPhoneList(); nit = n2.iterator(); pit = p2.iterator(); while (nit.hasNext()) ipl.add((Name) nit.next(), (String) pit.next()); System.out.println(Name.getCounter() + " " + ipl.getCounter()); ipl.resetCounter(); Name.resetCounter(); ipl.printSortedList(); System.out.println(Name.getCounter() + " " + ipl.getCounter()); ipl.resetCounter(); Name.resetCounter(); System.out.println(); // a test with a larger mapping, checking for updates n = new ArrayList(SIZE2); p = new ArrayList(SIZE2); for (int i=1; i<=SIZE2; i++) { n.add(new Name(getRandomString(r,"arry"), getRandomString(r,"ay"))); p.add(getRandomPhoneNumber(r)); } tpl = new TreePhoneList(); nit = n.iterator(); pit = p.iterator(); int counter = 0; System.out.print("updates at: "); while (nit.hasNext()) { Object temp = tpl.add((Name) nit.next(), (String) pit.next()); if (temp != null) System.out.print(counter + " "); counter++; } System.out.println(); System.out.println(Name.getCounter()); Name.resetCounter(); System.out.println(tpl.size() + " entries"); jpl = new JHashedPhoneList(); nit = n.iterator(); pit = p.iterator(); counter = 0; System.out.print("updates at: "); while (nit.hasNext()) { Object temp = jpl.add((Name) nit.next(), (String) pit.next()); if (temp != null) System.out.print(counter + " "); counter++; } System.out.println(); System.out.println(jpl.size() + " entries"); ipl = new IHashedPhoneList(); nit = n.iterator(); pit = p.iterator(); counter = 0; System.out.print("updates at: "); while (nit.hasNext()) { Object temp = ipl.add((Name) nit.next(), (String) pit.next()); if (temp != null) System.out.print(counter + " "); counter++; } System.out.println(); System.out.println(ipl.size() + " entries"); } };