88 lines
2.2 KiB
Rust
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);
|