use criterion::{criterion_group, criterion_main, Criterion}; use postcss::input::Input; use postcss::tokenizer::{Token, Tokenizer}; const SMALL_CSS_FILE: &str = include_str!("../assets/bootstrap-reboot.css"); const LARGE_CSS_FILE: &str = include_str!("../assets/bootstrap.css"); fn tokenize<'a>(css: &'a str, ignore_errors: bool) -> Vec> { let input: Input<'a> = Input::new(css, None); let processor: Tokenizer<'a> = Tokenizer::new(input.css, ignore_errors); let mut tokens = vec![]; while !processor.end_of_file() { tokens.push(processor.next_token(false)) } tokens } fn tokenize_bench(c: &mut Criterion) { c.bench_function("tokenizer/small(7K)", |b| { b.iter_with_large_drop(|| tokenize(SMALL_CSS_FILE, false)); }); c.bench_function("tokenizer/large(201K)", |b| { b.iter_with_large_drop(|| tokenize(LARGE_CSS_FILE, false)); }); } criterion_group!(benches, tokenize_bench); criterion_main!(benches);