Updates.
This commit is contained in:
87
packages/rust/benches/parsing.rs
Normal file
87
packages/rust/benches/parsing.rs
Normal file
@@ -0,0 +1,87 @@
|
||||
//! 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);
|
||||
Reference in New Issue
Block a user