Skip to main content

benchmark/
benchmark.rs

1use sevenmark_parser::core::parse_document;
2use std::fs;
3use std::time::Instant;
4
5fn benchmark_parse(content: &str, iterations: u32) -> (f64, usize) {
6    let document_len = content.len();
7
8    // Warmup
9    for _ in 0..3 {
10        let _ = parse_document(content);
11    }
12
13    // Benchmark
14    let start_time = Instant::now();
15    let mut element_count = 0;
16    for _ in 0..iterations {
17        let result = parse_document(content);
18        element_count = result.len();
19    }
20    let duration = start_time.elapsed();
21
22    let avg_duration_ms = duration.as_secs_f64() * 1000.0 / iterations as f64;
23    let throughput_kb_s = (document_len as f64 / 1024.0) / (avg_duration_ms / 1000.0);
24
25    println!("Input: {} bytes", document_len);
26    println!(
27        "Parsed {} elements in {:.3} ms (avg)",
28        element_count, avg_duration_ms
29    );
30    println!(
31        "Total time for {} iterations: {:.3} s",
32        iterations,
33        duration.as_secs_f64()
34    );
35    println!();
36    println!("Performance: {:.2} KB/s", throughput_kb_s);
37
38    (throughput_kb_s, element_count)
39}
40
41fn main() {
42    let input_content = fs::read_to_string("ToParse.txt").expect("ToParse.txt file not found");
43
44    println!("{}", "=".repeat(60));
45    println!("SevenMark Parser Benchmark");
46    println!("{}", "=".repeat(60));
47
48    let _ = benchmark_parse(&input_content, 100);
49
50    println!("{}", "=".repeat(60));
51
52    // 10x content size test
53    println!();
54    println!("Testing with 10x content size...");
55    let large_content = input_content.repeat(10);
56    let _ = benchmark_parse(&large_content, 10);
57}