use anyhow::{Ok, Result};
use tempfile::TempDir;
use trane::{
data::{MasteryScore, PassingScoreOptions, SchedulerOptions},
scheduler::ExerciseScheduler,
test_utils::*,
};
#[test]
fn all_exercises_scheduled_random() -> Result<()> {
let temp_dir = TempDir::new()?;
let random_library = RandomCourseLibrary {
num_courses: 50,
course_dependencies_range: (0, 5),
lessons_per_course_range: (0, 5),
lesson_dependencies_range: (0, 5),
exercises_per_lesson_range: (0, 10),
}
.generate_library();
let mut trane = init_test_simulation(temp_dir.path(), &random_library)?;
trane.set_scheduler_options(SchedulerOptions {
passing_score: PassingScoreOptions {
min_avg_trials: 1.0,
..Default::default()
},
..Default::default()
});
let exercise_ids = all_test_exercises(&random_library);
let mut simulation = TraneSimulation::new(
exercise_ids.len() * 50,
Box::new(|_| Some(MasteryScore::Five)),
);
simulation.run_simulation(&mut trane, &vec![], &None)?;
for exercise_id in exercise_ids {
assert!(
simulation
.answer_history
.contains_key(&exercise_id.to_ustr()),
"exercise {:?} should have been scheduled",
exercise_id
);
assert_simulation_scores(exercise_id.to_ustr(), &trane, &simulation.answer_history)?;
}
Ok(())
}
#[test]
fn generate_and_read_large_library() -> Result<()> {
let temp_dir = TempDir::new()?;
let random_library = RandomCourseLibrary {
num_courses: 50,
course_dependencies_range: (5, 5),
lessons_per_course_range: (5, 5),
lesson_dependencies_range: (5, 5),
exercises_per_lesson_range: (5, 5),
}
.generate_library();
init_test_simulation(temp_dir.path(), &random_library)?;
Ok(())
}