Skip to main content

benchmark/
benchmark.rs

1use yini::Parser;
2
3fn main() {
4    let data = r#"
5# Config file
6server {
7    host "localhost"
8    port 8080
9    ssl true
10    threads 4
11}
12
13database {
14    connection "postgresql://localhost/mydb"
15    pool_size 10
16    timeout 30.5
17}
18
19users [
20    {
21        name "Alice"
22        age 30
23        roles ["admin" user]
24    }
25    {
26        name "Bob"
27        age 25
28        roles ["user"]
29    }
30]
31
32coordinates [
33    (100 200)
34    (300 400)
35    (500 600)
36]
37
38status :active
39mode :fullscreen
40color :rgb(255 128 0)
41"#;
42
43    // Warmup
44    for _ in 0..100 {
45        let mut parser = Parser::new(data);
46        let _ = parser.parse();
47    }
48
49    // Benchmark
50    let iterations = 200_000;
51    let start = std::time::Instant::now();
52
53    for _ in 0..iterations {
54        let mut parser = Parser::new(data);
55        let _ = parser.parse();
56        assert!(
57            parser.errors().is_empty(),
58            "benchmark should not contain errors"
59        );
60    }
61
62    let elapsed = start.elapsed();
63    let per_iter = elapsed / iterations;
64
65    println!("Parsed {} iterations in {:?}", iterations, elapsed);
66    println!("Average time per parse: {:?}", per_iter);
67    println!("Parses per second: {:.0}", 1.0 / per_iter.as_secs_f64());
68}