use std::hint::black_box; use tailwindcss_oxide::cursor::Cursor; use tailwindcss_oxide::extractor::machine::{Machine, MachineState}; use tailwindcss_oxide::extractor::{Extracted, Extractor}; use tailwindcss_oxide::throughput::Throughput; fn run_full_extractor(input: &[u8]) -> Vec<&[u8]> { Extractor::new(input) .extract() .into_iter() .map(|x| match x { Extracted::Candidate(bytes) => bytes, Extracted::CssVariable(bytes) => bytes, }) .collect::>() } fn _run_machine(input: &[u8]) -> Vec<&[u8]> { let len = input.len(); let mut machine = T::default(); let mut cursor = Cursor::new(input); let mut result = Vec::with_capacity(25); while cursor.pos < len { if let MachineState::Done(span) = machine.next(&mut cursor) { result.push(span.slice(input)); } cursor.advance(); } result } fn run(input: &[u8]) -> Vec<&[u8]> { // _run_machine::(input) // _run_machine::(input) // _run_machine::(input) // _run_machine::(input) // _run_machine::(input) // _run_machine::(input) // _run_machine::(input) // _run_machine::(input) // _run_machine::(input) // _run_machine::(input) // _run_machine::(input) run_full_extractor(input) } fn main() { let iterations = 10_000; let input = include_bytes!("./fixtures/example.html"); let throughput = Throughput::compute(iterations, input.len(), || { _ = black_box( input .split(|x| *x == b'\n') .flat_map(run) .collect::>(), ); }); eprintln!("Extractor: {:}", throughput); }