Skip to content

Commit 7c0f216

Browse files
committed
test and fix stride/dim overlap check
1 parent f2eade7 commit 7c0f216

File tree

3 files changed

+21
-5
lines changed

3 files changed

+21
-5
lines changed

src/dimension.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,13 +47,13 @@ pub fn dim_stride_overlap<D: Dimension>(dim: &D, strides: &D) -> bool
4747
{
4848
let order = fastest_varying_order(strides);
4949

50-
let mut sum = 0;
50+
let mut prev_offset = 1;
5151
for &ind in order.slice().iter() {
5252
let s = strides.slice()[ind];
53-
if (s as isize) < sum {
53+
if (s as isize) < prev_offset {
5454
return true;
5555
}
56-
sum += stride_offset(dim.slice()[ind], s);
56+
prev_offset = stride_offset(dim.slice()[ind], s);
5757
}
5858
false
5959
}

src/lib.rs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,12 @@ use std::marker::PhantomData;
7575

7676
use it::ZipSlices;
7777

78-
pub use dimension::{Dimension, RemoveAxis, can_index_slice};
78+
pub use dimension::{
79+
Dimension,
80+
RemoveAxis,
81+
can_index_slice,
82+
dim_stride_overlap,
83+
};
7984
pub use dimension::NdIndex;
8085
pub use indexes::Indexes;
8186
pub use shape_error::ShapeError;

tests/dimension.rs

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@ use ndarray::{
44
Array,
55
RemoveAxis,
66
arr2,
7-
can_index_slice
7+
can_index_slice,
8+
dim_stride_overlap,
89
};
910

1011
#[test]
@@ -48,3 +49,13 @@ fn slice_indexing_uncommon_strides()
4849
let strides = (2, 4, 12);
4950
assert!(!can_index_slice(&v, &dim, &strides));
5051
}
52+
53+
#[test]
54+
fn overlapping_strides_dim()
55+
{
56+
let dim = (2, 3, 2);
57+
let strides = (5, 2, 1);
58+
assert!(dim_stride_overlap(&dim, &strides));
59+
let strides = (6, 2, 1);
60+
assert!(!dim_stride_overlap(&dim, &strides));
61+
}

0 commit comments

Comments
 (0)