@@ -3,7 +3,7 @@ use mexpreval::eval_f_exprs;
33use std:: ffi:: CString ;
44use 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) ;
3696criterion_main ! ( benches) ;
0 commit comments