package s3scj.tck; import javax.realtime.SizeEstimator; import javax.safetycritical.MissionSequencer; /** * @author leizhao * * Assertion: * - mission memory is resizable */ public class TestMemory504 extends TestCase { /** * mission repeat times */ private int _repeats = 10; public MissionSequencer getSequencer() { return new GeneralSingleMissionSequencer(new GeneralMission() { private int _nObjects; private final long _memBaseSize = 1; private final int _maxNumObjects = 1000; @Override public void initialize() { new GeneralPeriodicEventHandler() { @Override public void handleEvent() { // use up all the mission memory try { for (int i = 0; i < _nObjects; i++) { new Object(); } if (_repeats-- == 0) requestSequenceTermination(); } catch (Throwable e) { fail("Failure in resizing mission memory size. Msg: " + e.getMessage()); requestSequenceTermination(); } } }; } @Override public long missionMemorySize() { // randomly adjust the size of mission memory _nObjects = (int) (Math.random() * _maxNumObjects) % _maxNumObjects + 1; SizeEstimator estimator = new SizeEstimator(); estimator.reserve(Object.class, _nObjects); return estimator.getEstimate() + _memBaseSize; } }); } }