@@ -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