@@ -30,7 +30,7 @@ fn windows_iterator_zero_size() {
3030 a. windows ( Dim ( ( 0 , 0 , 0 ) ) ) ;
3131}
3232
33- /// Test that verifites that no windows are yielded on oversized window sizes.
33+ /// Test that verifies that no windows are yielded on oversized window sizes.
3434#[ test]
3535fn windows_iterator_oversized ( ) {
3636 let a = Array :: from_iter ( 10 ..37 ) . into_shape ( ( 3 , 3 , 3 ) ) . unwrap ( ) ;
@@ -95,6 +95,76 @@ fn windows_iterator_3d() {
9595 ) ;
9696}
9797
98+ /// Test that verifies the `Windows` iterator panics when stride has an axis equal to zero.
99+ #[ test]
100+ #[ should_panic]
101+ fn windows_iterator_stride_axis_zero ( ) {
102+ let a = Array :: from_iter ( 10 ..37 ) . into_shape ( ( 3 , 3 , 3 ) ) . unwrap ( ) ;
103+ a. windows_with_stride ( ( 2 , 2 , 2 ) , ( 0 , 2 , 2 ) ) ;
104+ }
105+
106+ /// Test that verifies that only first window is yielded when stride is oversized on every axis.
107+ #[ test]
108+ fn windows_iterator_only_one_valid_window_for_oversized_stride ( ) {
109+ let a = Array :: from_iter ( 10 ..135 ) . into_shape ( ( 5 , 5 , 5 ) ) . unwrap ( ) ;
110+ let mut iter = a. windows_with_stride ( ( 2 , 2 , 2 ) , ( 8 , 8 , 8 ) ) . into_iter ( ) ; // (4,3,2) doesn't fit into (3,3,3) => oversized!
111+ itertools:: assert_equal (
112+ iter. next ( ) ,
113+ Some ( arr3 ( & [ [ [ 10 , 11 ] , [ 15 , 16 ] ] , [ [ 35 , 36 ] , [ 40 , 41 ] ] ] ) ) ,
114+ ) ;
115+ }
116+
117+ /// Simple test for iterating 1d-arrays via `Windows` with stride.
118+ #[ test]
119+ fn windows_iterator_1d_with_stride ( ) {
120+ let a = Array :: from_iter ( 10 ..20 ) . into_shape ( 10 ) . unwrap ( ) ;
121+ itertools:: assert_equal (
122+ a. windows_with_stride ( 4 , 2 ) ,
123+ vec ! [
124+ arr1( & [ 10 , 11 , 12 , 13 ] ) ,
125+ arr1( & [ 12 , 13 , 14 , 15 ] ) ,
126+ arr1( & [ 14 , 15 , 16 , 17 ] ) ,
127+ arr1( & [ 16 , 17 , 18 , 19 ] ) ,
128+ ] ,
129+ ) ;
130+ }
131+
132+ /// Simple test for iterating 2d-arrays via `Windows` with stride.
133+ #[ test]
134+ fn windows_iterator_2d_with_stride ( ) {
135+ let a = Array :: from_iter ( 10 ..30 ) . into_shape ( ( 5 , 4 ) ) . unwrap ( ) ;
136+ itertools:: assert_equal (
137+ a. windows_with_stride ( ( 3 , 2 ) , ( 2 , 1 ) ) ,
138+ vec ! [
139+ arr2( & [ [ 10 , 11 ] , [ 14 , 15 ] , [ 18 , 19 ] ] ) ,
140+ arr2( & [ [ 11 , 12 ] , [ 15 , 16 ] , [ 19 , 20 ] ] ) ,
141+ arr2( & [ [ 12 , 13 ] , [ 16 , 17 ] , [ 20 , 21 ] ] ) ,
142+ arr2( & [ [ 18 , 19 ] , [ 22 , 23 ] , [ 26 , 27 ] ] ) ,
143+ arr2( & [ [ 19 , 20 ] , [ 23 , 24 ] , [ 27 , 28 ] ] ) ,
144+ arr2( & [ [ 20 , 21 ] , [ 24 , 25 ] , [ 28 , 29 ] ] ) ,
145+ ] ,
146+ ) ;
147+ }
148+
149+ /// Simple test for iterating 3d-arrays via `Windows` with stride.
150+ #[ test]
151+ fn windows_iterator_3d_with_stride ( ) {
152+ let a = Array :: from_iter ( 10 ..74 ) . into_shape ( ( 4 , 4 , 4 ) ) . unwrap ( ) ;
153+ itertools:: assert_equal (
154+ a. windows_with_stride ( ( 2 , 2 , 2 ) , ( 2 , 2 , 2 ) ) ,
155+ vec ! [
156+ arr3( & [ [ [ 10 , 11 ] , [ 14 , 15 ] ] , [ [ 26 , 27 ] , [ 30 , 31 ] ] ] ) ,
157+ arr3( & [ [ [ 12 , 13 ] , [ 16 , 17 ] ] , [ [ 28 , 29 ] , [ 32 , 33 ] ] ] ) ,
158+ arr3( & [ [ [ 18 , 19 ] , [ 22 , 23 ] ] , [ [ 34 , 35 ] , [ 38 , 39 ] ] ] ) ,
159+ arr3( & [ [ [ 20 , 21 ] , [ 24 , 25 ] ] , [ [ 36 , 37 ] , [ 40 , 41 ] ] ] ) ,
160+ arr3( & [ [ [ 42 , 43 ] , [ 46 , 47 ] ] , [ [ 58 , 59 ] , [ 62 , 63 ] ] ] ) ,
161+ arr3( & [ [ [ 44 , 45 ] , [ 48 , 49 ] ] , [ [ 60 , 61 ] , [ 64 , 65 ] ] ] ) ,
162+ arr3( & [ [ [ 50 , 51 ] , [ 54 , 55 ] ] , [ [ 66 , 67 ] , [ 70 , 71 ] ] ] ) ,
163+ arr3( & [ [ [ 52 , 53 ] , [ 56 , 57 ] ] , [ [ 68 , 69 ] , [ 72 , 73 ] ] ] ) ,
164+ ] ,
165+ ) ;
166+ }
167+
98168#[ test]
99169fn test_window_zip ( ) {
100170 let a = Array :: from_iter ( 0 ..64 ) . into_shape ( ( 4 , 4 , 4 ) ) . unwrap ( ) ;
0 commit comments