From f3c44419043c9c6f593a17cbf370fd5b53af49c4 Mon Sep 17 00:00:00 2001 From: Jim Turner Date: Thu, 15 Nov 2018 21:26:45 -0500 Subject: [PATCH] Fix is_standard_layout for some cases --- src/impl_methods.rs | 5 ++--- tests/array.rs | 4 ++++ 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/impl_methods.rs b/src/impl_methods.rs index d37695e69..6fec85115 100644 --- a/src/impl_methods.rs +++ b/src/impl_methods.rs @@ -1025,11 +1025,10 @@ impl ArrayBase where S: Data, D: Dimension /// contiguous in memory, it has custom strides, etc. pub fn is_standard_layout(&self) -> bool { fn is_standard_layout(dim: &D, strides: &D) -> bool { - let defaults = dim.default_strides(); - if strides.equal(&defaults) { + if dim.slice().iter().any(|&d| d == 0) { return true; } - if dim.ndim() == 1 { return false; } + let defaults = dim.default_strides(); // check all dimensions -- a dimension of length 1 can have unequal strides for (&dim, &s, &ds) in izip!(dim.slice(), strides.slice(), defaults.slice()) { if dim != 1 && s != ds { diff --git a/tests/array.rs b/tests/array.rs index 2ccafb8a3..5b19ad34d 100644 --- a/tests/array.rs +++ b/tests/array.rs @@ -656,6 +656,10 @@ fn standard_layout() assert!(x1.is_standard_layout()); let x2 = a.subview(Axis(1), 0); assert!(!x2.is_standard_layout()); + let x3 = ArrayView1::from_shape(1.strides(2), &[1]).unwrap(); + assert!(x3.is_standard_layout()); + let x4 = ArrayView2::from_shape((0, 2).strides((0, 1)), &[1, 2]).unwrap(); + assert!(x4.is_standard_layout()); } #[test]