@@ -69,3 +69,77 @@ pub const CORDER: u32 = 0b01;
69
69
pub const FORDER : u32 = 0b10 ;
70
70
pub const CPREFER : u32 = 0b0100 ;
71
71
pub 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