diff options
| author | Tim Vermeulen <tvermeulen@me.com> | 2022-07-18 21:10:47 +0200 |
|---|---|---|
| committer | Tim Vermeulen <tvermeulen@me.com> | 2022-07-18 21:10:47 +0200 |
| commit | 50c612faef43799497aa33fa6a92bb3a7f5a9401 (patch) | |
| tree | 0c2e1b6ebdd3d287ec7f8c1ef05a861e32b71e3d | |
| parent | 144227dae949fb98896a2ba077d8fe7f36c3238e (diff) | |
| download | rust-50c612faef43799497aa33fa6a92bb3a7f5a9401.tar.gz rust-50c612faef43799497aa33fa6a92bb3a7f5a9401.zip | |
Fix `Skip::next` for non-fused inner iterators
| -rw-r--r-- | library/core/src/iter/adapters/skip.rs | 2 | ||||
| -rw-r--r-- | library/core/tests/iter/adapters/skip.rs | 8 |
2 files changed, 9 insertions, 1 deletions
diff --git a/library/core/src/iter/adapters/skip.rs b/library/core/src/iter/adapters/skip.rs index ea1da8ba434..2c283100f07 100644 --- a/library/core/src/iter/adapters/skip.rs +++ b/library/core/src/iter/adapters/skip.rs @@ -33,7 +33,7 @@ where #[inline] fn next(&mut self) -> Option<I::Item> { if unlikely(self.n > 0) { - self.iter.nth(crate::mem::take(&mut self.n) - 1); + self.iter.nth(crate::mem::take(&mut self.n) - 1)?; } self.iter.next() } diff --git a/library/core/tests/iter/adapters/skip.rs b/library/core/tests/iter/adapters/skip.rs index 0c464bdd03a..a73d9861dfb 100644 --- a/library/core/tests/iter/adapters/skip.rs +++ b/library/core/tests/iter/adapters/skip.rs @@ -1,5 +1,7 @@ use core::iter::*; +use super::Unfuse; + #[test] fn test_iterator_skip() { let xs = [0, 1, 2, 3, 5, 13, 15, 16, 17, 19, 20, 30]; @@ -190,3 +192,9 @@ fn test_skip_nth_back() { it.by_ref().skip(2).nth_back(10); assert_eq!(it.next_back(), Some(&1)); } + +#[test] +fn test_skip_non_fused() { + let non_fused = Unfuse::new(0..10); + let _ = non_fused.skip(20).next(); +} |
