59 lines
1.4 KiB
Rust
Executable File
59 lines
1.4 KiB
Rust
Executable File
#[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);
|