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");
}
};