Fix crash when using FSRS with a low max interval setting

This commit is contained in:
Damien Elmes 2023-09-20 13:14:03 +10:00
parent 91538518b3
commit b8ec76fb66
2 changed files with 8 additions and 1 deletions

View File

@ -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);
}
}

View File

@ -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