Skip to content

Commit e67f1c0

Browse files
committed
auto merge of #5968 : gifnksm/rust/windowed, r=brson
vec::windowed fails if given window size is greater than vector length + 1. ```rust for vec::windowed(7, &[1,2,3,4,5,6]) |vs| { fail!(); } // => do nothing for vec::windowed(8, &[1,2,3,4,5,6]) |vs| { fail!(); } // => assertion failure in vec::slice ```
2 parents 047ba26 + a1a9326 commit e67f1c0

File tree

1 file changed

+3
-0
lines changed

1 file changed

+3
-0
lines changed

src/libcore/vec.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1542,6 +1542,7 @@ pub fn each_permutation<T:Copy>(v: &[T], put: &fn(ts: &[T]) -> bool) {
15421542
#[cfg(stage0)] // XXX: lifetimes!
15431543
pub fn windowed<T>(n: uint, v: &[T], it: &fn(&[T]) -> bool) {
15441544
assert!(1u <= n);
1545+
if n > v.len() { return; }
15451546
for uint::range(0, v.len() - n + 1) |i| {
15461547
if !it(v.slice(i, i+n)) { return }
15471548
}
@@ -1551,6 +1552,7 @@ pub fn windowed<T>(n: uint, v: &[T], it: &fn(&[T]) -> bool) {
15511552
#[cfg(stage3)]
15521553
pub fn windowed<'r, T>(n: uint, v: &'r [T], it: &fn(&'r [T]) -> bool) {
15531554
assert!(1u <= n);
1555+
if n > v.len() { return; }
15541556
for uint::range(0, v.len() - n + 1) |i| {
15551557
if !it(v.slice(i, i + n)) { return }
15561558
}
@@ -3910,6 +3912,7 @@ mod tests {
39103912
t(3, &[&[1,2,3],&[2,3,4],&[3,4,5],&[4,5,6]]);
39113913
t(4, &[&[1,2,3,4],&[2,3,4,5],&[3,4,5,6]]);
39123914
t(7, &[]);
3915+
t(8, &[]);
39133916
}
39143917

39153918
#[test]

0 commit comments

Comments
 (0)