Skip to content

Commit 569711f

Browse files
committed
New bench functions. O(n)
1 parent 254a1a7 commit 569711f

File tree

1 file changed

+63
-3
lines changed

1 file changed

+63
-3
lines changed

modules/mexpreval/benches/eval_f_exprs_bench.rs

Lines changed: 63 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ use mexpreval::eval_f_exprs;
33
use std::ffi::CString;
44
use std::os::raw::c_char;
55

6-
fn bench_eval(c: &mut Criterion) {
6+
fn lotka_volterra_bench_eval(c: &mut Criterion) {
77
let num_exprs = 2;
88
let num_params = 4;
99

@@ -17,7 +17,7 @@ fn bench_eval(c: &mut Criterion) {
1717
];
1818
let expr_ptrs: Vec<*const c_char> = expr_strings.iter().map(|s| s.as_ptr()).collect();
1919

20-
c.bench_function("eval_f_exprs", |b| {
20+
c.bench_function("lotka_volterra", |b| {
2121
b.iter(|| unsafe {
2222
eval_f_exprs(
2323
0.0,
@@ -32,5 +32,65 @@ fn bench_eval(c: &mut Criterion) {
3232
});
3333
}
3434

35-
criterion_group!(benches, bench_eval);
35+
fn logistic_model_bench_eval(c: &mut Criterion) {
36+
let num_exprs = 1;
37+
let num_params = 2;
38+
39+
let mut y = vec![1.0];
40+
let mut ydot = vec![0.0; num_exprs];
41+
let mut params = vec![0.1, 0.2];
42+
43+
let expr_strings = [
44+
CString::new("p1 * y1 * (1 - y1 / p2)").unwrap()
45+
];
46+
let expr_ptrs: Vec<*const c_char> = expr_strings.iter().map(|s| s.as_ptr()).collect();
47+
48+
c.bench_function("logistic_model", |b| {
49+
b.iter(|| unsafe {
50+
eval_f_exprs(
51+
0.0,
52+
y.as_mut_ptr(),
53+
ydot.as_mut_ptr(),
54+
params.as_mut_ptr(),
55+
num_params,
56+
expr_ptrs.as_ptr(),
57+
num_exprs,
58+
)
59+
});
60+
});
61+
}
62+
63+
fn alpha_pinene_bench_eval(c: &mut Criterion) {
64+
let num_exprs = 5;
65+
let num_params = 5;
66+
67+
let mut y = vec![1.0, 1.0, 1.0, 1.0, 1.0];
68+
let mut ydot = vec![0.0; num_exprs];
69+
let mut params = vec![0.1, 0.2, 0.2, 0.2, 0.2];
70+
71+
let expr_strings = [
72+
CString::new("-(p1 + p2) * y1").unwrap(),
73+
CString::new("p1 * y1").unwrap(),
74+
CString::new("p2 * y1 - (p3 + p4) * y3 + p5 * y5").unwrap(),
75+
CString::new("p3 * y3").unwrap(),
76+
CString::new("p4 * y3 - p5 * y5").unwrap(),
77+
];
78+
let expr_ptrs: Vec<*const c_char> = expr_strings.iter().map(|s| s.as_ptr()).collect();
79+
80+
c.bench_function("logistic_model", |b| {
81+
b.iter(|| unsafe {
82+
eval_f_exprs(
83+
0.0,
84+
y.as_mut_ptr(),
85+
ydot.as_mut_ptr(),
86+
params.as_mut_ptr(),
87+
num_params,
88+
expr_ptrs.as_ptr(),
89+
num_exprs,
90+
)
91+
});
92+
});
93+
}
94+
95+
criterion_group!(benches, lotka_volterra_bench_eval, logistic_model_bench_eval, alpha_pinene_bench_eval);
3696
criterion_main!(benches);

0 commit comments

Comments
 (0)