use of abs.backend.java.scheduling.ScheduleAction in project abstools by abstools.
the class SchedulingTest method testNStepScheduler.
@Test
public void testNStepScheduler() {
final SchedulingStrategy ss = mock(SchedulingStrategy.class);
doCallRealMethod().when(ss).setBaseScheduler(any(TotalScheduler.class));
doCallRealMethod().when(ss).setCurrentScheduler(any(TotalScheduler.class));
doCallRealMethod().when(ss).doSingleStep();
TotalScheduler ts = mock(TotalScheduler.class);
ScheduleAction scheduleAction = mock(ScheduleAction.class, Mockito.RETURNS_DEEP_STUBS);
when(ts.choose(any(ScheduleOptions.class))).thenReturn(scheduleAction);
TaskInfo taskInfo = mock(TaskInfo.class);
when(ts.schedule(any(TaskScheduler.class), any(List.class))).thenReturn(taskInfo);
ss.setBaseScheduler(ts);
final int numberSteps = new Random().nextInt(100);
final NStepScheduler nss = new NStepScheduler(ss, numberSteps);
ss.setCurrentScheduler(nss);
Thread schedulingThread = new Thread(new Runnable() {
@Override
public void run() {
ScheduleOptions scheduleOptions = mock(ScheduleOptions.class, Mockito.RETURNS_DEEP_STUBS);
for (int i = 0; i < numberSteps; i++) {
ss.curScheduler.choose(scheduleOptions);
}
assertEquals(nss, ss.curScheduler);
ss.curScheduler.choose(scheduleOptions);
}
});
try {
schedulingThread.start();
schedulingThread.join();
verify(ss).awaitGUIAction(any(ScheduleOptions.class));
} catch (InterruptedException e) {
fail();
}
}
use of abs.backend.java.scheduling.ScheduleAction in project abstools by abstools.
the class SchedulingTest method testRandomScheduler.
@Test
public void testRandomScheduler() {
RandomScheduler rs = new RandomScheduler(new Random());
ScheduleOptions so = mock(ScheduleOptions.class);
List<ScheduleAction> sal = new ArrayList<ScheduleAction>();
for (int i = 0; i < 100; i++) {
sal.add(mock(ScheduleAction.class));
}
when(so.allOptions()).thenReturn(sal);
when(so.numOptions()).thenReturn(100);
ScheduleAction chosenActions;
long seed = new Random().nextLong();
rs = new RandomScheduler(new Random(seed));
List<ScheduleAction> testActions = new ArrayList<ScheduleAction>();
for (int i = 0; i < 20; i++) {
chosenActions = rs.choose(so);
assertTrue(sal.contains(chosenActions));
testActions.add(chosenActions);
}
RandomScheduler rs2 = new RandomScheduler(new Random(seed));
List<ScheduleAction> testActions2 = new ArrayList<ScheduleAction>();
for (int i = 0; i < 20; i++) {
chosenActions = rs2.choose(so);
assertTrue(sal.contains(chosenActions));
testActions2.add(chosenActions);
}
for (int i = 0; i < testActions.size(); i++) {
assertTrue("Element " + i + " should be equal!", testActions.get(i).equals(testActions2.get(i)));
}
// TODO maybe write test for scheduling
}
use of abs.backend.java.scheduling.ScheduleAction in project abstools by abstools.
the class SchedulingTest method testRunToLineScheduler.
@Test
public void testRunToLineScheduler() {
final SchedulingStrategy ss = mock(SchedulingStrategy.class);
doCallRealMethod().when(ss).setBaseScheduler(any(TotalScheduler.class));
doCallRealMethod().when(ss).setCurrentScheduler(any(TotalScheduler.class));
doCallRealMethod().when(ss).doSingleStep();
TotalScheduler ts = mock(TotalScheduler.class);
ScheduleAction scheduleAction = mock(ScheduleAction.class, Mockito.RETURNS_DEEP_STUBS);
when(ts.choose(any(ScheduleOptions.class))).thenReturn(scheduleAction);
TaskInfo taskInfo = mock(TaskInfo.class);
when(ts.schedule(any(TaskScheduler.class), any(List.class))).thenReturn(taskInfo);
ss.setBaseScheduler(ts);
final int line = new Random().nextInt(1000);
final String fileName = "filename";
abs.backend.java.debugging.TaskInfo ti = mock(abs.backend.java.debugging.TaskInfo.class);
when(ti.getCurrentFile()).thenReturn("filename");
when(ti.getCurrentLine()).thenReturn(line - 5).thenReturn(line - 4).thenReturn(line - 3).thenReturn(line - 2).thenReturn(line - 1).thenReturn(line);
ss.steppedTask = ti;
RunToLineScheduler rtls = new RunToLineScheduler(ss, fileName, line);
ss.setCurrentScheduler(rtls);
ScheduleOptions scheduleOptions = mock(ScheduleOptions.class, Mockito.RETURNS_DEEP_STUBS);
for (int i = 0; i < 6; i++) {
ss.curScheduler.choose(scheduleOptions);
}
verify(ss).awaitGUIAction(any(ScheduleOptions.class));
}
use of abs.backend.java.scheduling.ScheduleAction in project abstools by abstools.
the class HistoryReplayScheduler method getOptionByHistory.
private ScheduleAction getOptionByHistory(ScheduleOptions options) {
HistoryItem item = history.remove(0);
for (ScheduleAction a : options.allOptions()) {
if (item.matches(a)) {
return a;
}
}
showErrorMessageAsync("Illegal History!");
ABSRuntime.getCurrentRuntime().shutdown();
return null;
}
use of abs.backend.java.scheduling.ScheduleAction in project abstools by abstools.
the class RunTaskScheduler method choose.
@Override
public ScheduleAction choose(ScheduleOptions options) {
List<ScheduleAction> schedulableActions = options.allOptions();
boolean isEqual = false;
if (doSchedule && this.schedulingStrategy.schedulableTasks.contains(task)) {
for (ScheduleAction action : schedulableActions) {
if (action instanceof ScheduleTask) {
isEqual = (action.getCOG().getID() == task.getCOG().getID());
} else {
isEqual = (action.getTask().getID() == task.getID());
}
doSchedule = false;
if (isEqual) {
return action;
}
}
} else {
for (ScheduleAction action : schedulableActions) {
if (!(action instanceof ScheduleTask) && (action.getTask().getID() == task.getID())) {
return action;
}
}
}
return this.schedulingStrategy.awaitGUIAction(options);
}
Aggregations