@@ -31,11 +31,19 @@ fn append_row_wrong_layout() {
3131 a. append_row ( aview1 ( & [ 4. , 5. , 6. , 7. ] ) ) . unwrap ( ) ;
3232 assert_eq ! ( a. shape( ) , & [ 2 , 4 ] ) ;
3333
34- //assert_eq!(a.append_column(aview1(&[1., 2.])), Err(ShapeError::from_kind(ErrorKind::IncompatibleLayout)));
35-
3634 assert_eq ! ( a,
3735 array![ [ 0. , 1. , 2. , 3. ] ,
3836 [ 4. , 5. , 6. , 7. ] ] ) ;
37+ assert_eq ! ( a. strides( ) , & [ 4 , 1 ] ) ;
38+
39+ // Changing the memory layout to fit the next append
40+ let mut a2 = a. clone ( ) ;
41+ a2. append_column ( aview1 ( & [ 1. , 2. ] ) ) . unwrap ( ) ;
42+ assert_eq ! ( a2,
43+ array![ [ 0. , 1. , 2. , 3. , 1. ] ,
44+ [ 4. , 5. , 6. , 7. , 2. ] ] ) ;
45+ assert_eq ! ( a2. strides( ) , & [ 1 , 2 ] ) ;
46+
3947
4048 // Clone the array
4149
@@ -49,6 +57,92 @@ fn append_row_wrong_layout() {
4957 [ 4. , 5. , 6. , 7. , 2. ] ] ) ;
5058}
5159
60+ #[ test]
61+ fn append_row_neg_stride_1 ( ) {
62+ let mut a = Array :: zeros ( ( 0 , 4 ) ) ;
63+ a. append_row ( aview1 ( & [ 0. , 1. , 2. , 3. ] ) ) . unwrap ( ) ;
64+ a. append_row ( aview1 ( & [ 4. , 5. , 6. , 7. ] ) ) . unwrap ( ) ;
65+ assert_eq ! ( a. shape( ) , & [ 2 , 4 ] ) ;
66+
67+ assert_eq ! ( a,
68+ array![ [ 0. , 1. , 2. , 3. ] ,
69+ [ 4. , 5. , 6. , 7. ] ] ) ;
70+ assert_eq ! ( a. strides( ) , & [ 4 , 1 ] ) ;
71+
72+ a. invert_axis ( Axis ( 0 ) ) ;
73+
74+ // Changing the memory layout to fit the next append
75+ let mut a2 = a. clone ( ) ;
76+ println ! ( "a = {:?}" , a) ;
77+ println ! ( "a2 = {:?}" , a2) ;
78+ a2. append_column ( aview1 ( & [ 1. , 2. ] ) ) . unwrap ( ) ;
79+ assert_eq ! ( a2,
80+ array![ [ 4. , 5. , 6. , 7. , 1. ] ,
81+ [ 0. , 1. , 2. , 3. , 2. ] ] ) ;
82+ assert_eq ! ( a2. strides( ) , & [ 1 , 2 ] ) ;
83+
84+ a. invert_axis ( Axis ( 1 ) ) ;
85+ let mut a3 = a. clone ( ) ;
86+ a3. append_row ( aview1 ( & [ 4. , 5. , 6. , 7. ] ) ) . unwrap ( ) ;
87+ assert_eq ! ( a3,
88+ array![ [ 7. , 6. , 5. , 4. ] ,
89+ [ 3. , 2. , 1. , 0. ] ,
90+ [ 4. , 5. , 6. , 7. ] ] ) ;
91+ assert_eq ! ( a3. strides( ) , & [ 4 , 1 ] ) ;
92+
93+ a. invert_axis ( Axis ( 0 ) ) ;
94+ let mut a4 = a. clone ( ) ;
95+ a4. append_row ( aview1 ( & [ 4. , 5. , 6. , 7. ] ) ) . unwrap ( ) ;
96+ assert_eq ! ( a4,
97+ array![ [ 3. , 2. , 1. , 0. ] ,
98+ [ 7. , 6. , 5. , 4. ] ,
99+ [ 4. , 5. , 6. , 7. ] ] ) ;
100+ assert_eq ! ( a4. strides( ) , & [ 4 , -1 ] ) ;
101+ }
102+
103+ #[ test]
104+ fn append_row_neg_stride_2 ( ) {
105+ let mut a = Array :: zeros ( ( 0 , 4 ) ) ;
106+ a. append_row ( aview1 ( & [ 0. , 1. , 2. , 3. ] ) ) . unwrap ( ) ;
107+ a. append_row ( aview1 ( & [ 4. , 5. , 6. , 7. ] ) ) . unwrap ( ) ;
108+ assert_eq ! ( a. shape( ) , & [ 2 , 4 ] ) ;
109+
110+ assert_eq ! ( a,
111+ array![ [ 0. , 1. , 2. , 3. ] ,
112+ [ 4. , 5. , 6. , 7. ] ] ) ;
113+ assert_eq ! ( a. strides( ) , & [ 4 , 1 ] ) ;
114+
115+ a. invert_axis ( Axis ( 1 ) ) ;
116+
117+ // Changing the memory layout to fit the next append
118+ let mut a2 = a. clone ( ) ;
119+ println ! ( "a = {:?}" , a) ;
120+ println ! ( "a2 = {:?}" , a2) ;
121+ a2. append_column ( aview1 ( & [ 1. , 2. ] ) ) . unwrap ( ) ;
122+ assert_eq ! ( a2,
123+ array![ [ 3. , 2. , 1. , 0. , 1. ] ,
124+ [ 7. , 6. , 5. , 4. , 2. ] ] ) ;
125+ assert_eq ! ( a2. strides( ) , & [ 1 , 2 ] ) ;
126+
127+ a. invert_axis ( Axis ( 0 ) ) ;
128+ let mut a3 = a. clone ( ) ;
129+ a3. append_row ( aview1 ( & [ 4. , 5. , 6. , 7. ] ) ) . unwrap ( ) ;
130+ assert_eq ! ( a3,
131+ array![ [ 7. , 6. , 5. , 4. ] ,
132+ [ 3. , 2. , 1. , 0. ] ,
133+ [ 4. , 5. , 6. , 7. ] ] ) ;
134+ assert_eq ! ( a3. strides( ) , & [ 4 , 1 ] ) ;
135+
136+ a. invert_axis ( Axis ( 1 ) ) ;
137+ let mut a4 = a. clone ( ) ;
138+ a4. append_row ( aview1 ( & [ 4. , 5. , 6. , 7. ] ) ) . unwrap ( ) ;
139+ assert_eq ! ( a4,
140+ array![ [ 4. , 5. , 6. , 7. ] ,
141+ [ 0. , 1. , 2. , 3. ] ,
142+ [ 4. , 5. , 6. , 7. ] ] ) ;
143+ assert_eq ! ( a4. strides( ) , & [ 4 , 1 ] ) ;
144+ }
145+
52146#[ test]
53147fn append_row_error ( ) {
54148 let mut a = Array :: zeros ( ( 3 , 4 ) ) ;
0 commit comments