import java.io.*; import java.util.*; public class HashSetTester { public static void main(String[] args) throws Exception { double mainStartTime = System.currentTimeMillis(); if (args.length < 2) die("usage: java HashTester "); String infileName = args[0]; int numOfBuckets = Integer.parseInt(args[1]); MyHashSet hset = new MyHashSet( numOfBuckets ); // BufferedReader infile = new BufferedReader(new FileReader(infileName)); double startTime = System.currentTimeMillis(); boolean AllAddsSucceed = true; // they SHOULD all succeed while (infile.ready()) { if ( !hset.add(infile.readLine()) ) AllAddsSucceed = false; // THIS IS BAD! } infile.close(); infile = new BufferedReader(new FileReader(infileName)); boolean AllAddsFail = true; // they SHOULD all fail while (infile.ready()) if ( hset.add(infile.readLine()) ) AllAddsFail = false; // THIS IS BAD! infile.close(); double stopTime = System.currentTimeMillis(); System.out.println("AllAddsSucceed: " + AllAddsSucceed); // SHOULD PRINT TRUE System.out.println("AllAddsFail: " + AllAddsFail); // SHOULD PRINT TRUE System.out.format( "Runtime: %1.5f sec.\n", (stopTime-startTime) / 1000.0D ); // NOW DO REMOVES // ALL THESE SHOULD SUCCEED startTime = System.currentTimeMillis(); boolean AllRemovesSucceed = true; // they SHOULD all succeed infile = new BufferedReader(new FileReader(infileName)); while (infile.ready()) { if ( !hset.remove(infile.readLine()) ) AllRemovesSucceed = false; // THIS IS BAD! } infile.close(); // RUN IT AGAIN BUT NOW THESE SHOULD ALL FAIL (WE JUST REMOVED THEM ALL) infile = new BufferedReader(new FileReader(infileName)); boolean AllRemovesFail = true; while (infile.ready()) if ( hset.remove(infile.readLine()) ) AllRemovesFail = false; // THIS IS BAD! infile.close(); stopTime = System.currentTimeMillis(); System.out.println("AllRemovesSucceed: " + AllRemovesSucceed); // SHOULD PRINT TRUE System.out.println("AllRemovesFail: " + AllRemovesFail); // SHOULD PRINT TRU System.out.format( "Runtime: %1.5f sec.\n", (stopTime-startTime) / 1000.0D ); double mainStopTime = System.currentTimeMillis(); System.out.format( "OVERALL Runtime: %1.5f sec.\n", (mainStopTime-mainStartTime) / 1000.0D ); } static void die(String errMsg) { System.out.println(errMsg); System.exit(0); } }