mirror of
https://github.com/ankitects/anki.git
synced 2025-09-18 14:02:21 -04:00
Fix crash when using FSRS with a low max interval setting
This commit is contained in:
parent
91538518b3
commit
b8ec76fb66
2 changed files with 8 additions and 1 deletions
|
@ -46,6 +46,7 @@ impl<'a> StateContext<'a> {
|
||||||
/// Ensure the upper bound is larger than the lower bound, if `maximum` allows
|
/// Ensure the upper bound is larger than the lower bound, if `maximum` allows
|
||||||
/// it and it is larger than 1.
|
/// it and it is larger than 1.
|
||||||
fn constrained_fuzz_bounds(interval: f32, minimum: u32, maximum: u32) -> (u32, u32) {
|
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);
|
let (mut lower, mut upper) = fuzz_bounds(interval);
|
||||||
|
|
||||||
// minimum <= maximum and lower <= upper are assumed
|
// 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, 1, 99, 93, 96, 99);
|
||||||
assert_lower_middle_upper!(100.0, 97, 103, 97, 100, 103);
|
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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -84,7 +84,8 @@ impl LearnState {
|
||||||
fn answer_easy(self, ctx: &StateContext) -> ReviewState {
|
fn answer_easy(self, ctx: &StateContext) -> ReviewState {
|
||||||
let (mut minimum, maximum) = ctx.min_and_max_review_intervals(1);
|
let (mut minimum, maximum) = ctx.min_and_max_review_intervals(1);
|
||||||
let interval = if let Some(states) = &ctx.fsrs_next_states {
|
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
|
states.easy.interval
|
||||||
} else {
|
} else {
|
||||||
ctx.graduating_interval_easy
|
ctx.graduating_interval_easy
|
||||||
|
|
Loading…
Reference in a new issue