Skip to content

Commit a6c6fce

Browse files
committed
append: Add more append tests for negative stride arrays
1 parent a99086f commit a6c6fce

File tree

1 file changed

+96
-2
lines changed

1 file changed

+96
-2
lines changed

tests/append.rs

Lines changed: 96 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -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]
53147
fn append_row_error() {
54148
let mut a = Array::zeros((3, 4));

0 commit comments

Comments
 (0)