postcss 0.0.2

🚀 Fast and 100% API compatible postcss replacer
Documentation
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<Token<'a>> {
  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);