stride 0.3.0

A strided slice type
Documentation
use stride::Stride;

#[test]
fn stride_iter() {
    let stride = Stride::<_, 2>::new(&[1, 2, 3, 4, 5, 6]);
    let vec: Vec<_> = stride.iter().collect();
    assert_eq!(vec, [&1, &3, &5]);
}

#[test]
fn stride_iter_mut() {
    let slice = &mut [1, 2, 3, 4, 5, 6];
    let stride = Stride::<_, 2>::new_mut(slice);
    for elem in stride.iter_mut() {
        *elem *= 2;
    }
    assert_eq!(slice, &[2, 2, 6, 4, 10, 6]);
}

#[test]
fn stride_iter_rev() {
    let stride = Stride::<_, 2>::new(&[1, 2, 3, 4, 5, 6]);
    let vec: Vec<_> = stride.iter().rev().collect();
    assert_eq!(vec, [&5, &3, &1]);
}

#[test]
fn stride_iter_skip_rev() {
    let stride = Stride::<_, 2>::new(&[1, 2, 3, 4, 5, 6]);
    let vec: Vec<_> = stride.iter().skip(1).rev().skip(1).collect();
    assert_eq!(vec, [&3]);
}

#[test]
fn stride_iter_len() {
    let stride = Stride::<_, 2>::new(&[1, 2, 3, 4, 5, 6]);
    assert_eq!(stride.iter().len(), 3);
}