69 lines
2.8 KiB
Rust
69 lines
2.8 KiB
Rust
|
|
use criterion::{black_box, criterion_group, criterion_main, Criterion};
|
||
|
|
use vapora_tracking::parsers::{ClaudeTodoParser, MarkdownParser};
|
||
|
|
|
||
|
|
fn markdown_parse_changes_bench(c: &mut Criterion) {
|
||
|
|
let content = "---\nproject: vapora\nlast_sync: 2025-11-10T14:30:00Z\n---\n\n\
|
||
|
|
## 2025-11-10T14:30:00Z - Implemented WebSocket sync\n\
|
||
|
|
**Impact**: backend | **Breaking**: no | **Files**: 5\n\
|
||
|
|
Non-blocking async synchronization using tokio channels.\n\n\
|
||
|
|
## 2025-11-09T10:15:00Z - Fixed database indices\n\
|
||
|
|
**Impact**: performance | **Breaking**: no | **Files**: 2\n\
|
||
|
|
Optimized query performance for tracking entries.\n\n\
|
||
|
|
## 2025-11-08T16:45:00Z - Added error context\n\
|
||
|
|
**Impact**: infrastructure | **Breaking**: no | **Files**: 3\n\
|
||
|
|
Improved error messages with structured logging.\n";
|
||
|
|
|
||
|
|
c.bench_function("markdown_parse_changes_small", |b| {
|
||
|
|
b.iter(|| MarkdownParser::parse_changes(black_box(content), black_box("/test")))
|
||
|
|
});
|
||
|
|
}
|
||
|
|
|
||
|
|
fn markdown_parse_todos_bench(c: &mut Criterion) {
|
||
|
|
let content = "---\nproject: vapora\nlast_sync: 2025-11-10T14:30:00Z\n---\n\n\
|
||
|
|
## [ ] Implement webhook system\n\
|
||
|
|
**Priority**: H | **Estimate**: L | **Tags**: #feature #api\n\
|
||
|
|
**Created**: 2025-11-10T14:30:00Z | **Due**: 2025-11-15\n\
|
||
|
|
Implement bidirectional webhook system for real-time events.\n\n\
|
||
|
|
## [>] Refactor database layer\n\
|
||
|
|
**Priority**: M | **Estimate**: M | **Tags**: #refactor #database\n\
|
||
|
|
**Created**: 2025-11-08T10:00:00Z | **Due**: 2025-11-20\n\
|
||
|
|
Improve database abstraction and reduce code duplication.\n\n\
|
||
|
|
## [x] Setup CI/CD pipeline\n\
|
||
|
|
**Priority**: H | **Estimate**: S | **Tags**: #infrastructure\n\
|
||
|
|
**Created**: 2025-11-05T08:00:00Z\n\
|
||
|
|
GitHub Actions workflow for automated testing.\n";
|
||
|
|
|
||
|
|
c.bench_function("markdown_parse_todos_small", |b| {
|
||
|
|
b.iter(|| MarkdownParser::parse_todos(black_box(content), black_box("/test")))
|
||
|
|
});
|
||
|
|
}
|
||
|
|
|
||
|
|
fn claude_todo_parser_bench(c: &mut Criterion) {
|
||
|
|
let content = r#"[
|
||
|
|
{
|
||
|
|
"content": "Implement feature X",
|
||
|
|
"status": "pending"
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"content": "Fix bug in parser",
|
||
|
|
"status": "in_progress"
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"content": "Update documentation",
|
||
|
|
"status": "completed"
|
||
|
|
}
|
||
|
|
]"#;
|
||
|
|
|
||
|
|
c.bench_function("claude_todo_parse_small", |b| {
|
||
|
|
b.iter(|| ClaudeTodoParser::parse(black_box(content), black_box("/test")))
|
||
|
|
});
|
||
|
|
}
|
||
|
|
|
||
|
|
criterion_group!(
|
||
|
|
benches,
|
||
|
|
markdown_parse_changes_bench,
|
||
|
|
markdown_parse_todos_bench,
|
||
|
|
claude_todo_parser_bench
|
||
|
|
);
|
||
|
|
criterion_main!(benches);
|