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