[Jukebox-cvs] CVS update: J4/src/java/gnu/j4/test/unit .cvsignore Http11ChunkedOutputStream.java Lru
Brought to you by:
vtt
User: vt Date: 00/10/24 23:56:49 Added: src/java/gnu/j4/test/unit .cvsignore Http11ChunkedOutputStream.java LruCache.java Makefile.am RWLock.java SemaphoreGroup.java ServerSocket.java ThreadTest.java VectorVsStringSearch.java package.html Log: Moved the files from gnu.j4.examples to gnu.j4.test.unit and gnu.j4.test.integration, where they belong. Also, makeup changes and small fixes. Revision Changes Path 1.1 J4/src/java/gnu/j4/test/unit/.cvsignore CVSWEB Options: ------------------- CVSWeb: Annotate this file: http://cvs.sourceforge.net/cgi-bin/cvsweb.cgi/J4/src/java/gnu/j4/test/unit/.cvsignore?annotate=1.1&cvsroot=jukebox4 CVSWeb: View this file: http://cvs.sourceforge.net/cgi-bin/cvsweb.cgi/J4/src/java/gnu/j4/test/unit/.cvsignore?rev=1.1&content-type=text/x-cvsweb-markup&cvsroot=jukebox4 ----------------------------------- Index: .cvsignore =================================================================== Makefile Makefile.in *.class .deps 1.1 J4/src/java/gnu/j4/test/unit/Http11ChunkedOutputStream.java CVSWEB Options: ------------------- CVSWeb: Annotate this file: http://cvs.sourceforge.net/cgi-bin/cvsweb.cgi/J4/src/java/gnu/j4/test/unit/Http11ChunkedOutputStream.java?annotate=1.1&cvsroot=jukebox4 CVSWeb: View this file: http://cvs.sourceforge.net/cgi-bin/cvsweb.cgi/J4/src/java/gnu/j4/test/unit/Http11ChunkedOutputStream.java?rev=1.1&content-type=text/x-cvsweb-markup&cvsroot=jukebox4 ----------------------------------- Index: Http11ChunkedOutputStream.java =================================================================== package gnu.j4.test.unit; import java.io.PrintWriter; /** * This is a test case for {@link gnu.j4.net.Http11ChunkedOutputStream * Http11ChunkedOutputStream} class. * * @version $Id: Http11ChunkedOutputStream.java,v 1.1 2000/10/25 06:56:48 vt Exp $ */ public class Http11ChunkedOutputStream { public static void main(String args[]) { System.out.println("-------------8<-----------"); gnu.j4.net.Http11ChunkedOutputStream cout = new gnu.j4.net.Http11ChunkedOutputStream(System.out); PrintWriter pw = new PrintWriter(cout); pw.println("Before this line you must see the chunk header."); pw.print("This is just some random text to see how good the chunk works. "); pw.print("This is just a sentence to add some more words to the output. "); pw.println("This is a last sentence in the second paragraph."); pw.flush(); pw.flush(); // to make sure the double flush doesn't close the stream pw.println("One more paragraph with the chunk header above it."); pw.println("This should be the last sentence, with CRLF 0 CRLF below it."); pw.close(); System.out.println("-------------8<-----------"); } } 1.1 J4/src/java/gnu/j4/test/unit/LruCache.java CVSWEB Options: ------------------- CVSWeb: Annotate this file: http://cvs.sourceforge.net/cgi-bin/cvsweb.cgi/J4/src/java/gnu/j4/test/unit/LruCache.java?annotate=1.1&cvsroot=jukebox4 CVSWeb: View this file: http://cvs.sourceforge.net/cgi-bin/cvsweb.cgi/J4/src/java/gnu/j4/test/unit/LruCache.java?rev=1.1&content-type=text/x-cvsweb-markup&cvsroot=jukebox4 ----------------------------------- Index: LruCache.java =================================================================== package gnu.j4.test.unit; import java.util.Random; import gnu.j4.core.Logger; import gnu.j4.service.ActiveService; import gnu.j4.cache.*; /** * Test for {@link gnu.j4.cache.LruCache LRU Cache}. * * @author Copyright © <a href="mailto:vt...@fr...">Vadim Tkachenko</a> 1999 * @version $Id: LruCache.java,v 1.1 2000/10/25 06:56:48 vt Exp $ */ public class LruCache extends ActiveService { protected static final int BUFSIZE = 50; protected static final int CACHESIZE = 10; protected Cacheable target[]; protected Object key[]; protected gnu.j4.cache.LruCache cache = new gnu.j4.cache.LruCache(CACHESIZE); protected Random R = new Random(); protected int hits = 0; protected int misses = 0; /** * Log facility to use for this class. */ public static final String CH_CT = "LRU"; /** * Create a bunch of objects and populate the test array, along with the * key array. * * @return true * @exception InterruptedException if this thread was interrupted by * another thread. */ protected void startup() throws InterruptedException { target = new Cacheable[BUFSIZE]; key = new Object[BUFSIZE]; for ( int idx = 0; idx < BUFSIZE; idx++ ) { Cacheable c = new CString("Entry #", idx); target[idx] = c; key[idx] = c.getCacheKey(); } } /** * Hit the cache randomly. * * @return true * @exception InterruptedException if this thread was interrupted by * another thread. */ protected void execute() throws InterruptedException { for ( int idx = 0; idx < BUFSIZE * 10; idx++ ) { put(random()); get(random()); } } protected void put(int idx) { complain(LOG_INFO, CH_CT, "put " + target[idx]); cache.put(target[idx]); } protected void get(int idx) { complain(LOG_INFO, CH_CT, "get " + target[idx]); if ( cache.get(key[idx]) == null ) { misses++; } else { hits++; } } protected int random() { int r = R.nextInt(); if ( r < 0 ) { r = -r; } return (r % BUFSIZE); } /** * Report the results. * * @return true * @exception InterruptedException if this thread was interrupted by * another thread. */ protected void shutdown() throws InterruptedException { int total = hits + misses; double pHits = (((double)hits)/((double)total))*100; double pMisses = (((double)misses)/((double)total))*100; complain(LOG_NOTICE, CH_CT, "Hits: " + hits + "(" + pHits + "%)"); complain(LOG_NOTICE, CH_CT, "Misses: " + misses + "(" + pMisses + "%)"); } protected class CString implements Cacheable { protected String s; protected Integer key; CString(String s, int idx) { this.s = s + ":" + idx; key = new Integer(idx); } public Object getCacheKey() { return key; } public String toString() { return s; } } } 1.1 J4/src/java/gnu/j4/test/unit/Makefile.am CVSWEB Options: ------------------- CVSWeb: Annotate this file: http://cvs.sourceforge.net/cgi-bin/cvsweb.cgi/J4/src/java/gnu/j4/test/unit/Makefile.am?annotate=1.1&cvsroot=jukebox4 CVSWeb: View this file: http://cvs.sourceforge.net/cgi-bin/cvsweb.cgi/J4/src/java/gnu/j4/test/unit/Makefile.am?rev=1.1&content-type=text/x-cvsweb-markup&cvsroot=jukebox4 ----------------------------------- Index: Makefile.am =================================================================== # $Id: Makefile.am,v 1.1 2000/10/25 06:56:48 vt Exp $ EXTRA_DIST = package.html noinst_PROGRAMS = package package_SOURCES = Http11ChunkedOutputStream.java \ LruCache.java \ RWLock.java \ SemaphoreGroup.java \ ServerSocket.java \ ThreadTest.java \ VectorVsStringSearch.java ECHO = @ECHO@ JAVACX = @JAVACX@ RM = @RM@ SUFFIXES = .java .class .java.class: - @ ${ECHO} "Making $<" @ ${JAVACX} $< package: $(package_OBJECTS) $(package_DEPENDENCIES) clean-compile: ${RM} -f *.class clean-generic: ${RM} -f *~ .*~ 1.1 J4/src/java/gnu/j4/test/unit/RWLock.java CVSWEB Options: ------------------- CVSWeb: Annotate this file: http://cvs.sourceforge.net/cgi-bin/cvsweb.cgi/J4/src/java/gnu/j4/test/unit/RWLock.java?annotate=1.1&cvsroot=jukebox4 CVSWeb: View this file: http://cvs.sourceforge.net/cgi-bin/cvsweb.cgi/J4/src/java/gnu/j4/test/unit/RWLock.java?rev=1.1&content-type=text/x-cvsweb-markup&cvsroot=jukebox4 ----------------------------------- Index: RWLock.java =================================================================== package gnu.j4.test.unit; import java.util.Random; import gnu.j4.core.ANSI; import gnu.j4.service.ActiveService; /** * {@link gnu.j4.sem.RWLock Multiple readers, single writer} test case. * * @author Copyright © <a href="mailto:vt...@fr...">Vadim Tkachenko</a> 2000 * @version $Id: RWLock.java,v 1.1 2000/10/25 06:56:48 vt Exp $ */ public class RWLock extends ActiveService { protected gnu.j4.sem.RWLock lock = new gnu.j4.sem.RWLock(); protected Random R = new Random(); /** * Create the test instance. */ public RWLock() { } /** * @exception InterruptedException if this thread was interrupted by * another thread. */ protected void startup() throws InterruptedException, Throwable { for ( int r = 0; r < 10; r++ ) { Consumer c = new Reader(r); c.start(); addDependant(c); } for ( int w = 0; w < 2; w++ ) { Consumer c = new Writer(w); c.start(); addDependant(c); } } protected void execute() throws InterruptedException { Thread.sleep(180000); } protected void shutdown() throws InterruptedException { complain(LOG_INFO, "RWLock", "Shut down."); } /** */ abstract class Consumer extends ActiveService { int id; Object theLock; Consumer(int id) { this.id = id; } /** * Do nothing. * * @return true. */ protected void startup() throws InterruptedException { } /** * Request the lock once in a while, hold it for a while, release it * and do it again until stopped. * * The kind of lock (read or write) is defined by {@link #getLock * getLock} implementation. */ protected void execute() throws Throwable { while ( isEnabled() ) { Thread.sleep(R.nextInt(3000)); complain(LOG_NOTICE, getChannel(), "[" + id + "] " + getColor() + "Waiting for the lock"); getLock(); complain(LOG_NOTICE, getChannel(), "[" + id + "] " + getColor() + "Got the lock"); Thread.sleep(R.nextInt(3000)); lock.release(theLock); complain(LOG_NOTICE, getChannel(), "[" + id + "] " + getColor() + "Released the lock"); } } /** * Complain. * * @return true. */ protected void shutdown() throws InterruptedException { complain(LOG_INFO, "Consumer", "[" + id + "] Shut down."); } abstract void getLock() throws InterruptedException; abstract String getChannel(); abstract String getColor(); } protected class Reader extends Consumer { Reader(int id) { super(id); } void getLock() throws InterruptedException { theLock = lock.getReadLock(); } String getChannel() { return "READER"; } String getColor() { return ANSI.green.toString(); } } protected class Writer extends Consumer { Writer(int id) { super(id); } void getLock() throws InterruptedException { theLock = lock.getWriteLock(); } String getChannel() { return "WRITER"; } String getColor() { return ANSI.red.toString(); } } } 1.1 J4/src/java/gnu/j4/test/unit/SemaphoreGroup.java CVSWEB Options: ------------------- CVSWeb: Annotate this file: http://cvs.sourceforge.net/cgi-bin/cvsweb.cgi/J4/src/java/gnu/j4/test/unit/SemaphoreGroup.java?annotate=1.1&cvsroot=jukebox4 CVSWeb: View this file: http://cvs.sourceforge.net/cgi-bin/cvsweb.cgi/J4/src/java/gnu/j4/test/unit/SemaphoreGroup.java?rev=1.1&content-type=text/x-cvsweb-markup&cvsroot=jukebox4 ----------------------------------- Index: SemaphoreGroup.java =================================================================== package gnu.j4.test.unit; import java.util.Hashtable; import gnu.j4.core.ANSI; import gnu.j4.service.ActiveService; import gnu.j4.service.PassiveService; import gnu.j4.service.Service; import gnu.j4.service.ServiceUnavailableException; import gnu.j4.sem.*; import gnu.j4.util.*; /** * This class implements a test of {@link gnu.j4.sem.SemaphoreGroup * SemaphoreGroup} class. * * <p> * * To understand what is really happening, pay attention to the object * identifiers in the log messages, and analyze the source code. * * <p> * * <h3>Known bugs</h3> * * Doesn't exit to the operating system after completion. But, since this is * a test anyway, it doesn't matter, though annoying. * * <pre> * $Log: SemaphoreGroup.java,v $ * Revision 1.1 2000/10/25 06:56:48 vt * Moved the files from gnu.j4.examples to gnu.j4.test.unit and * gnu.j4.test.integration, where they belong. * * Also, makeup changes and small fixes. * * Revision 1.11 2000/03/03 04:20:16 vt * Boom! Version bump. Finally happened, now it's time to recheck everything. * See details in ${srcdir}/ChangeLog. * * Revision 1.10.6.1 2000/03/02 06:30:55 vt * This commit was supposed to take care of the replacement of * * protected boolean XXX() throws InterruptedException * * with * * protected void XXX() throws InterruptedException, Throwable * * where XXX is (startup|execute|shutdown) in gnu.j4.PassiveService and all the * derived classes. * * Hopefully, it's over now - I've just replaced all the invocations in the * classes that are being compiled with the current configuration - that is, * lazy replacement. Where the logic changes were due, they were made. Now, * *that* wasn't exactly lazy ;/ * * Nevertheless, the extensive verification is on the way. * * Revision 1.10 1999/09/16 07:15:04 vt * Fixed a very annoying bug in the SemaphoreGroup.waitFor(*). Turned out to be * an Enumeration broken by the source Vector modification. Check out * SemaphoreGroup#checkBehind method. * * As a side effect, quite a few makeups, plus the 'known bugs' document. * * </pre> * @author <a href="mailto:vt...@fr...">Vadim Tkachenko</a> * @version $Id: SemaphoreGroup.java,v 1.1 2000/10/25 06:56:48 vt Exp $ */ public class SemaphoreGroup extends PassiveService implements TimerClient { /** * Log facility to use with this class. */ public static final String LOG_SGT = "SemaphoreGroup"; EventSemaphore EventSemaphore_A; EventSemaphore EventSemaphore_B; EventSemaphore EventSemaphore_C; TimerCallbackID timerCallback_A; TimerCallbackID timerCallback_B; TimerCallbackID timerCallback_C; /** * Callback to semaphore lookup table. */ Hashtable lookup; /** * Sequence number. * * Increments with every callback received, until reaches {@link #limit * limit}. Then the service stops. */ public int sequence = 0; /** * Number of repetitions. * * Hardcoded to 50. */ public final static int limit = 50; /** * Constructor. * <p> * Create three semaphores to add them to the group later. * @see gnu.j4.sem.EventSemaphore */ public SemaphoreGroup() { EventSemaphore_A = new EventSemaphore( this,"A" ); EventSemaphore_B = new EventSemaphore( this,"B" ); EventSemaphore_C = new EventSemaphore( this,"C" ); } /** * Startup. * <p> * Create and launch: * <ul> * <li>Semaphore trigger thread * <li>Thread to test {@link gnu.j4.sem.SemaphoreGroup#waitForOne waitForOne()} * <li>Thread to test {@link gnu.j4.sem.SemaphoreGroup#waitForAll waitForAll()} * @return true if all threads were launched successfully. * @exception InterruptedException if this thread was interrupted by * another thread. */ protected void startup() throws InterruptedException, Throwable { WaitForOne one = new WaitForOne( this ); WaitForAll all = new WaitForAll( this ); try { if ( !one.start().waitFor() ) { throw new ServiceUnavailableException("WaitForOne failed to start"); } } catch ( InterruptedException iex ) { complain( LOG_ERR,LOG_SGT,iex.toString()+" waiting for one-test" ); } try { if ( !all.start().waitFor() ) { throw new ServiceUnavailableException("WaitForAll failed to start"); } } catch ( InterruptedException iex ) { complain( LOG_ERR,LOG_SGT,iex.toString()+" waiting for all-test" ); } timerCallback_A = TimerCallback.start( this,(int)(Math.random() * 5000) ); timerCallback_B = TimerCallback.start( this,(int)(Math.random() * 5000) ); timerCallback_C = TimerCallback.start( this,(int)(Math.random() * 5000) ); lookup = new Hashtable(); lookup.put( timerCallback_A,EventSemaphore_A ); lookup.put( timerCallback_B,EventSemaphore_B ); lookup.put( timerCallback_C,EventSemaphore_C ); } /** * Process the timer callback. * * Look up the semaphore by callback and trigger it with a random value. * @param cb Timer callback identifier object. */ public synchronized void timerCallback( TimerCallbackID cb ) { complain( LOG_NOTICE,LOG_SGT,"Sequence: "+sequence ); if ( sequence++ > limit ) { stop(); } try { ((EventSemaphore)lookup.get( cb )).trigger( (Math.random()<0.5)?false:true ); } catch ( ClassCastException ccex ) { complain( LOG_WARNING,LOG_SGT,"unexpected callback: "+cb.toString(),ccex ); } catch ( NullPointerException npex ) { complain( LOG_WARNING,LOG_SGT,"unexpected callback: "+cb.toString(),npex ); } } /** * Stop the callbacks. * * @return <code>true</code>. * @exception InterruptedException if this thread was interrupted by * another thread. */ protected void shutdown() throws InterruptedException { complain( LOG_INFO,LOG_SGT,"stopping callback: "+timerCallback_A.toString() ); TimerCallback.stopCallback( timerCallback_A ); timerCallback_A = null; complain( LOG_INFO,LOG_SGT,"stopping callback: "+timerCallback_B.toString() ); TimerCallback.stopCallback( timerCallback_B ); timerCallback_B = null; complain( LOG_INFO,LOG_SGT,"stopping callback: "+timerCallback_C.toString() ); TimerCallback.stopCallback( timerCallback_C ); timerCallback_C = null; } /** * This class is actually a semaphore group holder. */ abstract class WaitFor extends ActiveService { /** * Group including all parent's semaphores. */ public gnu.j4.sem.SemaphoreGroup group; /** * Create new instance and add the parent's semaphores to the {@link * #group group}. * @parent Parent service. */ public WaitFor( SemaphoreGroup parent ) { parent.addDependant( this ); group = new gnu.j4.sem.SemaphoreGroup(); group.add( parent.EventSemaphore_A ); group.add( parent.EventSemaphore_B ); group.add( parent.EventSemaphore_C ); } /** * Do nothing. * * @return true. */ protected void startup() throws InterruptedException { } /** * Do nothing. * * @return true. */ protected void shutdown() throws InterruptedException { } } /** * This class' {@link #execute execute} method repeatedly invokes the * {@link gnu.j4.sem.SemaphoreGroup#waitForOne() * SemaphoreGroup.waitForOne()} method on the {@link #group group}, * until terminated. */ class WaitForOne extends WaitFor { /** * @deprecated * @see SemaphoreGroup.WaitForOne */ public WaitForOne( SemaphoreGroup parent ) { super( parent ); } /** * Keep waiting for the semaphore group and complaining about the * status. * * @exception InterruptedException if the thread was interrupted by * another thread. */ public void execute() throws InterruptedException { while ( isEnabled() ) { complain( LOG_NOTICE,LOG_SGT,ANSI.green+"got " + group.waitForOne().toString()+ANSI.white ); } } } /** * This class' {@link #execute execute} method repeatedly invokes the * {@link gnu.j4.sem.SemaphoreGroup#waitForAll() * SemaphoreGroup.waitForAll()} method on the {@link #group group}, * until terminated. */ class WaitForAll extends WaitFor { public WaitForAll( SemaphoreGroup parent ) { super( parent ); } /** * Keep waiting for the semaphore group and complaining about the * status. * * @exception InterruptedException if the thread was interrupted by * another thread. */ public void execute() throws InterruptedException { while ( isEnabled() ) { complain( LOG_NOTICE,LOG_SGT,ANSI.yellow+"got " + group.waitForAll(true)+ANSI.white ); } } } } 1.1 J4/src/java/gnu/j4/test/unit/ServerSocket.java CVSWEB Options: ------------------- CVSWeb: Annotate this file: http://cvs.sourceforge.net/cgi-bin/cvsweb.cgi/J4/src/java/gnu/j4/test/unit/ServerSocket.java?annotate=1.1&cvsroot=jukebox4 CVSWeb: View this file: http://cvs.sourceforge.net/cgi-bin/cvsweb.cgi/J4/src/java/gnu/j4/test/unit/ServerSocket.java?rev=1.1&content-type=text/x-cvsweb-markup&cvsroot=jukebox4 ----------------------------------- Index: ServerSocket.java =================================================================== package gnu.j4.test.unit; import gnu.j4.sem.SemaphoreTimedOutException; import gnu.j4.service.ActiveService; import gnu.j4.service.ServiceUnavailableException; import gnu.j4.framework.server.net.SocketAcceptor; /** * A unit test for the bug related to <code>ServerSocket.accept()</code> * call on Linux. * * Fortunately, seems to have disappeared in either JDK 1.2 or JDK 1.3, so * this test is going to pass, unless you have a really old or weird JVM. * * @author Copyright © <a href="mailto:vt...@fr...">Vadim Tkachenko</a> 1995-2000 * @version $Id: ServerSocket.java,v 1.1 2000/10/25 06:56:48 vt Exp $ */ public class ServerSocket extends ActiveService { public static final String LOG_SST = "ServerSocketBug"; SocketAcceptor acceptor; protected void startup() throws InterruptedException, Throwable { acceptor = new SocketAcceptor(4999); if ( !acceptor.start().waitFor() ) { throw new ServiceUnavailableException("Socket acceptor failed to start"); } addDependant(acceptor); } protected void execute() throws InterruptedException { if ( System.getProperty("os.name").equals("Linux") ) { complain(LOG_WARNING, LOG_SST, "Prepare for the worst..."); } complain(LOG_NOTICE, LOG_SST, "Sleeping for 10 seconds..."); Thread.sleep(10000); complain(LOG_NOTICE, LOG_SST, "Trying to interrupt the acceptor..."); try { if ( !acceptor.stop().waitFor(2000) ) { complain(LOG_WARNING, LOG_SST, "Oh well. Can't stop it, it is not safe to use the socket connector on this platform."); } else { complain(LOG_NOTICE, LOG_SST, "Passed."); removeDependant(acceptor); } } catch ( SemaphoreTimedOutException stex ) { complain(LOG_WARNING, LOG_SST, "Timed out waiting 2 seconds for the acceptor to stop: " + stex.getMessage()); } } protected void shutdown() throws InterruptedException { if ( acceptor.isActive() ) { complain(LOG_NOTICE, LOG_SST, "Oops, the bug is here. You should press Ctrl-C now, we're hung."); } } } 1.1 J4/src/java/gnu/j4/test/unit/ThreadTest.java CVSWEB Options: ------------------- CVSWeb: Annotate this file: http://cvs.sourceforge.net/cgi-bin/cvsweb.cgi/J4/src/java/gnu/j4/test/unit/ThreadTest.java?annotate=1.1&cvsroot=jukebox4 CVSWeb: View this file: http://cvs.sourceforge.net/cgi-bin/cvsweb.cgi/J4/src/java/gnu/j4/test/unit/ThreadTest.java?rev=1.1&content-type=text/x-cvsweb-markup&cvsroot=jukebox4 ----------------------------------- Index: ThreadTest.java =================================================================== package gnu.j4.test.unit; import gnu.j4.service.ActiveService; import gnu.j4.util.DataSequence; /** * Stress test for the number of threads that can be launched. * * @since Jukebox 3 * @author Copyright © <a href="mailto:vt...@fr...">Vadim Tkachenko</a> 1005-1998 * @version $Id: ThreadTest.java,v 1.1 2000/10/25 06:56:48 vt Exp $ */ public class ThreadTest extends ActiveService { static public final int startDelay = 100; static int totalThreads = 0; static DataSequence register = new DataSequence(); protected long ctime = System.currentTimeMillis(); public ThreadTest() { } protected void startup() throws InterruptedException { } protected void shutdown() throws InterruptedException { } protected void execute() throws InterruptedException { Thread.sleep( startDelay ); (new ThreadTest()).start(); long lag = (System.currentTimeMillis() - ctime) - startDelay; register.add( lag ); complain(LOG_NOTICE, "ThreadTest", "running/" + (++totalThreads) + " lag " + lag + " " + register.toString()); // flushLog(); while ( isEnabled() ) { Thread.sleep( 1000 ); // complain( Log.DEBUG,"active" ); } } } 1.1 J4/src/java/gnu/j4/test/unit/VectorVsStringSearch.java CVSWEB Options: ------------------- CVSWeb: Annotate this file: http://cvs.sourceforge.net/cgi-bin/cvsweb.cgi/J4/src/java/gnu/j4/test/unit/VectorVsStringSearch.java?annotate=1.1&cvsroot=jukebox4 CVSWeb: View this file: http://cvs.sourceforge.net/cgi-bin/cvsweb.cgi/J4/src/java/gnu/j4/test/unit/VectorVsStringSearch.java?rev=1.1&content-type=text/x-cvsweb-markup&cvsroot=jukebox4 ----------------------------------- Index: VectorVsStringSearch.java =================================================================== package gnu.j4.test.unit; import java.util.Enumeration; import java.util.Vector; import gnu.j4.core.LogAware; public class VectorVsStringSearch extends LogAware { public static final int COUNT = 10000; public static void main(String args[]) { (new VectorVsStringSearch()).run(); } public void run() { Vector v = new Vector(); v.addElement( "This is a sentence number 01" ); v.addElement( "This is a sentence number 02" ); v.addElement( "This is a sentence number 03" ); v.addElement( "This is a sentence number 04" ); v.addElement( "This is a sentence number 05" ); v.addElement( "This is a sentence number 06" ); v.addElement( "This is a sentence number 07" ); v.addElement( "This is a sentence number 08" ); v.addElement( "This is a sentence number 09" ); v.addElement( "This is a sentence number 10" ); v.addElement( "This is a sentence number 11" ); v.addElement( "This is a sentence number 12" ); v.addElement( "This is a sentence number 13" ); v.addElement( "This is a sentence number 14" ); v.addElement( "This is a sentence number 15" ); v.addElement( "This is a sentence number 16" ); v.addElement( "This is a sentence number 17" ); v.addElement( "This is a sentence number 18" ); v.addElement( "This is a sentence number 19" ); v.addElement( "This is a sentence number 20" ); String summary = ""; for ( Enumeration e = v.elements(); e.hasMoreElements(); ) { summary += " " + e.nextElement().toString(); } long start1 = System.currentTimeMillis(); int found = 0; String match = v.elementAt( 19 ).toString(); for ( int idx = 0; idx < COUNT; idx++ ) { found = v.indexOf(match); } long stop1 = System.currentTimeMillis(), start2 = stop1; for ( int idx = 0; idx < COUNT; idx++ ) { found = summary.indexOf(match); } long stop2 = System.currentTimeMillis(), span1 = stop1-start1, span2 = stop2 -start2; double dspan1 = (double)span1/1000L, dspan2 = (double)span2/1000L; complain(LOG_NOTICE, "vector", Long.toString(span1) + "(" + (dspan1/(double)COUNT) + "/sec)"); complain(LOG_NOTICE, "string", Long.toString(span2) + "(" + (dspan2/(double)COUNT) + "/sec)"); gnu.j4.core.Logger.close(); } } 1.1 J4/src/java/gnu/j4/test/unit/package.html CVSWEB Options: ------------------- CVSWeb: Annotate this file: http://cvs.sourceforge.net/cgi-bin/cvsweb.cgi/J4/src/java/gnu/j4/test/unit/package.html?annotate=1.1&cvsroot=jukebox4 CVSWeb: View this file: http://cvs.sourceforge.net/cgi-bin/cvsweb.cgi/J4/src/java/gnu/j4/test/unit/package.html?rev=1.1&content-type=text/x-cvsweb-markup&cvsroot=jukebox4 ----------------------------------- Index: package.html =================================================================== <body> This package contains the unit tests for the different Jukebox components. </body> |