1
0
зеркало из https://github.com/glebtv/tui-textarea.git synced 2026-08-28 11:36:17 +03:00
Files
tui-textarea/bench/benches/search_forward.rs
srothgan 19151a4076 chore(bench): restructure into focused targets, add runner, and tune slow cases (#10)
- Upgrade Criterion 0.5 → 0.8.2
- Split 4 broad bench files into 14 focused targets
- Add Rust runner binary with per-target start/done logging
- Add wrap_render benchmarks (all 4 WrapMode variants × 2 sizes)
- Add undo_redo benchmarks (undo/redo × 3 history depths)
- Apply benchmark_group + SamplingMode::Flat + reduced sample_size on slow insert cases to cut total run time from ~28 min to ~12 min
- Rewrite bench/README.md to document runner, targets, and workflow
2026-02-19 09:22:09 +10:00

38 строки
1.1 KiB
Rust

use criterion::{criterion_group, criterion_main, Criterion};
use tui_textarea::TextArea;
use tui_textarea_bench::{dummy_terminal, TerminalExt, LOREM};
#[inline]
fn run(pat: &str, mut textarea: TextArea<'_>) {
let mut term = dummy_terminal();
textarea.set_search_pattern(pat).unwrap();
term.draw_textarea(&textarea);
for _ in 0..100 {
textarea.search_forward(false);
term.draw_textarea(&textarea);
}
textarea.set_search_pattern(r"").unwrap();
term.draw_textarea(&textarea);
}
fn short(c: &mut Criterion) {
let textarea = TextArea::from(LOREM.iter().map(|s| s.to_string()));
c.bench_function("search::forward_short", |b| {
b.iter(|| run(r"\w*i\w*", textarea.clone()))
});
}
fn long(c: &mut Criterion) {
let mut lines = vec![];
for _ in 0..10 {
lines.extend(LOREM.iter().map(|s| s.to_string()));
}
let textarea = TextArea::new(lines);
c.bench_function("search::forward_long", |b| {
b.iter(|| run(r"[A-Z]\w*", textarea.clone()))
});
}
criterion_group!(search_forward, short, long);
criterion_main!(search_forward);