@@ -69,3 +69,77 @@ pub const CORDER: u32 = 0b01;
6969pub const FORDER : u32 = 0b10 ;
7070pub const CPREFER : u32 = 0b0100 ;
7171pub const FPREFER : u32 = 0b1000 ;
72+
73+
74+ #[ cfg( test) ]
75+ mod tests {
76+ use super :: * ;
77+ use crate :: imp_prelude:: * ;
78+ use crate :: NdProducer ;
79+
80+ type M = Array2 < f32 > ;
81+
82+ #[ test]
83+ fn contig_layouts ( ) {
84+ let a = M :: zeros ( ( 5 , 5 ) ) ;
85+ let b = M :: zeros ( ( 5 , 5 ) . f ( ) ) ;
86+ let ac = a. view ( ) . layout ( ) ;
87+ let af = b. view ( ) . layout ( ) ;
88+ assert ! ( ac. is( CORDER ) && ac. is( CPREFER ) ) ;
89+ assert ! ( !ac. is( FORDER ) && !ac. is( FPREFER ) ) ;
90+ assert ! ( !af. is( CORDER ) && !af. is( CPREFER ) ) ;
91+ assert ! ( af. is( FORDER ) && af. is( FPREFER ) ) ;
92+ }
93+
94+ #[ test]
95+ fn stride_layouts ( ) {
96+ let a = M :: zeros ( ( 5 , 5 ) ) ;
97+
98+ {
99+ let v1 = a. slice ( s ! [ 1 .., ..] ) . layout ( ) ;
100+ let v2 = a. slice ( s ! [ .., 1 ..] ) . layout ( ) ;
101+
102+ assert ! ( v1. is( CORDER ) && v1. is( CPREFER ) ) ;
103+ assert ! ( !v1. is( FORDER ) && !v1. is( FPREFER ) ) ;
104+ assert ! ( !v2. is( CORDER ) && v2. is( CPREFER ) ) ;
105+ assert ! ( !v2. is( FORDER ) && !v2. is( FPREFER ) ) ;
106+ }
107+
108+ let b = M :: zeros ( ( 5 , 5 ) . f ( ) ) ;
109+
110+ {
111+ let v1 = b. slice ( s ! [ 1 .., ..] ) . layout ( ) ;
112+ let v2 = b. slice ( s ! [ .., 1 ..] ) . layout ( ) ;
113+
114+ assert ! ( !v1. is( CORDER ) && !v1. is( CPREFER ) ) ;
115+ assert ! ( !v1. is( FORDER ) && v1. is( FPREFER ) ) ;
116+ assert ! ( !v2. is( CORDER ) && !v2. is( CPREFER ) ) ;
117+ assert ! ( v2. is( FORDER ) && v2. is( FPREFER ) ) ;
118+ }
119+ }
120+
121+ #[ test]
122+ fn skip_layouts ( ) {
123+ let a = M :: zeros ( ( 5 , 5 ) ) ;
124+ {
125+ let v1 = a. slice ( s ! [ ..; 2 , ..] ) . layout ( ) ;
126+ let v2 = a. slice ( s ! [ .., ..; 2 ] ) . layout ( ) ;
127+
128+ assert ! ( !v1. is( CORDER ) && v1. is( CPREFER ) ) ;
129+ assert ! ( !v1. is( FORDER ) && !v1. is( FPREFER ) ) ;
130+ assert ! ( !v2. is( CORDER ) && !v2. is( CPREFER ) ) ;
131+ assert ! ( !v2. is( FORDER ) && !v2. is( FPREFER ) ) ;
132+ }
133+
134+ let b = M :: zeros ( ( 5 , 5 ) . f ( ) ) ;
135+ {
136+ let v1 = b. slice ( s ! [ ..; 2 , ..] ) . layout ( ) ;
137+ let v2 = b. slice ( s ! [ .., ..; 2 ] ) . layout ( ) ;
138+
139+ assert ! ( !v1. is( CORDER ) && !v1. is( CPREFER ) ) ;
140+ assert ! ( !v1. is( FORDER ) && !v1. is( FPREFER ) ) ;
141+ assert ! ( !v2. is( CORDER ) && !v2. is( CPREFER ) ) ;
142+ assert ! ( !v2. is( FORDER ) && v2. is( FPREFER ) ) ;
143+ }
144+ }
145+ }
0 commit comments