/* * JaamSim Discrete Event Simulation * Copyright (C) 2014 Ausenco Engineering Canada Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.jaamsim.events; import org.junit.Test; public class TestSchedEvent { @Test public void testLIFOEvents() { EventManager evt = new EventManager("TestEVT"); evt.clear(); ProcessTarget targ = new TestTarget(1); long[] nanoStamps = new long[11]; for (int i = 0; i <= 1000000; i++) { if (i % 100000 == 0) { int idx = i / 100000; nanoStamps[idx] = System.nanoTime(); } evt.scheduleProcessExternal(0, 0, false, targ, null); } long endSchedNanos = System.nanoTime(); TestFrameworkHelpers.runEventsToTick(evt, 100, Long.MAX_VALUE); long endExecNanos = System.nanoTime(); outputResults("LIFO Events", nanoStamps, endSchedNanos, endExecNanos); } @Test public void testFIFOEvents() { EventManager evt = new EventManager("TestEVT"); evt.clear(); ProcessTarget targ = new TestTarget(1); long[] nanoStamps = new long[11]; for (int i = 0; i <= 1000000; i++) { if (i % 100000 == 0) { int idx = i / 100000; nanoStamps[idx] = System.nanoTime(); } evt.scheduleProcessExternal(0, 0, true, targ, null); } long endSchedNanos = System.nanoTime(); TestFrameworkHelpers.runEventsToTick(evt, 100, Long.MAX_VALUE); long endExecNanos = System.nanoTime(); outputResults("FIFO Events", nanoStamps, endSchedNanos, endExecNanos); } @Test public void testPriorityEvents() { EventManager evt = new EventManager("TestEVT"); evt.clear(); ProcessTarget targ = new TestTarget(1); long[] nanoStamps = new long[11]; for (int i = 0; i <= 1000000; i++) { if (i % 100000 == 0) { int idx = i / 100000; nanoStamps[idx] = System.nanoTime(); } evt.scheduleProcessExternal(0, i, false, targ, null); } long endSchedNanos = System.nanoTime(); TestFrameworkHelpers.runEventsToTick(evt, 10000000, Long.MAX_VALUE); long endExecNanos = System.nanoTime(); outputResults("Different Priority Events", nanoStamps, endSchedNanos, endExecNanos); } @Test public void testTimeEvents() { EventManager evt = new EventManager("TestEVT"); evt.clear(); ProcessTarget targ = new TestTarget(1); long[] nanoStamps = new long[11]; for (int i = 0; i <= 1000000; i++) { if (i % 100000 == 0) { int idx = i / 100000; nanoStamps[idx] = System.nanoTime(); } evt.scheduleProcessExternal(i, 0, false, targ, null); } long endSchedNanos = System.nanoTime(); TestFrameworkHelpers.runEventsToTick(evt, 10000000, Long.MAX_VALUE); long endExecNanos = System.nanoTime(); outputResults("Different Time Events", nanoStamps, endSchedNanos, endExecNanos); } private final void outputResults(String test, long[] nanoStamps, long endSchedNanos, long endExecNanos) { long execNanos = endExecNanos - endSchedNanos; double perEvtExec = execNanos / 1000000.0d; System.out.println(test); for (int i = 0; i < 10; i++) { long deltns = nanoStamps[i + 1] - nanoStamps[i]; double perevt = deltns / 100000.0d; System.out.format("%7d - %12d ns (%f ns/evt)%n", (i + 1) * 100000, deltns, perevt); } System.out.format("Sched total - %d ns%n", (endSchedNanos - nanoStamps[0])); System.out.format("Done exec - %12d ns (%f ns/evt)%n", execNanos, perEvtExec); System.out.format("Done all - %d ns%n%n", (endExecNanos - nanoStamps[0])); } private static class TestTarget extends ProcessTarget { final int num; TestTarget(int i) { num = i; } @Override public String getDescription() { return "SimulationInit-" + num; } @Override public void process() { //System.out.println("Running init:" + num); //System.out.flush(); } } }