@Override public void switchToSimulatedTime() { checkState(stateMachine.isSupported(Trigger.SIMULATE), "Can not switch to simulated time mode because clock is already " + "stopped."); stateMachine.handle(Trigger.SIMULATE, this); }
@Override public void switchToRealTime() { checkState(stateMachine.isSupported(Trigger.REAL_TIME), "Can not switch to real time mode because clock is already stopped."); stateMachine.handle(Trigger.REAL_TIME, this); }
@Override void doStart() { checkState(stateMachine.isSupported(Trigger.START), "%s can be started only once", getClass().getSimpleName()); final AffinityLock lock = AffinityLock.acquireLock(); LOGGER.info("Acquired lock to CPU {}.", lock.cpuId()); affinityLock = lock; stateMachine.handle(Trigger.START, this); }
@Override public void stop() { LOGGER.trace("stop"); checkState(stateMachine.isSupported(Trigger.STOP), "Can not stop time in current state: %s", stateMachine.getCurrentState().name()); final boolean rt = stateMachine.stateIs(realtimeState); stateMachine.handle(Trigger.STOP, this); if (!rt) { shutdownExecutor(); } }
/** * Tests correct behavior for events which are not equal. */ @SuppressWarnings("static-method") @Test public void eventNotEqualBehavior() { final TestState state1 = new TestState("state1"); state1.name(); final TestState state2 = new TestState("state2"); final Object event1 = "event1"; final Object event2 = new Object(); final StateMachine<Object, Object> sm = StateMachine.create(state1)/* */ .addTransition(state1, event1, state2)/* */ .addTransition(state2, event2, state1)/* */ .build(); assertTrue(sm.isSupported(event1)); assertTrue(sm.isSupported("event1")); assertTrue(sm.isSupported(new StringBuilder("event").append(1) .toString())); assertFalse(sm.isSupported(event2)); sm.handle("event1", CONTEXT); assertTrue(sm.stateIs(state2)); assertTrue(sm.isSupported(event2)); assertFalse(sm.isSupported(new Object())); }