in src/scheduler/replay.rs [67:90]
fn next_task(&mut self, runnable: &[TaskId], _current: Option<TaskId>, _is_yielding: bool) -> Option<TaskId> {
if self.steps >= self.schedule.steps.len() {
assert!(self.allow_incomplete, "schedule ended early");
return None;
}
match self.schedule.steps[self.steps] {
ScheduleStep::Random => {
panic!("expected context switch but next schedule step is random choice");
}
ScheduleStep::Task(next) => {
if !runnable.contains(&next) {
assert!(
self.allow_incomplete,
"scheduled task is not runnable, expected to run {:?}, but choices were {:?}",
next, runnable
);
None
} else {
self.steps += 1;
Some(next)
}
}
}
}