Skip to content

Commit da365be

Browse files
committed
TEST: Add benchmarks for Result<_, ShapeError> methods
1 parent a141bc4 commit da365be

File tree

1 file changed

+110
-0
lines changed

1 file changed

+110
-0
lines changed

benches/error-handling.rs

Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
#![feature(test)]
2+
#![allow(
3+
clippy::many_single_char_names,
4+
clippy::deref_addrof,
5+
clippy::unreadable_literal,
6+
clippy::many_single_char_names
7+
)]
8+
extern crate test;
9+
use test::Bencher;
10+
11+
use ndarray::prelude::*;
12+
use ndarray::ErrorKind;
13+
14+
// Use ZST elements to remove allocation from the benchmarks
15+
16+
#[derive(Copy, Clone, Debug)]
17+
struct Zst;
18+
19+
type A4 = Array4<Zst>;
20+
21+
#[bench]
22+
fn from_elem(bench: &mut Bencher) {
23+
bench.iter(|| {
24+
A4::from_elem((1, 2, 3, 4), Zst)
25+
})
26+
}
27+
28+
#[bench]
29+
fn from_shape_vec_ok(bench: &mut Bencher) {
30+
bench.iter(|| {
31+
let v: Vec<Zst> = vec![Zst; 1 * 2 * 3 * 4];
32+
let x = A4::from_shape_vec((1, 2, 3, 4).strides((24, 12, 4, 1)), v);
33+
debug_assert!(x.is_ok(), "problem with {:?}", x);
34+
x
35+
})
36+
}
37+
38+
#[bench]
39+
fn from_shape_vec_fail(bench: &mut Bencher) {
40+
bench.iter(|| {
41+
let v: Vec<Zst> = vec![Zst; 1 * 2 * 3 * 4];
42+
let x = A4::from_shape_vec((1, 2, 3, 4).strides((4, 3, 2, 1)), v);
43+
debug_assert!(x.is_err());
44+
x
45+
})
46+
}
47+
48+
#[bench]
49+
fn into_shape_fail(bench: &mut Bencher) {
50+
let a = A4::from_elem((1, 2, 3, 4), Zst);
51+
let v = a.view();
52+
bench.iter(|| {
53+
v.clone().into_shape((5, 3, 2, 1))
54+
})
55+
}
56+
57+
#[bench]
58+
fn into_shape_ok_c(bench: &mut Bencher) {
59+
let a = A4::from_elem((1, 2, 3, 4), Zst);
60+
let v = a.view();
61+
bench.iter(|| {
62+
v.clone().into_shape((4, 3, 2, 1))
63+
})
64+
}
65+
66+
#[bench]
67+
fn into_shape_ok_f(bench: &mut Bencher) {
68+
let a = A4::from_elem((1, 2, 3, 4).f(), Zst);
69+
let v = a.view();
70+
bench.iter(|| {
71+
v.clone().into_shape((4, 3, 2, 1))
72+
})
73+
}
74+
75+
#[bench]
76+
fn stack_ok(bench: &mut Bencher) {
77+
let a = Array::from_elem((15, 15), Zst);
78+
let rows = a.rows().into_iter().collect::<Vec<_>>();
79+
bench.iter(|| {
80+
let res = ndarray::stack(Axis(1), &rows);
81+
debug_assert!(res.is_ok(), "err {:?}", res);
82+
res
83+
});
84+
}
85+
86+
#[bench]
87+
fn stack_err_axis(bench: &mut Bencher) {
88+
let a = Array::from_elem((15, 15), Zst);
89+
let rows = a.rows().into_iter().collect::<Vec<_>>();
90+
bench.iter(|| {
91+
let res = ndarray::stack(Axis(2), &rows);
92+
debug_assert!(res.is_err());
93+
res
94+
});
95+
}
96+
97+
#[bench]
98+
fn stack_err_shape(bench: &mut Bencher) {
99+
let a = Array::from_elem((15, 15), Zst);
100+
let rows = a.rows().into_iter()
101+
.enumerate()
102+
.map(|(i, mut row)| { row.slice_collapse(s![..(i as isize)]); row })
103+
.collect::<Vec<_>>();
104+
bench.iter(|| {
105+
let res = ndarray::stack(Axis(1), &rows);
106+
debug_assert!(res.is_err());
107+
debug_assert_eq!(res.clone().unwrap_err().kind(), ErrorKind::IncompatibleShape);
108+
res
109+
});
110+
}

0 commit comments

Comments
 (0)