diff --git a/rslib/src/scheduler/states/fuzz.rs b/rslib/src/scheduler/states/fuzz.rs index 7b6fa195f..0aaa75429 100644 --- a/rslib/src/scheduler/states/fuzz.rs +++ b/rslib/src/scheduler/states/fuzz.rs @@ -46,6 +46,7 @@ impl<'a> StateContext<'a> { /// Ensure the upper bound is larger than the lower bound, if `maximum` allows /// it and it is larger than 1. fn constrained_fuzz_bounds(interval: f32, minimum: u32, maximum: u32) -> (u32, u32) { + let minimum = minimum.min(maximum); let (mut lower, mut upper) = fuzz_bounds(interval); // minimum <= maximum and lower <= upper are assumed @@ -137,4 +138,9 @@ mod test { assert_lower_middle_upper!(100.0, 1, 99, 93, 96, 99); assert_lower_middle_upper!(100.0, 97, 103, 97, 100, 103); } + + #[test] + fn invalid_values_will_not_panic() { + constrained_fuzz_bounds(1.0, 3, 2); + } } diff --git a/rslib/src/scheduler/states/learning.rs b/rslib/src/scheduler/states/learning.rs index 6cb4b35b2..32f9d5721 100644 --- a/rslib/src/scheduler/states/learning.rs +++ b/rslib/src/scheduler/states/learning.rs @@ -84,7 +84,8 @@ impl LearnState { fn answer_easy(self, ctx: &StateContext) -> ReviewState { let (mut minimum, maximum) = ctx.min_and_max_review_intervals(1); let interval = if let Some(states) = &ctx.fsrs_next_states { - minimum = states.good.interval + 1; + let good = ctx.with_review_fuzz(states.good.interval as f32, minimum, maximum); + minimum = good + 1; states.easy.interval } else { ctx.graduating_interval_easy