Some(snd)
}
}
+
+ #[inline]
+ fn nth_back(&mut self, n: usize) {
+ let (end, overflow) = self.v.len().overflowing_sub(n);
+ if end < self.v.len() || overflow {
+ self.v = &[];
+ None
+ } else {
+ let start = match end.checked_sub(self.chunk_size) {
+ Some(sum) => cmp::min(self.v.len(), sum),
+ None => self.v.len(),
+ };
+ let nth = &self.v[start..end];
+ self.v = &self.v[end..];
+ }
+ }
}
#[stable(feature = "rust1", since = "1.0.0")]
assert_eq!(c2.next(), None);
}
+#[test]
+fn test_chunks_nth_back() {
+ let v: &[i32] = &[0, 1, 2, 3, 4, 5];
+ let mut c = v.chunks(2);
+ assert_eq!(c.nth_back(1).unwrap(), &[2, 3]);
+ assert_eq!(c.next().unwrap(), &[4, 5]);
+
+ let v2: &[i32] = &[0, 1, 2, 3, 4];
+ let mut c2 = v2.chunks(3);
+ assert_eq!(c2.nth_back(1).unwrap(), &[0, 1]);
+ assert_eq!(c2.next(), None);
+}
+
#[test]
fn test_chunks_last() {
let v: &[i32] = &[0, 1, 2, 3, 4, 5];