/* * This code is distributed under The GNU Lesser General Public License (LGPLv3) * Please visit GNU site for LGPLv3 http://www.gnu.org/copyleft/lesser.html * * Copyright Denis Pavlov 2009 * Web: http://www.genericdtoassembler.org * SVN: https://svn.code.sf.net/p/geda-genericdto/code/trunk/ * SVN (mirror): http://geda-genericdto.googlecode.com/svn/trunk/ */ package com.inspiresoftware.lib.dto.geda.performance; import org.junit.Test; import java.util.HashMap; import java.util.Map; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; /** * Performance testing and multi-threading testing. * * @author DPavlov */ public class RunGeDARunTest { /** * Executors shutdown listener. */ private class ExecutorListener implements ShutdownListener { private static final int SLEEP = 1000; private final ExecutorService service; private final Map<Object, Boolean> observables = new HashMap<Object, Boolean>(); private boolean keepAlive = true; public void keepAlive() throws InterruptedException { while (keepAlive) { Thread.sleep(SLEEP); } } public ExecutorListener(final ExecutorService service) { this.service = service; } public synchronized void addObservable(final Object object) { this.observables.put(object, Boolean.FALSE); } public synchronized void notifyFinished(final Object object) { System.out.println(object.toString()); this.observables.put(object, Boolean.TRUE); for (Boolean isFinished : observables.values()) { if (!isFinished) { return; } } service.shutdown(); keepAlive = false; } } @Test public void test1Thread1TaskLevel3() throws InterruptedException { final int numThreads = 1; final ExecutorService exec = Executors.newFixedThreadPool(numThreads); final ExecutorListener listener = new ExecutorListener(exec); final Runnable task = new PerformanceTestLevel3Thread(50000, listener); exec.execute(task); listener.keepAlive(); } @Test public void test2Threads2TasksLevel3() throws InterruptedException { final int numThreads = 2; final ExecutorService exec = Executors.newFixedThreadPool(numThreads); final ExecutorListener listener = new ExecutorListener(exec); final Runnable task1 = new PerformanceTestLevel3Thread(25000, listener); final Runnable task2 = new PerformanceTestLevel3Thread(25000, listener); exec.execute(task1); exec.execute(task2); listener.keepAlive(); } @Test public void test5Threads5TasksLevel3() throws InterruptedException { final int numThreads = 5; final ExecutorService exec = Executors.newFixedThreadPool(numThreads); final ExecutorListener listener = new ExecutorListener(exec); final Runnable task1 = new PerformanceTestLevel3Thread(10000, listener); final Runnable task2 = new PerformanceTestLevel3Thread(10000, listener); final Runnable task3 = new PerformanceTestLevel3Thread(10000, listener); final Runnable task4 = new PerformanceTestLevel3Thread(10000, listener); final Runnable task5 = new PerformanceTestLevel3Thread(10000, listener); exec.execute(task1); exec.execute(task2); exec.execute(task3); exec.execute(task4); exec.execute(task5); listener.keepAlive(); } @Test public void test1Thread1TaskLevel1() throws InterruptedException { final int numThreads = 1; final ExecutorService exec = Executors.newFixedThreadPool(numThreads); final ExecutorListener listener = new ExecutorListener(exec); final Runnable task = new PerformanceTestLevel1Thread(25, 35, listener); exec.execute(task); listener.keepAlive(); } @Test public void test2Threads2TasksLevel1() throws InterruptedException { final int numThreads = 2; final ExecutorService exec = Executors.newFixedThreadPool(numThreads); final ExecutorListener listener = new ExecutorListener(exec); final Runnable task1 = new PerformanceTestLevel1Thread(25, 35, listener); final Runnable task2 = new PerformanceTestLevel1Thread(25, 35, listener); exec.execute(task1); exec.execute(task2); listener.keepAlive(); } @Test public void test5Threads5TasksLevel1() throws InterruptedException { final int numThreads = 5; final ExecutorService exec = Executors.newFixedThreadPool(numThreads); final ExecutorListener listener = new ExecutorListener(exec); final Runnable task1 = new PerformanceTestLevel1Thread(15, 25, listener); final Runnable task2 = new PerformanceTestLevel1Thread(15, 25, listener); final Runnable task3 = new PerformanceTestLevel1Thread(15, 25, listener); final Runnable task4 = new PerformanceTestLevel1Thread(15, 25, listener); final Runnable task5 = new PerformanceTestLevel1Thread(15, 25, listener); exec.execute(task1); exec.execute(task2); exec.execute(task3); exec.execute(task4); exec.execute(task5); listener.keepAlive(); } }