package edu.purdue.scjtck.tck;
import javax.realtime.AbsoluteTime;
import javax.realtime.Clock;
import javax.realtime.HighResolutionTime;
import javax.realtime.RelativeTime;
import javax.safetycritical.MissionSequencer;
import javax.safetycritical.annotate.Level;
import edu.purdue.scjtck.MainSafelet.Terminator;
/**
*
* @author Daniel
*
* Assertions:
*
* - The real-time clock should be monotonic and non-decreasing
*
* - waitForObject should be allowed on level 2
*
*/
public class TestClock600 extends TestCase {
public MissionSequencer getSequencer() {
return new GeneralSingleMissionSequencer(new GeneralMission() {
@Override
public void initialize() {
new MyPeriodicEventHandler();
// new LockNotifier();
}
// private final MyLock _myLock = new MyLock();
// class MyLock {
// public synchronized void doWaitForObject(RelativeTime t)
// throws InterruptedException {
// HighResolutionTime.waitForObject(this, t);
// }
//
// public synchronized void doNotifyAll() {
// this.notifyAll();
// }
// }
class MyPeriodicEventHandler extends GeneralPeriodicEventHandler {
@Override
public void handleAsyncEvent() {
AbsoluteTime preTime = new AbsoluteTime(0, 0), curTime;
for (int i = 0; i < _prop._iterations; i++) {
curTime = Clock.getRealtimeClock().getTime();
if (curTime.getMilliseconds() * 1000000
+ curTime.getNanoseconds() < preTime
.getMilliseconds()
* 1000000 + preTime.getNanoseconds()) {
fail("The real-time clock should be monotonic and non-decreasing");
break;
}
preTime = curTime;
}
// try {
// _myLock.doWaitForObject(new RelativeTime(500, 0));
// } catch (Throwable t) {
// if (getLevel() == Level.LEVEL_2)
// fail("HighResolutionTime.waitForObject() should be allowed on level 2");
// } finally {
requestSequenceTermination();
// }
}
}
// class LockNotifier extends GeneralPeriodicEventHandler {
// @Override
// public void handleAsyncEvent() {
// _myLock.doNotifyAll();
// }
// }
});
}
@Override
public long immortalMemorySize() {
// TODO Auto-generated method stub
return 0;
}
@Override
protected String getArgs() {
// TODO Auto-generated method stub
return "-L 1";
}
}