Skip to content

Commit f954bf8

Browse files
committed
TEST: Add tests for C+F contig layouts
1 parent 9b8b455 commit f954bf8

File tree

1 file changed

+52
-0
lines changed

1 file changed

+52
-0
lines changed

src/layout/mod.rs

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,30 @@ mod tests {
7878
use crate::NdProducer;
7979

8080
type M = Array2<f32>;
81+
type M1 = Array1<f32>;
82+
type M0 = Array0<f32>;
83+
84+
macro_rules! assert_layouts {
85+
($mat:expr, $($layout:expr),*) => {{
86+
let layout = $mat.view().layout();
87+
$(
88+
assert!(layout.is($layout), "Assertion failed: array {:?} is not layout {}",
89+
$mat,
90+
stringify!($layout));
91+
)*
92+
}}
93+
}
94+
95+
macro_rules! assert_not_layouts {
96+
($mat:expr, $($layout:expr),*) => {{
97+
let layout = $mat.view().layout();
98+
$(
99+
assert!(!layout.is($layout), "Assertion failed: array {:?} show not have layout {}",
100+
$mat,
101+
stringify!($layout));
102+
)*
103+
}}
104+
}
81105

82106
#[test]
83107
fn contig_layouts() {
@@ -91,6 +115,34 @@ mod tests {
91115
assert!(af.is(FORDER) && af.is(FPREFER));
92116
}
93117

118+
#[test]
119+
fn contig_cf_layouts() {
120+
let a = M::zeros((5, 1));
121+
let b = M::zeros((1, 5).f());
122+
assert_layouts!(a, CORDER, CPREFER, FORDER, FPREFER);
123+
assert_layouts!(b, CORDER, CPREFER, FORDER, FPREFER);
124+
125+
let a = M1::zeros(5);
126+
let b = M1::zeros(5.f());
127+
assert_layouts!(a, CORDER, CPREFER, FORDER, FPREFER);
128+
assert_layouts!(b, CORDER, CPREFER, FORDER, FPREFER);
129+
130+
let a = M0::zeros(());
131+
assert_layouts!(a, CORDER, CPREFER, FORDER, FPREFER);
132+
133+
let a = M::zeros((5, 5));
134+
let b = M::zeros((5, 5).f());
135+
let arow = a.slice(s![..1, ..]);
136+
let bcol = b.slice(s![.., ..1]);
137+
assert_layouts!(arow, CORDER, CPREFER, FORDER, FPREFER);
138+
assert_layouts!(bcol, CORDER, CPREFER, FORDER, FPREFER);
139+
140+
let acol = a.slice(s![.., ..1]);
141+
let brow = b.slice(s![..1, ..]);
142+
assert_not_layouts!(acol, CORDER, CPREFER, FORDER, FPREFER);
143+
assert_not_layouts!(brow, CORDER, CPREFER, FORDER, FPREFER);
144+
}
145+
94146
#[test]
95147
fn stride_layouts() {
96148
let a = M::zeros((5, 5));

0 commit comments

Comments
 (0)