1
0
зеркало из https://github.com/glebtv/tui-textarea.git synced 2026-09-09 00:35:51 +03:00

add benchmark suites for text search

Этот коммит содержится в:
rhysd
2022-07-10 21:54:17 +09:00
родитель b4ececff71
Коммит db83c4d14a
5 изменённых файлов: 99 добавлений и 33 удалений

Просмотреть файл

@@ -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 Обычный файл
Просмотреть файл

@@ -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);