#[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);