Skip to content

Commit 3f22d0d

Browse files
committed
Add tests
1 parent 5b834eb commit 3f22d0d

File tree

2 files changed

+44
-2
lines changed

2 files changed

+44
-2
lines changed

library/core/src/slice/iter/macros.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,7 @@ macro_rules! iterator {
165165
#[inline]
166166
fn advance_by(&mut self, n: usize) -> Result<(), usize>{
167167
let advance = cmp::min(n, len!(self));
168-
// SAFETY: `advance` does not exceed `self.len()` by construction
168+
// SAFETY: By construction, `advance` does not exceed `self.len()`.
169169
unsafe { self.post_inc_start(advance as isize) };
170170
if advance == n { Ok(()) } else { Err(advance) }
171171
}
@@ -346,7 +346,7 @@ macro_rules! iterator {
346346
#[inline]
347347
fn advance_back_by(&mut self, n: usize) -> Result<(), usize> {
348348
let advance = cmp::min(n, len!(self));
349-
// SAFETY: `advance` does not exceed `self.len()` by construction
349+
// SAFETY: By construction, `advance` does not exceed `self.len()`.
350350
unsafe { self.pre_dec_end(advance as isize) };
351351
if advance == n { Ok(()) } else { Err(advance) }
352352
}

library/core/tests/slice.rs

+42
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,48 @@ fn test_partition_point() {
122122
assert_eq!(b.partition_point(|&x| x < 8), 5);
123123
}
124124

125+
#[test]
126+
fn test_iterator_advance_by() {
127+
let v = &[0, 1, 2, 3, 4];
128+
129+
for i in 0..=v.len() {
130+
let mut iter = v.iter();
131+
iter.advance_by(i).unwrap();
132+
assert_eq!(iter.as_slice(), &v[i..]);
133+
}
134+
135+
let mut iter = v.iter();
136+
assert_eq!(iter.advance_by(v.len() + 1), Err(v.len()));
137+
assert_eq!(iter.as_slice(), &[]);
138+
139+
let mut iter = v.iter();
140+
iter.advance_by(3).unwrap();
141+
assert_eq!(iter.as_slice(), &v[3..]);
142+
iter.advance_by(2).unwrap();
143+
assert_eq!(iter.as_slice(), &[]);
144+
}
145+
146+
#[test]
147+
fn test_iterator_advance_back_by() {
148+
let v = &[0, 1, 2, 3, 4];
149+
150+
for i in 0..=v.len() {
151+
let mut iter = v.iter();
152+
iter.advance_back_by(i).unwrap();
153+
assert_eq!(iter.as_slice(), &v[..v.len() - i]);
154+
}
155+
156+
let mut iter = v.iter();
157+
assert_eq!(iter.advance_back_by(v.len() + 1), Err(v.len()));
158+
assert_eq!(iter.as_slice(), &[]);
159+
160+
let mut iter = v.iter();
161+
iter.advance_back_by(3).unwrap();
162+
assert_eq!(iter.as_slice(), &v[..v.len() - 3]);
163+
iter.advance_back_by(2).unwrap();
164+
assert_eq!(iter.as_slice(), &[]);
165+
}
166+
125167
#[test]
126168
fn test_iterator_nth() {
127169
let v: &[_] = &[0, 1, 2, 3, 4];

0 commit comments

Comments
 (0)