#![allow(dead_code, deprecated, unused_variables, unused_mut)] #![feature(iter_map_windows)] #[derive(Default)] struct NonFusedIterator { state: i32, } impl Iterator for NonFusedIterator { type Item = i32; fn next(&mut self) -> Option { let val = self.state; self.state = self.state + 1; if val < 5 || val % 2 == 0 { Some(val) } else { None } } } fn main() { let mut iter = NonFusedIterator::default(); assert_eq!(iter.next(), Some(0)); assert_eq!(iter.next(), Some(1)); assert_eq!(iter.next(), Some(2)); assert_eq!(iter.next(), Some(3)); assert_eq!(iter.next(), Some(4)); assert_eq!(iter.next(), None); assert_eq!(iter.next(), Some(6)); assert_eq!(iter.next(), None); assert_eq!(iter.next(), Some(8)); assert_eq!(iter.next(), None); let mut iter = NonFusedIterator::default().map_windows(|arr: &[_; 2]| *arr); assert_eq!(iter.next(), Some([0, 1])); assert_eq!(iter.next(), Some([1, 2])); assert_eq!(iter.next(), Some([2, 3])); assert_eq!(iter.next(), Some([3, 4])); assert_eq!(iter.next(), None); assert_eq!(iter.next(), None); assert_eq!(iter.next(), None); assert_eq!(iter.next(), None); }