package tmp;
import javax.realtime.MemoryArea;
import javax.realtime.PeriodicParameters;
import javax.realtime.PriorityParameters;
import javax.realtime.RelativeTime;
import javax.safetycritical.Launcher;
import javax.safetycritical.Mission;
import javax.safetycritical.MissionSequencer;
import javax.safetycritical.PeriodicEventHandler;
import javax.safetycritical.Safelet;
import javax.safetycritical.StorageParameters;
import javax.safetycritical.ManagedMemory;
import javax.safetycritical.MissionMemory;
import javax.safetycritical.PrivateMemory;
import javax.safetycritical.TestPortal;
import javax.scj.util.Priorities;
import javax.scj.util.Const;
import org.jmlspecs.utils.JmlAssertionError;
import unitTest_Remove.TestCase;
@SuppressWarnings("unused")
public class TestMemoryArea extends TestCase
{
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 + 22);
static StorageParameters storageParameters_Handlers =
new StorageParameters(
Const.PRIVATE_BACKING_STORE,
new long[] { Const.HANDLER_STACK_SIZE },
Const.PRIVATE_MEM + 33,
0,
0);
class SafeletStub implements Safelet<MissionStub>
{
/*@
public behavior // specification from Safelet
requires true;
ensures \result != null;
ensures (MemoryArea.getMemoryArea(\result) instanceof ManagedMemory.ImmortalMemory);
also // indicates there are inherited specifications
requires true;
ensures MemoryArea.getMemoryArea(\result) instanceof ManagedMemory.ImmortalMemory;
@*/
public MissionSequencer<MissionStub> getSequencer()
{
MissionSequencer<MissionStub> seq = new SequencerStub();
System.out.println("=> area of " + seq + " is " + MemoryArea.getMemoryArea(seq));
return seq;
}
public long immortalMemorySize()
{
return Const.IMMORTAL_MEM;
}
public void initializeApplication() {
}
}
class SequencerStub extends MissionSequencer<MissionStub>
{
private MissionStub mission;
SequencerStub()
{
super (new PriorityParameters (Priorities.PR95), storageParameters_Sequencer);
mission = new MissionStub();
}
public MissionStub getNextMission()
{
if (mission.terminationPending())
return null;
else
return mission;
}
}
class MissionStub extends Mission
{
protected void initialize()
{
PeriodicEventHandler pevh = createInMissionMem ();
pevh.register();
System.out.println("=> area of " + pevh + " is \n" + MemoryArea.getMemoryArea(pevh));
}
public long missionMemorySize ()
{
return Const.MISSION_MEM + 22;
}
/*@
public behaviour
requires true;
ensures MemoryArea.getMemoryArea(\result) instanceof MissionMemory;
@*/
public PeriodicEventHandler createInMissionMem ()
{
return new PeriodicEvhStub(
new PriorityParameters(Priorities.PR98),
new PeriodicParameters(new RelativeTime (), // start
new RelativeTime (50, 0)), // period
storageParameters_Handlers);
}
}
class PeriodicEvhStub extends PeriodicEventHandler
{
protected PeriodicEvhStub (PriorityParameters priority,
PeriodicParameters periodic,
StorageParameters storage)
{
super(priority, periodic, storage);
}
public void handleAsyncEvent()
{
devices.Console.println("--> PEvh");
Integer obj = createInPrivateMem();
System.out.println("=> area of " + obj + " is " + MemoryArea.getMemoryArea(obj));
Mission.getMission().requestTermination();
}
/*@
public behaviour
requires true;
ensures MemoryArea.getMemoryArea(\result) instanceof PrivateMemory;
@*/
public Integer createInPrivateMem ()
{
return new Integer (1234);
}
}
public TestMemoryArea (String name)
{
super(name);
}
public void test (int i)
{
ManagedMemory mem = null;
switch (i) {
// public static MemoryArea getMemoryArea(Object object)
case 1:
System.out.println("\nTestMemoryArea begin case 1");
//vm.Memory.startMemoryAreaTracking();
// try {
new Launcher(new SafeletStub(), 1);
// }
// catch (JmlAssertionError e){
// };
//vm.Memory.reportMemoryUsage();
System.out.println("TestMemoryArea end case 1 \n");
break;
// Next three cases: move the test to a subclass, i.e. ManagedMemory
// // public long memoryConsumed()
// case 2:
// TestPortal.ManagedMemory_allocateBackingStore(2*1000);
// mem = TestPortal.ManagedMemory_allocateImmortalMemory(1000);
// mem.memoryConsumed();
// break;
//
// // public long memoryRemaining()
// case 3:
// TestPortal.ManagedMemory_allocateBackingStore(2*1000);
// mem = TestPortal.ManagedMemory_allocateImmortalMemory(1000);
// mem.memoryRemaining();
// break;
//
// // public long size()
// case 4:
// TestPortal.ManagedMemory_allocateBackingStore(2*1000);
// mem = TestPortal.ManagedMemory_allocateImmortalMemory(1000);
// mem.size();
// break;
default: break;
}
}
public static final int testCount = 1;
}