@@ -78,6 +78,30 @@ mod tests {
78
78
use crate :: NdProducer ;
79
79
80
80
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
+ }
81
105
82
106
#[ test]
83
107
fn contig_layouts ( ) {
@@ -91,6 +115,34 @@ mod tests {
91
115
assert ! ( af. is( FORDER ) && af. is( FPREFER ) ) ;
92
116
}
93
117
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
+
94
146
#[ test]
95
147
fn stride_layouts ( ) {
96
148
let a = M :: zeros ( ( 5 , 5 ) ) ;
0 commit comments