зеркало из
https://github.com/glebtv/tui-textarea.git
synced 2026-09-09 00:35:51 +03:00
add benchmark suites for text search
Этот коммит содержится в:
@@ -2,21 +2,7 @@ use criterion::{black_box, criterion_group, criterion_main, Criterion};
|
||||
use rand::rngs::SmallRng;
|
||||
use rand::{Rng, SeedableRng};
|
||||
use tui_textarea::{CursorMove, Input, Key, TextArea};
|
||||
use tui_textarea_bench::dummy_terminal;
|
||||
|
||||
const LOREM: &[&str] = &[
|
||||
"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do",
|
||||
"eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim",
|
||||
"ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut",
|
||||
"aliquip ex ea commodo consequat. Duis aute irure dolor in",
|
||||
"reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla",
|
||||
"pariatur. Excepteur sint occaecat cupidatat non proident, sunt in",
|
||||
"culpa qui officia deserunt mollit anim id est laborum.",
|
||||
];
|
||||
const SEED: [u8; 32] = [
|
||||
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
|
||||
27, 28, 29, 30, 31, 32,
|
||||
];
|
||||
use tui_textarea_bench::{dummy_terminal, TerminalExt, LOREM, SEED};
|
||||
|
||||
#[inline]
|
||||
fn append_lorem(repeat: usize) -> usize {
|
||||
@@ -30,10 +16,7 @@ fn append_lorem(repeat: usize) -> usize {
|
||||
ctrl: false,
|
||||
alt: false,
|
||||
});
|
||||
term.draw(|f| {
|
||||
f.render_widget(textarea.widget(), f.size());
|
||||
})
|
||||
.unwrap();
|
||||
term.draw_textarea(&textarea);
|
||||
}
|
||||
}
|
||||
textarea.input(Input {
|
||||
@@ -41,10 +24,7 @@ fn append_lorem(repeat: usize) -> usize {
|
||||
ctrl: false,
|
||||
alt: false,
|
||||
});
|
||||
term.draw(|f| {
|
||||
f.render_widget(textarea.widget(), f.size());
|
||||
})
|
||||
.unwrap();
|
||||
term.draw_textarea(&textarea);
|
||||
}
|
||||
textarea.lines().len()
|
||||
}
|
||||
@@ -66,10 +46,7 @@ fn random_lorem(repeat: usize) -> usize {
|
||||
ctrl: false,
|
||||
alt: false,
|
||||
});
|
||||
term.draw(|f| {
|
||||
f.render_widget(textarea.widget(), f.size());
|
||||
})
|
||||
.unwrap();
|
||||
term.draw_textarea(&textarea);
|
||||
|
||||
for c in line.chars() {
|
||||
textarea.input(Input {
|
||||
@@ -77,10 +54,7 @@ fn random_lorem(repeat: usize) -> usize {
|
||||
ctrl: false,
|
||||
alt: false,
|
||||
});
|
||||
term.draw(|f| {
|
||||
f.render_widget(textarea.widget(), f.size());
|
||||
})
|
||||
.unwrap();
|
||||
term.draw_textarea(&textarea);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
62
bench/benches/search.rs
Обычный файл
62
bench/benches/search.rs
Обычный файл
@@ -0,0 +1,62 @@
|
||||
use criterion::{criterion_group, criterion_main, Criterion};
|
||||
use tui_textarea::TextArea;
|
||||
use tui_textarea_bench::{dummy_terminal, TerminalExt, LOREM};
|
||||
|
||||
fn forward(c: &mut Criterion) {
|
||||
#[inline]
|
||||
fn run(pat: &str, lines: Vec<String>) {
|
||||
let mut term = dummy_terminal();
|
||||
let mut textarea: TextArea = TextArea::new(lines);
|
||||
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);
|
||||
}
|
||||
|
||||
c.bench_function("search::forward_short", |b| {
|
||||
let lines: Vec<_> = LOREM.iter().map(|s| s.to_string()).collect();
|
||||
b.iter(move || run(r"\w*i\w*", lines.clone()))
|
||||
});
|
||||
c.bench_function("search::forward_long", |b| {
|
||||
let mut lines = vec![];
|
||||
for _ in 0..10 {
|
||||
lines.extend(LOREM.iter().map(|s| s.to_string()));
|
||||
}
|
||||
b.iter(move || run(r"[A-Z]\w*", lines.clone()))
|
||||
});
|
||||
}
|
||||
|
||||
fn back(c: &mut Criterion) {
|
||||
#[inline]
|
||||
fn run(pat: &str, lines: Vec<String>) {
|
||||
let mut term = dummy_terminal();
|
||||
let mut textarea: TextArea = TextArea::new(lines);
|
||||
textarea.set_search_pattern(pat).unwrap();
|
||||
term.draw_textarea(&textarea);
|
||||
for _ in 0..100 {
|
||||
textarea.search_back(false);
|
||||
term.draw_textarea(&textarea);
|
||||
}
|
||||
textarea.set_search_pattern(r"").unwrap();
|
||||
term.draw_textarea(&textarea);
|
||||
}
|
||||
|
||||
c.bench_function("search::back_short", |b| {
|
||||
let lines: Vec<_> = LOREM.iter().map(|s| s.to_string()).collect();
|
||||
b.iter(move || run(r"\w*i\w*", lines.clone()))
|
||||
});
|
||||
c.bench_function("search::back_long", |b| {
|
||||
let mut lines = vec![];
|
||||
for _ in 0..10 {
|
||||
lines.extend(LOREM.iter().map(|s| s.to_string()));
|
||||
}
|
||||
b.iter(move || run(r"[A-Z]\w*", lines.clone()))
|
||||
});
|
||||
}
|
||||
|
||||
criterion_group!(search, forward, back);
|
||||
criterion_main!(search);
|
||||
Ссылка в новой задаче
Block a user