#[macro_use] | |
extern crate criterion; | |
extern crate tinytemplate; | |
#[macro_use] | |
extern crate serde_derive; | |
use criterion::Criterion; | |
use tinytemplate::TinyTemplate; | |
static TABLE_SOURCE: &'static str = "<html> | |
{{ for row in table }} | |
<tr>{{ for value in row }}<td>{value}</td>{{ endfor }}</tr> | |
{{ endfor }} | |
</html>"; | |
#[derive(Serialize)] | |
struct TableContext { | |
table: Vec<Vec<usize>>, | |
} | |
fn make_table_context(size: usize) -> TableContext { | |
let mut table = Vec::with_capacity(size); | |
for _ in 0..size { | |
let mut inner = Vec::with_capacity(size); | |
for i in 0..size { | |
inner.push(i); | |
} | |
table.push(inner); | |
} | |
TableContext { table } | |
} | |
fn parse(criterion: &mut Criterion) { | |
criterion.bench_function("parse-table", |b| { | |
b.iter(|| { | |
let mut tt = TinyTemplate::new(); | |
tt.add_template("table", TABLE_SOURCE).unwrap() | |
}); | |
}); | |
} | |
fn render(criterion: &mut Criterion) { | |
let mut tt = TinyTemplate::new(); | |
tt.add_template("table", TABLE_SOURCE).unwrap(); | |
criterion.bench_function_over_inputs( | |
"render-table", | |
move |b, size| { | |
let data = make_table_context(*size); | |
b.iter(|| tt.render("table", &data).unwrap()); | |
}, | |
vec![1usize, 5, 10, 50, 100, 200], | |
); | |
} | |
criterion_group!(benchmarks, parse, render); | |
criterion_main!(benchmarks); |