jumpcut 1.0.0

JumpCut is a library and CLI for converting Fountain-formatted text files into FDX, HTML, JSON, text, and PDF formats.
Documentation
use std::fs;
use std::time::Instant;

fn median_ns(samples: &mut [u128]) -> u128 {
    samples.sort_unstable();
    samples[samples.len() / 2]
}

fn bench_parse(path: &str, iterations: usize, warmups: usize) -> u128 {
    let content = fs::read_to_string(path).expect("benchmark input should exist");

    for _ in 0..warmups {
        let _ = jumpcut::parse(&content);
    }

    let mut samples = Vec::with_capacity(iterations);
    for _ in 0..iterations {
        let start = Instant::now();
        let _ = jumpcut::parse(&content);
        samples.push(start.elapsed().as_nanos());
    }

    median_ns(&mut samples)
}

fn main() {
    let parse_108_ns = bench_parse("benches/108.fountain", 300, 20);
    let parse_big_fish_ns = bench_parse("benches/Big-Fish.fountain", 120, 10);
    let total_ns = parse_108_ns + parse_big_fish_ns;

    println!("METRIC parse_108_ns={parse_108_ns}");
    println!("METRIC parse_big_fish_ns={parse_big_fish_ns}");
    println!("METRIC total_ns={total_ns}");
}