package javax.safetycritical.test.cyclic;
import javax.realtime.Clock;
import javax.realtime.PeriodicParameters;
import javax.realtime.PriorityParameters;
import javax.realtime.RelativeTime;
import javax.safetycritical.CyclicExecutive;
import javax.safetycritical.CyclicSchedule;
import javax.safetycritical.Frame;
import javax.safetycritical.Launcher;
import javax.safetycritical.Mission;
import javax.safetycritical.MissionSequencer;
import javax.safetycritical.PeriodicEventHandler;
import javax.safetycritical.PriorityScheduler;
import javax.safetycritical.Safelet;
import javax.safetycritical.StorageParameters;
import javax.scj.util.Const;
import test.BasicJMLTest;
import unitTest.TestCase;
import unitTest.TestResult;
import unitTest.TestSuite;
public class TckTestCyclicSchedule3 extends BasicJMLTest {
public static void main(String[] args) {
Const.setDefaultErrorReporter();
TestSuite suite = new TestSuite();
TestResult result = new TestResult();
int numberOfCases = TestCyclicSchedule3.testCount;
TestCase test = new TestCyclicSchedule3(result, numberOfCases);
suite.addTest(test);
suite.run(result);
result.print(test.getClass().getName(), numberOfCases);
if (result.JMLerrorCount() + result.errorCount() == 0) {
args = null;
}
}
@Override
public String getJMLAnnotationCommand() {
return "java -jar WORKSPACE/OpenJMLTest/lib/openjml.jar -cp ICECAPSDK/bin/ -d ICECAPSDK/bin/ -noInternalSpecs -rac -racCheckAssumptions -racJavaChecks -nullableByDefault -showNotImplemented -specspath ./specs ICECAPSDK/src/javax/safetycritical/Frame.java ICECAPSDK/src/javax/safetycritical/CyclicSchedule.java";
}
}
class TestCyclicSchedule3 extends TestCase {
// --- Stub classes ----------------------------------
static StorageParameters storageParameters_Sequencer = new StorageParameters(
Const.OUTERMOST_SEQ_BACKING_STORE,
new long[] { Const.HANDLER_STACK_SIZE }, Const.PRIVATE_MEM,
Const.IMMORTAL_MEM, Const.MISSION_MEM);
static StorageParameters storageParameters_Handlers = new StorageParameters(
Const.PRIVATE_BACKING_STORE,
new long[] { Const.HANDLER_STACK_SIZE }, Const.PRIVATE_MEM, 0, 0);
class SafeletStub implements Safelet<CyclicExecutive> {
public MissionSequencer<CyclicExecutive> getSequencer() {
return new SequencerStub();
}
public long immortalMemorySize() {
return Const.IMMORTAL_MEM;
}
public void initializeApplication() {
}
}
class SequencerStub extends MissionSequencer<CyclicExecutive> {
CyclicExecutive mission;
SequencerStub() {
super(new PriorityParameters(PriorityScheduler.instance().getMinPriority() + 1),
storageParameters_Sequencer);
mission = new CyclicExecutiveStub();
}
public CyclicExecutive getNextMission() {
if (mission.terminationPending())
return null;
else
return mission;
}
}
class CyclicExecutiveStub extends CyclicExecutive {
public void initialize() {
int NOR_PRIORITY = PriorityScheduler.instance().getNormPriority();
new PeriodicEventHandlerStub1(new PriorityParameters(NOR_PRIORITY),
new PeriodicParameters(new RelativeTime(),
new RelativeTime(2000, 0)),
storageParameters_Handlers).register();
new PeriodicEventHandlerStub2(new PriorityParameters(NOR_PRIORITY),
new PeriodicParameters(new RelativeTime(),
new RelativeTime(4000, 0)),
storageParameters_Handlers).register();
}
public long missionMemorySize() {
return Const.MISSION_MEM;
}
public CyclicSchedule getSchedule(PeriodicEventHandler[] handlers) {
RelativeTime minorCycle =
new RelativeTime(2, 0, Clock.getRealtimeClock());
Frame[] frames = new Frame[3];
PeriodicEventHandler[] frame0 = new PeriodicEventHandler[2];
PeriodicEventHandler[] frame1 = null;
PeriodicEventHandler[] frame2 = new PeriodicEventHandler[1];
frame0[0] = handlers[0];
frame0[1] = handlers[1];
frame2[0] = handlers[0];
frames[0] = new Frame(minorCycle, frame0);
frames[1] = null;
frames[2] = new Frame(minorCycle, frame2);
System.out.println("CyclicExecutiveStub.getSchedule");
return new CyclicSchedule(frames);
}
}
class PeriodicEventHandlerStub1 extends PeriodicEventHandler {
public PeriodicEventHandlerStub1(PriorityParameters priotity,
PeriodicParameters period, StorageParameters storage) {
super(priotity, period, storage);
}
public void handleAsyncEvent() {
System.out.println("Running1");
}
}
class PeriodicEventHandlerStub2 extends PeriodicEventHandler {
int count = 0;
public PeriodicEventHandlerStub2(PriorityParameters priotity,
PeriodicParameters period, StorageParameters storage) {
super(priotity, period, storage);
}
public void handleAsyncEvent() {
System.out.println("Running2");
count++;
if (count > 2)
Mission.getMission().requestTermination();
}
}
//--- TestCyclicSchedule3 ---------------------------------
static final int testCount = 1;
public TestCyclicSchedule3(TestResult result, int testCount) {
super(result, testCount);
}
public void test(int i) {
switch (i) {
// public CyclicSchedule(Frame[] frames)
case 1: // frame array with a null element
// new CyclicSchedule (new Frame[] {frame0, null, frame2});
try {
new Launcher(new TestCyclicSchedule3.SafeletStub(), 0);
assert false; }
catch (IllegalArgumentException e){};
break;
default:
break;
}
}
}