diff --git a/conjecture-rust/RELEASE.md b/conjecture-rust/RELEASE.md new file mode 100644 index 0000000000..5faf1456bf --- /dev/null +++ b/conjecture-rust/RELEASE.md @@ -0,0 +1,4 @@ +RELEASE_TYPE: patch + +This release fixes an occasional assertion failure that could occur +when shrinking a failing test. diff --git a/conjecture-rust/src/engine.rs b/conjecture-rust/src/engine.rs index f9644e5b5d..9f3b1c5fb5 100644 --- a/conjecture-rust/src/engine.rs +++ b/conjecture-rust/src/engine.rs @@ -408,15 +408,20 @@ where fn minimize_duplicated_blocks(&mut self) -> StepResult { let mut i = 0; let mut targets = self.calc_duplicates(); + while i < targets.len() { let target = mem::replace(&mut targets[i], Vec::new()); + let max_target = *target.iter().max().unwrap(); + i += 1; assert!(target.len() > 0); let v = self.shrink_target.record[target[0]]; - let base = self.shrink_target.record.clone(); let w = minimize_integer(v, |t| { - let mut attempt = base.clone(); + if max_target >= self.shrink_target.record.len() { + return Ok(false); + } + let mut attempt = self.shrink_target.record.clone(); for i in &target { attempt[*i] = t } diff --git a/hypothesis-ruby/RELEASE.md b/hypothesis-ruby/RELEASE.md new file mode 100644 index 0000000000..6cfaed26b1 --- /dev/null +++ b/hypothesis-ruby/RELEASE.md @@ -0,0 +1,4 @@ +RELEASE_TYPE: patch + +This release fixes an occasional `RuntimeError` that could occur +when shrinking a failing test.