/* * SimpleTester.java * Copyright (C) 2006 Amin Ahmad * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ package org.ahmadsoft.postal.test; import java.io.DataInputStream; import java.io.File; import java.util.Iterator; import java.util.List; import org.ahmadsoft.postal.DiskStrategy; import org.ahmadsoft.postal.InMemoryStrategy; import org.ahmadsoft.postal.PostalCodeConstants; import org.ahmadsoft.postal.PostalCodeEntry; import org.ahmadsoft.postal.PostalRetrievalStrategy; import org.ahmadsoft.postal.ReadOnceStrategy; import org.ahmadsoft.postal.USPostalCodeService; import org.ahmadsoft.postal.USPostalCodeService.MatchResult; public class SimpleTester { /** * @param args */ public static void main(String[] args) throws Exception { if (args.length != 2) { System.err.println("Usage: SimpleTester indexFile dataFile"); System.exit(1); } System.out.println( "Note: If you are running Java 5 or above, you can improve\n" + "the method timing by replacing calls to currentTimeMillis\n" + "with calls to nanoTime.\n\n" ); System.out.println( "*******************************************************\n" + "* Initialization *\n" + "*******************************************************\n" ); runGC(); long m1 = usedMemory(); long a= System.currentTimeMillis(); File indexFile = new File(args[0]); //"f:/temp/uspc.index"); File dataFile = new File(args[1]); //"f:/temp/uspc.data"); PostalRetrievalStrategy retrievalStrategy = null; retrievalStrategy = new DiskStrategy(); retrievalStrategy = new InMemoryStrategy(); retrievalStrategy = new ReadOnceStrategy(); retrievalStrategy.initialize(indexFile, dataFile); USPostalCodeService uspcs = new USPostalCodeService(); uspcs.initialize(retrievalStrategy); long b= System.currentTimeMillis(); long m2 = usedMemory(); System.out.println(); System.out.println("initialization (time): " + (b-a) + " ms"); System.out.println("initialization (memory): " + (m2 - m1) + " bytes"); System.out.println( "\n" + "*******************************************************\n" + "* Examples *\n" + "*******************************************************\n" ); boolean validState; List results; System.out.println("Match Rancho Park, OK against 90064 with default options."); validState = uspcs.isPostalCodeIn(90064, "OK"); System.out.println(" USPostalCodeService.isPostalCodeIn(90064, \"OK\") = " + validState); if (validState) { results = uspcs.match("Rancho Park", 90064); System.out.println(" Found " + results.size() + " results:"); for (Iterator i=results.iterator(); i.hasNext();) { MatchResult result = (MatchResult) i.next(); System.out.println(" " + result); } System.out.println(" "); System.out.println(" Preferred for 90064 is " + uspcs.getActualFor(90064)); } System.out.println("Match Rancho Park, CA against 90064 with default options."); validState = uspcs.isPostalCodeIn(90064, "CA"); System.out.println(" USPostalCodeService.isPostalCodeIn(90064, \"CA\") = " + validState); if (validState) { results = uspcs.match("Rancho Park", 90064); System.out.println(" Found " + results.size() + " results:"); for (Iterator i=results.iterator(); i.hasNext();) { MatchResult result = (MatchResult) i.next(); System.out.println(" " + result); } System.out.println(" "); System.out.println(" Preferred for 90064 is " + uspcs.getActualFor(90064)); } System.out.println("Match Ranchow Parc, CA against 90064 with default options."); validState = uspcs.isPostalCodeIn(90064, "CA"); System.out.println(" USPostalCodeService.isPostalCodeIn(90064, \"CA\") = " + validState); if (validState) { results = uspcs.match("Ranchow Parc", 90064); System.out.println(" Found " + results.size() + " results:"); for (Iterator i=results.iterator(); i.hasNext();) { MatchResult result = (MatchResult) i.next(); System.out.println(" " + result); } System.out.println(" "); System.out.println(" Preferred for 90064 is " + uspcs.getActualFor(90064)); } System.out.println("Match Los Angeles, CA against 90064 with default options."); validState = uspcs.isPostalCodeIn(90064, "CA"); System.out.println(" USPostalCodeService.isPostalCodeIn(90064, \"CA\") = " + validState); if (validState) { results = uspcs.match("Los Angeles", 90064); System.out.println(" Found " + results.size() + " results:"); for (Iterator i=results.iterator(); i.hasNext();) { MatchResult result = (MatchResult) i.next(); System.out.println(" " + result); } System.out.println(" "); System.out.println(" Preferred for 90064 is " + uspcs.getActualFor(90064)); } System.out.println("Match Urb Montesol, PR against 00623 with default options."); validState = uspcs.isPostalCodeIn(623, "PR"); System.out.println(" USPostalCodeService.isPostalCodeIn(00623, \"PR\") = " + validState); if (validState) { results = uspcs.match("Urb Montesol", 623); System.out.println(" Found " + results.size() + " results:"); for (Iterator i=results.iterator(); i.hasNext();) { MatchResult result = (MatchResult) i.next(); System.out.println(" " + result); } System.out.println(" "); System.out.println(" Preferred for 00623 is " + uspcs.getActualFor(623)); } System.out.println("Match Urb Moraltesol, PR against 00623 with match level of unacceptable."); validState = uspcs.isPostalCodeIn(623, "PR"); System.out.println(" USPostalCodeService.isPostalCodeIn(00623, \"PR\") = " + validState); if (validState) { results = uspcs.match("Urb Moraltesol", 623, new USPostalCodeService.MatchOptions(true, true, false, PostalCodeConstants.CITY_UNACCEPTABLE)); System.out.println(" Found " + results.size() + " results:"); for (Iterator i=results.iterator(); i.hasNext();) { MatchResult result = (MatchResult) i.next(); System.out.println(" " + result); } System.out.println(" "); System.out.println(" Preferred for 00623 is " + uspcs.getActualFor(623)); } System.out.println( "\n" + "*******************************************************\n" + "* Interactive (-1 Quits) *\n" + "*******************************************************\n" ); DataInputStream in2 = new DataInputStream(System.in); int input=-1; do { System.out.print("Enter postal code: "); input = Integer.parseInt(in2.readLine()); long t1 = System.currentTimeMillis(); List pcs = uspcs.getCandidates(input); long t2 = System.currentTimeMillis(); for (Iterator i=pcs.iterator(); i.hasNext();) { PostalCodeEntry z = (PostalCodeEntry) i.next(); System.out.println(z.getCity() + ", " + z.getState() + ", " + PostalCodeConstants.toString(z.getEntryType())); } System.out.println("lookup (time): " + (t2-t1) + " ms"); } while (input != -1); uspcs.dispose(); retrievalStrategy.dispose(); } private static void runGC () throws Exception { // It helps to call Runtime.gc() // using several method calls: for (int r = 0; r < 4; ++ r) _runGC (); } private static void _runGC () throws Exception { long usedMem1 = usedMemory (), usedMem2 = Long.MAX_VALUE; for (int i = 0; (usedMem1 < usedMem2) && (i < 500); ++ i) { s_runtime.runFinalization (); s_runtime.gc (); Thread.currentThread ().yield (); usedMem2 = usedMem1; usedMem1 = usedMemory (); } } private static long usedMemory () { return s_runtime.totalMemory () - s_runtime.freeMemory (); } private static final Runtime s_runtime = Runtime.getRuntime (); }