maud/benchmarks/benches/liquid.rs
2016-10-02 17:24:36 +13:00

49 lines
1.4 KiB
Rust

#![feature(test)]
extern crate liquid;
extern crate test;
use liquid::{Context, Renderable, Value};
use std::collections::HashMap;
// FIXME(cobalt-org/liquid-rust#47): "for_loop" should be "forloop" instead
static SOURCE: &'static str = "<html>
<head>
<title>{{year}}</title>
</head>
<body>
<h1>CSL {{year}}</h1>
<ul>
{% for team in teams %}
<li class=\"{% if for_loop.first %}champion{% endif %}\">
<b>{{team.name}}</b>: {{team.score}}
</li>
{% endfor %}
</ul>
</body>
</html>";
fn make_team(name: &'static str, score: u16) -> Value {
let mut team = HashMap::new();
team.insert("name".to_string(), Value::Str(name.to_string()));
team.insert("score".to_string(), Value::Num(score as f32));
Value::Object(team)
}
#[bench]
fn render_template(b: &mut test::Bencher) {
let template = test::black_box(liquid::parse(SOURCE, Default::default()).unwrap());
let mut context = test::black_box({
let mut context = Context::new();
context.set_val("year", Value::Num(2015.));
let teams = vec![
make_team("Jiangsu", 43),
make_team("Beijing", 27),
make_team("Guangzhou", 22),
make_team("Shandong", 12),
];
context.set_val("teams", Value::Array(teams));
context
});
b.iter(|| template.render(&mut context).unwrap().unwrap());
}