libcore: Fix assertion failure in vec::windowe.
vec::windowed fails if given window size is greater than vector length + 1.
This commit is contained in:
parent
6510fd9254
commit
a1a9326c6d
1 changed files with 3 additions and 0 deletions
|
@ -1516,6 +1516,7 @@ pub fn each_permutation<T:Copy>(v: &[T], put: &fn(ts: &[T]) -> bool) {
|
||||||
#[cfg(stage0)] // XXX: lifetimes!
|
#[cfg(stage0)] // XXX: lifetimes!
|
||||||
pub fn windowed<T>(n: uint, v: &[T], it: &fn(&[T]) -> bool) {
|
pub fn windowed<T>(n: uint, v: &[T], it: &fn(&[T]) -> bool) {
|
||||||
assert!(1u <= n);
|
assert!(1u <= n);
|
||||||
|
if n > v.len() { return; }
|
||||||
for uint::range(0, v.len() - n + 1) |i| {
|
for uint::range(0, v.len() - n + 1) |i| {
|
||||||
if !it(v.slice(i, i+n)) { return }
|
if !it(v.slice(i, i+n)) { return }
|
||||||
}
|
}
|
||||||
|
@ -1525,6 +1526,7 @@ pub fn windowed<T>(n: uint, v: &[T], it: &fn(&[T]) -> bool) {
|
||||||
#[cfg(stage3)]
|
#[cfg(stage3)]
|
||||||
pub fn windowed<'r, T>(n: uint, v: &'r [T], it: &fn(&'r [T]) -> bool) {
|
pub fn windowed<'r, T>(n: uint, v: &'r [T], it: &fn(&'r [T]) -> bool) {
|
||||||
assert!(1u <= n);
|
assert!(1u <= n);
|
||||||
|
if n > v.len() { return; }
|
||||||
for uint::range(0, v.len() - n + 1) |i| {
|
for uint::range(0, v.len() - n + 1) |i| {
|
||||||
if !it(v.slice(i, i + n)) { return }
|
if !it(v.slice(i, i + n)) { return }
|
||||||
}
|
}
|
||||||
|
@ -3833,6 +3835,7 @@ mod tests {
|
||||||
t(3, &[&[1,2,3],&[2,3,4],&[3,4,5],&[4,5,6]]);
|
t(3, &[&[1,2,3],&[2,3,4],&[3,4,5],&[4,5,6]]);
|
||||||
t(4, &[&[1,2,3,4],&[2,3,4,5],&[3,4,5,6]]);
|
t(4, &[&[1,2,3,4],&[2,3,4,5],&[3,4,5,6]]);
|
||||||
t(7, &[]);
|
t(7, &[]);
|
||||||
|
t(8, &[]);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
|
Loading…
Reference in a new issue