#![feature(test)]

extern crate test;

use serde::Serialize;
use tera::{Context, Tera};

#[derive(Serialize, Debug)]
struct Entry {
    name: &'static str,
    score: u16,
}

static SOURCE: &'static str = "<html>
  <head>
    <title>{{ year }}</title>
  </head>
  <body>
    <h1>CSL {{ year }}</h1>
    <ul>
    {% for team in teams %}
      <li class=\"{% if loop.first %}champion{% endif %}\">
      <b>{{ team.name }}</b>: {{ team.score }}
      </li>
    {% endfor %}
    </ul>
  </body>
</html>";

#[bench]
fn render_template(b: &mut test::Bencher) {
    let mut tera = test::black_box(Tera::default());
    tera.add_raw_template("table", SOURCE).unwrap();

    let context = test::black_box({
        let mut context = Context::new();
        context.insert(
            "teams",
            &[
                Entry {
                    name: "Jiangsu",
                    score: 43,
                },
                Entry {
                    name: "Beijing",
                    score: 27,
                },
                Entry {
                    name: "Guangzhou",
                    score: 22,
                },
                Entry {
                    name: "Shandong",
                    score: 12,
                },
            ],
        );
        context.insert("year", &"2015");
        context
    });

    b.iter(|| tera.render("table", &context));
}