implement nth_back for Range
This commit is contained in:
@@ -281,6 +281,19 @@ impl<A: Step> DoubleEndedIterator for ops::Range<A> {
|
|||||||
None
|
None
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[inline]
|
||||||
|
fn nth_back(&mut self, n: usize) -> Option<A> {
|
||||||
|
if let Some(minus_n) = self.end.sub_usize(n) {
|
||||||
|
if minus_n > self.start {
|
||||||
|
self.end = minus_n.sub_one();
|
||||||
|
return Some(self.end.clone())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
self.end = self.start.clone();
|
||||||
|
None
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[stable(feature = "fused", since = "1.26.0")]
|
#[stable(feature = "fused", since = "1.26.0")]
|
||||||
|
|||||||
@@ -1657,6 +1657,23 @@ fn test_range_nth() {
|
|||||||
assert_eq!(r, 20..20);
|
assert_eq!(r, 20..20);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_range_nth_back() {
|
||||||
|
assert_eq!((10..15).nth_back(0), Some(14));
|
||||||
|
assert_eq!((10..15).nth_back(1), Some(13));
|
||||||
|
assert_eq!((10..15).nth_back(4), Some(10));
|
||||||
|
assert_eq!((10..15).nth_back(5), None);
|
||||||
|
assert_eq!((-120..80_i8).nth_back(199), Some(-120));
|
||||||
|
|
||||||
|
let mut r = 10..20;
|
||||||
|
assert_eq!(r.nth_back(2), Some(17));
|
||||||
|
assert_eq!(r, 10..17);
|
||||||
|
assert_eq!(r.nth_back(2), Some(14));
|
||||||
|
assert_eq!(r, 10..14);
|
||||||
|
assert_eq!(r.nth_back(10), None);
|
||||||
|
assert_eq!(r, 10..10);
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_range_from_nth() {
|
fn test_range_from_nth() {
|
||||||
assert_eq!((10..).nth(0), Some(10));
|
assert_eq!((10..).nth(0), Some(10));
|
||||||
|
|||||||
Reference in New Issue
Block a user