diff --git a/benches/parser.rs b/benches/parser.rs
index 3d5156e..f3058ad 100644
--- a/benches/parser.rs
+++ b/benches/parser.rs
@@ -1,23 +1,37 @@
use crabrl::Parser;
use criterion::{black_box, criterion_group, criterion_main, Criterion};
+use std::path::Path;
-fn parse_small_file(c: &mut Criterion) {
+fn parse_sample_sec_file(c: &mut Criterion) {
let parser = Parser::new();
- let content = include_bytes!("../tests/fixtures/small.xml");
-
- c.bench_function("parse_small", |b| {
- b.iter(|| parser.parse_bytes(black_box(content)));
- });
+ let sample_file = Path::new("fixtures/sample-sec.xml");
+
+ if sample_file.exists() {
+ c.bench_function("parse_sample_sec", |b| {
+ b.iter(|| parser.parse_file(black_box(&sample_file)));
+ });
+ } else {
+ // If no fixtures exist, use a minimal inline XBRL for benchmarking
+ let minimal_xbrl = r#"
+
+
+
+ 0000000000
+
+
+ 2023-12-31
+
+
+
+ iso4217:USD
+
+"#;
+
+ c.bench_function("parse_minimal", |b| {
+ b.iter(|| parser.parse_str(black_box(minimal_xbrl)));
+ });
+ }
}
-fn parse_medium_file(c: &mut Criterion) {
- let parser = Parser::new();
- let content = include_bytes!("../tests/fixtures/medium.xml");
-
- c.bench_function("parse_medium", |b| {
- b.iter(|| parser.parse_bytes(black_box(content)));
- });
-}
-
-criterion_group!(benches, parse_small_file, parse_medium_file);
+criterion_group!(benches, parse_sample_sec_file);
criterion_main!(benches);
diff --git a/src/bin/crabrl_bench.rs b/src/bin/crabrl_bench.rs
deleted file mode 100644
index 8549146..0000000
--- a/src/bin/crabrl_bench.rs
+++ /dev/null
@@ -1,41 +0,0 @@
-use crabrl::Parser;
-use std::env;
-use std::time::Instant;
-
-fn main() {
- let args: Vec = env::args().collect();
- if args.len() != 2 {
- eprintln!("Usage: {} ", args[0]);
- std::process::exit(1);
- }
-
- let filepath = &args[1];
- let parser = Parser::new();
-
- let start = Instant::now();
- match parser.parse_file(filepath) {
- Ok(doc) => {
- let elapsed = start.elapsed();
- let ms = elapsed.as_secs_f64() * 1000.0;
- println!(
- "crabrl found: {} facts, {} contexts, {} units (in {:.3}ms)",
- doc.facts.len(),
- doc.contexts.len(),
- doc.units.len(),
- ms
- );
-
- // Additional stats
- println!("Facts: {}", doc.facts.len());
- println!("Contexts: {}", doc.contexts.len());
- println!("Units: {}", doc.units.len());
- println!("Tuples: {}", doc.tuples.len());
- println!("Footnotes: {}", doc.footnotes.len());
- println!("Time: {:.3}ms", ms);
- }
- Err(e) => {
- eprintln!("Error parsing file: {}", e);
- std::process::exit(1);
- }
- }
-}
diff --git a/src/simple_parser.rs b/src/simple_parser.rs
index acd9fe4..ae98025 100644
--- a/src/simple_parser.rs
+++ b/src/simple_parser.rs
@@ -14,6 +14,10 @@ impl Parser {
Self::default()
}
+ pub fn parse_str(&self, content: &str) -> Result {
+ self.parse_bytes(content.as_bytes())
+ }
+
pub fn parse_file>(&self, path: P) -> Result {
let content = std::fs::read(path)?;
self.parse_bytes(&content)