@@ -31,11 +31,19 @@ fn append_row_wrong_layout() {
31
31
a. append_row ( aview1 ( & [ 4. , 5. , 6. , 7. ] ) ) . unwrap ( ) ;
32
32
assert_eq ! ( a. shape( ) , & [ 2 , 4 ] ) ;
33
33
34
- //assert_eq!(a.append_column(aview1(&[1., 2.])), Err(ShapeError::from_kind(ErrorKind::IncompatibleLayout)));
35
-
36
34
assert_eq ! ( a,
37
35
array![ [ 0. , 1. , 2. , 3. ] ,
38
36
[ 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
+
39
47
40
48
// Clone the array
41
49
@@ -49,6 +57,92 @@ fn append_row_wrong_layout() {
49
57
[ 4. , 5. , 6. , 7. , 2. ] ] ) ;
50
58
}
51
59
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
+
52
146
#[ test]
53
147
fn append_row_error ( ) {
54
148
let mut a = Array :: zeros ( ( 3 , 4 ) ) ;
0 commit comments