|
1 |
| -use criterion::{criterion_group, criterion_main, BenchmarkId, Criterion}; |
| 1 | +use criterion::{criterion_group, criterion_main, BenchmarkId, Criterion, black_box}; |
2 | 2 |
|
3 | 3 | macro_rules! float_eq {
|
4 | 4 | ($op1:expr, $op2:expr) => {
|
5 | 5 | assert!(float_cmp::approx_eq!(f64, $op1, $op2));
|
6 | 6 | };
|
7 | 7 | }
|
8 | 8 |
|
9 |
| -fn bench_eval(c: &mut Criterion) { |
10 |
| - let expressions = [ |
| 9 | +const EXPRESSIONS: [&str; 10] = [ |
11 | 10 | "1 + 2",
|
12 |
| - "4 * 3", |
13 |
| - "12.837/8.3", |
14 |
| - "2 * (1.5 - 6)", |
15 |
| - "(1.5 / (2 + 3 * 0.1) + 6) * 3", |
16 |
| - "(2 * ((1.5 / (2 + 3 * 0.1) + 6) * 3)) - 1.1", |
17 |
| - "(2 * (((2 * ((1.5 / (2 + 3 * 0.1) + (2 * (((2 * (((2 * (((2 * ((1.5 / (2 + 3 * 0.1) + (2 * (((2 * ((1.5 / (2 + 3 * 0.1) + 6) * 3)) / ((2 * (((2 * ((1.5 / (2 + 3 * 0.1) + 6) * 3)) / (2 + 3 * 0.1) + 6) * 3)) * 2 + 3 * 0.1) + 6) * 3))) * 3)) / ((2 * (((2 * ((1.5 / (2 + 3 * 0.1) + 6) * 3)) / (2 + 3 * 0.1) + 6) * 3)) * 2 + 3 * 0.1) + 6) * 3)) / (2 + 3 * 0.1) + 6) * 3)) / ((2 * (((2 * ((1.5 / (2 + 3 * 0.1) + 6) * 3)) / (2 + 3 * 0.1) + 6) * 3)) * 2 + 3 * 0.1) + 6) * 3))) * 3)) / ((2 * (((2 * ((1.5 / (2 + 3 * 0.1) + 6) * 3)) / (2 + 3 * 0.1) + 6) * 3)) * 2 + 3 * 0.1) + 6) * 3)) * (2 * (((2 * ((1.5 / (2 + 3 * 0.1) + (2 * (((2 * (((2 * (((2 * ((1.5 / (2 + 3 * 0.1) + (2 * (((2 * ((1.5 / (2 + 3 * 0.1) + 6) * 3)) / ((2 * (((2 * ((1.5 / (2 + 3 * 0.1) + 6) * 3)) / (2 + 3 * 0.1) + 6) * 3)) * 2 + 3 * 0.1) + 6) * 3))) * 3)) / ((2 * (((2 * ((1.5 / (2 + 3 * 0.1) + 6) * 3)) / (2 + 3 * 0.1) + 6) * 3)) * 2 + 3 * 0.1) + 6) * 3)) / (2 + 3 * 0.1) + 6) * 3)) / ((2 * (((2 * ((1.5 / (2 + 3 * 0.1) + 6) * 3)) / (2 + 3 * 0.1) + 6) * 3)) * 2 + 3 * 0.1) + 6) * 3))) * 3)) / ((2 * (((2 * ((1.5 / (2 + 3 * 0.1) + 6) * 3)) / (2 + 3 * 0.1) + 6) * 3)) * 2 + 3 * 0.1) + 6) * 3)) - 1.1", |
| 11 | + "2 * 3", |
| 12 | + "3/8.3", |
| 13 | + "4 * (1.5 - 6)", |
| 14 | + "(5 / (2 + 3 * 0.1) + 6) * 3", |
| 15 | + "(6 * ((1.5 / (2 + 3 * 0.1) + 6) * 3)) - 1.1", |
| 16 | + "(7 * (((1.5 * (0.7 - 0.33 + (6.00 * 0.05))) / (2.5 + 3 * 0.1) + 6) * 3)) - 1.1", |
| 17 | + "((8 + 7.07) * ((((1.5 - 0.001 + 0.005) * (0.7 - 0.33 + (6.00 * 0.05))) / (2.5 + 3 * 0.1) + 6) * 3)) - 1.1", |
| 18 | + "((9 + 7.07) * ((((1.5 - 0.001 + 0.005) * (0.7 - 0.33 + (6.00 * 0.05))) / (2.5 + 3 * 0.1) + 6) * 3)) - 1.1 * (1.00 * 2838.88736 * 3 / (6 - 2))", |
| 19 | + "(10 * (((2 * ((1.5 / (2 + 3 * 0.1) + (2 * (((2 * (((2 * (((2 * ((1.5 / (2 + 3 * 0.1) + (2 * (((2 * ((1.5 / (2 + 3 * 0.1) + 6) * 3)) / ((2 * (((2 * ((1.5 / (2 + 3 * 0.1) + 6) * 3)) / (2 + 3 * 0.1) + 6) * 3)) * 2 + 3 * 0.1) + 6) * 3))) * 3)) / ((2 * (((2 * ((1.5 / (2 + 3 * 0.1) + 6) * 3)) / (2 + 3 * 0.1) + 6) * 3)) * 2 + 3 * 0.1) + 6) * 3)) / (2 + 3 * 0.1) + 6) * 3)) / ((2 * (((2 * ((1.5 / (2 + 3 * 0.1) + 6) * 3)) / (2 + 3 * 0.1) + 6) * 3)) * 2 + 3 * 0.1) + 6) * 3))) * 3)) / ((2 * (((2 * ((1.5 / (2 + 3 * 0.1) + 6) * 3)) / (2 + 3 * 0.1) + 6) * 3)) * 2 + 3 * 0.1) + 6) * 3)) * (2 * (((2 * ((1.5 / (2 + 3 * 0.1) + (2 * (((2 * (((2 * (((2 * ((1.5 / (2 + 3 * 0.1) + (2 * (((2 * ((1.5 / (2 + 3 * 0.1) + 6) * 3)) / ((2 * (((2 * ((1.5 / (2 + 3 * 0.1) + 6) * 3)) / (2 + 3 * 0.1) + 6) * 3)) * 2 + 3 * 0.1) + 6) * 3))) * 3)) / ((2 * (((2 * ((1.5 / (2 + 3 * 0.1) + 6) * 3)) / (2 + 3 * 0.1) + 6) * 3)) * 2 + 3 * 0.1) + 6) * 3)) / (2 + 3 * 0.1) + 6) * 3)) / ((2 * (((2 * ((1.5 / (2 + 3 * 0.1) + 6) * 3)) / (2 + 3 * 0.1) + 6) * 3)) * 2 + 3 * 0.1) + 6) * 3))) * 3)) / ((2 * (((2 * ((1.5 / (2 + 3 * 0.1) + 6) * 3)) / (2 + 3 * 0.1) + 6) * 3)) * 2 + 3 * 0.1) + 6) * 3)) - 1.1", |
18 | 20 | ];
|
19 | 21 |
|
| 22 | +fn bench_mexe(c: &mut Criterion) { |
| 23 | + for expr in EXPRESSIONS.iter() { |
| 24 | + dbg!(mexe::eval(expr)); |
| 25 | + float_eq!(mexe::eval(expr).unwrap(), meval::eval_str(expr).unwrap()); |
| 26 | + let bench_id = format!("bench_mexe {}", expr); |
| 27 | + c.bench_function(&bench_id, |b| b.iter(|| mexe::eval(black_box(expr)))); |
| 28 | + } |
| 29 | +} |
| 30 | + |
| 31 | +fn bench_cmp(c: &mut Criterion) { |
20 | 32 | let mut group = c.benchmark_group("bench_eval");
|
21 | 33 |
|
22 |
| - for expr in expressions.iter() { |
| 34 | + for expr in EXPRESSIONS.iter() { |
23 | 35 | dbg!(mexe::eval(expr));
|
24 | 36 | dbg!(meval::eval_str(expr));
|
25 | 37 | dbg!(fasteval::ez_eval(expr, &mut fasteval::EmptyNamespace));
|
26 | 38 | float_eq!(mexe::eval(expr).unwrap(), meval::eval_str(expr).unwrap());
|
27 | 39 |
|
28 |
| - group.bench_with_input(BenchmarkId::new("mexe", expr), expr, |b, &expr| { |
| 40 | + group.bench_with_input(BenchmarkId::new("bench_cmp mexe", expr), expr, |b, &expr| { |
29 | 41 | b.iter(|| mexe::eval(expr));
|
30 | 42 | });
|
31 |
| - group.bench_with_input(BenchmarkId::new("meval", expr), expr, |b, &expr| { |
| 43 | + group.bench_with_input(BenchmarkId::new("bench_cmp meval", expr), expr, |b, &expr| { |
32 | 44 | b.iter(|| meval::eval_str(expr));
|
33 | 45 | });
|
34 |
| - group.bench_with_input(BenchmarkId::new("fasteval", expr), expr, |b, &expr| { |
| 46 | + group.bench_with_input(BenchmarkId::new("bench_cmp fasteval", expr), expr, |b, &expr| { |
35 | 47 | b.iter(|| fasteval::ez_eval(expr, &mut fasteval::EmptyNamespace));
|
36 | 48 | });
|
37 | 49 | }
|
38 | 50 | group.finish();
|
39 | 51 | }
|
40 | 52 |
|
41 |
| -criterion_group!(benches, bench_eval); |
| 53 | +criterion_group!(benches, bench_cmp, bench_mexe); |
42 | 54 | criterion_main!(benches);
|
0 commit comments