Skip to content

Commit f2eade7

Browse files
committed
test and fix stride ordering subroutine
1 parent 2bf599d commit f2eade7

File tree

1 file changed

+18
-4
lines changed

1 file changed

+18
-4
lines changed

src/dimension.rs

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,12 @@ fn fastest_varying_order<D: Dimension>(strides: &D) -> D
2626
let mut sorted = strides.clone();
2727
sorted.slice_mut().sort();
2828
let mut res = strides.clone();
29-
for (ind, val) in sorted.slice().iter().enumerate() {
30-
res.slice_mut()[ind] = sorted.slice()
31-
.binary_search(val)
32-
.expect("should be present");
29+
for (ind, val) in strides.slice().iter().enumerate() {
30+
// cannot binary search in unsorted...
31+
let sorted_ind = sorted.slice()
32+
.binary_search(val)
33+
.expect("should be present");
34+
res.slice_mut()[sorted_ind] = ind;
3335
}
3436
res
3537
}
@@ -603,3 +605,15 @@ unsafe impl<'a> NdIndex for &'a [Ix] {
603605
Some(offset)
604606
}
605607
}
608+
609+
#[cfg(test)]
610+
mod test {
611+
use super::Dimension;
612+
613+
#[test]
614+
fn fastest_varying_order() {
615+
let strides = (2, 8, 4, 1);
616+
let order = super::fastest_varying_order(&strides);
617+
assert_eq!(order.slice(), &[3, 0, 2, 1]);
618+
}
619+
}

0 commit comments

Comments
 (0)