diff options
| author | The 8472 <git@infinite-source.de> | 2024-06-25 23:22:27 +0200 |
|---|---|---|
| committer | The 8472 <git@infinite-source.de> | 2024-06-25 23:22:27 +0200 |
| commit | 0d7aef9738b25ed4f84d11deb0add8d5345613b0 (patch) | |
| tree | 30064cf6b74db7a608029800d195ecae5a6abe42 | |
| parent | 2be2d77c501730caedae8db2f0a0f02db57ae505 (diff) | |
| download | rust-0d7aef9738b25ed4f84d11deb0add8d5345613b0.tar.gz rust-0d7aef9738b25ed4f84d11deb0add8d5345613b0.zip | |
regression test for leaks in the the Filter::next_chunk implementation
previously next_chunk would forget items rejected by the filter
| -rw-r--r-- | library/core/tests/iter/adapters/filter.rs | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/library/core/tests/iter/adapters/filter.rs b/library/core/tests/iter/adapters/filter.rs index a2050d89d85..167851e3333 100644 --- a/library/core/tests/iter/adapters/filter.rs +++ b/library/core/tests/iter/adapters/filter.rs @@ -1,4 +1,5 @@ use core::iter::*; +use std::rc::Rc; #[test] fn test_iterator_filter_count() { @@ -50,3 +51,15 @@ fn test_double_ended_filter() { assert_eq!(it.next().unwrap(), &2); assert_eq!(it.next_back(), None); } + +#[test] +fn test_next_chunk_does_not_leak() { + let drop_witness: [_; 5] = std::array::from_fn(|_| Rc::new(())); + + let v = (0..5).map(|i| drop_witness[i].clone()).collect::<Vec<_>>(); + let _ = v.into_iter().filter(|_| false).next_chunk::<1>(); + + for ref w in drop_witness { + assert_eq!(Rc::strong_count(w), 1); + } +} |
