Joshua Bemenderfer 9d9757e868 Updates.
2025-09-08 16:24:38 -04:00

88 lines
2.2 KiB
Rust

//! Benchmarks for the Terrace Rust implementation.
use criterion::{black_box, criterion_group, criterion_main, Criterion};
use terrace::{TerraceDocument, StringReader};
fn bench_simple_parsing(c: &mut Criterion) {
let content = r#"
config
database
host localhost
port 5432
name mydb
ssl true
server
port 3000
host 0.0.0.0
ssl enabled
workers 4
logging
level info
file /var/log/app.log
"#;
c.bench_function("parse_simple_config", |b| {
b.iter(|| {
let reader = StringReader::new(black_box(content));
let mut doc = TerraceDocument::with_reader(reader);
let mut count = 0;
while let Some(node) = pollster::block_on(doc.next()) {
count += 1;
}
black_box(count);
})
});
}
fn bench_large_document(c: &mut Criterion) {
let mut content = String::new();
for i in 0..1000 {
content.push_str(&format!("item{}\n value{}\n nested{}\n", i, i, i));
}
c.bench_function("parse_large_document", |b| {
b.iter(|| {
let reader = StringReader::new(black_box(&content));
let mut doc = TerraceDocument::with_reader(reader);
let mut count = 0;
while let Some(node) = pollster::block_on(doc.next()) {
count += 1;
}
black_box(count);
})
});
}
fn bench_filtering(c: &mut Criterion) {
let content = r#"
users
user alice active
user bob inactive
user charlie active
user david inactive
user eve active
groups
group admins
member alice
member charlie
group users
member bob
member david
member eve
"#;
c.bench_function("filter_active_users", |b| {
b.iter(|| {
let reader = StringReader::new(black_box(content));
let doc = TerraceDocument::with_reader(reader);
let active_users = pollster::block_on(doc.filter(|node| {
node.head() == "user" && node.tail().contains("active")
}));
black_box(active_users.len());
})
});
}
criterion_group!(benches, bench_simple_parsing, bench_large_document, bench_filtering);
criterion_main!(benches);