use ::liquid::{
value::{Object, Value},
ParserBuilder,
};
use criterion;
use serde_yaml;
pub fn big_table(b: &mut criterion::Bencher<'_>, size: &usize) {
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(Value::Scalar((i as i32).into()));
}
table.push(Value::Array(inner));
}
let template = ParserBuilder::with_liquid()
.build()
.unwrap()
.parse(
"
{% for row in table %}
{% for col in row %}{{ col|escape }} | {% endfor %}
{% endfor %}
",
)
.unwrap();
let mut globals = Object::new();
globals.insert("table".into(), Value::Array(table));
b.iter(|| template.render(&globals));
}
pub fn teams(b: &mut criterion::Bencher<'_>, _: &usize) {
let parser = ParserBuilder::with_liquid()
.extra_filters()
.build()
.unwrap();
let template = parser.parse(TEAMS_TEMPLATE).unwrap();
let data: Object = self::serde_yaml::from_str(TEAMS_DATA).unwrap();
b.iter(|| template.render(&data));
}
static TEAMS_TEMPLATE: &'static str = "
{{year}}
CSL {{year}}
{% for team in teams %}
-
{{team.name}}: {{team.score}}
{% endfor %}
";
static TEAMS_DATA: &'static str = "
year: 2015
teams:
- name: Jiangsu
score: 43
- name: Beijing
score: 27
- name: Guangzhou
score: 22
- name: Shandong
score: 12
";