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

add benchmark to insert lines randomly

Этот коммит содержится в:
rhysd
2022-07-09 22:11:11 +09:00
родитель ee72b48fea
Коммит b4ececff71
2 изменённых файлов: 64 добавлений и 8 удалений

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

@@ -14,6 +14,7 @@ tui = { version = "0.18", default-features = false }
[dev-dependencies] [dev-dependencies]
criterion = "0.3" criterion = "0.3"
rand = { version = "0.8.5", features = ["small_rng"] }
[[bench]] [[bench]]
name = "insert" name = "insert"

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

@@ -1,5 +1,7 @@
use criterion::{black_box, criterion_group, criterion_main, Criterion}; use criterion::{black_box, criterion_group, criterion_main, Criterion};
use tui_textarea::{Input, Key, TextArea}; use rand::rngs::SmallRng;
use rand::{Rng, SeedableRng};
use tui_textarea::{CursorMove, Input, Key, TextArea};
use tui_textarea_bench::dummy_terminal; use tui_textarea_bench::dummy_terminal;
const LOREM: &[&str] = &[ const LOREM: &[&str] = &[
@@ -11,6 +13,10 @@ const LOREM: &[&str] = &[
"pariatur. Excepteur sint occaecat cupidatat non proident, sunt in", "pariatur. Excepteur sint occaecat cupidatat non proident, sunt in",
"culpa qui officia deserunt mollit anim id est laborum.", "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,
];
#[inline] #[inline]
fn append_lorem(repeat: usize) -> usize { fn append_lorem(repeat: usize) -> usize {
@@ -24,11 +30,11 @@ fn append_lorem(repeat: usize) -> usize {
ctrl: false, ctrl: false,
alt: false, alt: false,
}); });
term.draw(|f| {
f.render_widget(textarea.widget(), f.size());
})
.unwrap();
} }
term.draw(|f| {
f.render_widget(textarea.widget(), f.size());
})
.unwrap();
} }
textarea.input(Input { textarea.input(Input {
key: Key::Enter, key: Key::Enter,
@@ -43,15 +49,64 @@ fn append_lorem(repeat: usize) -> usize {
textarea.lines().len() textarea.lines().len()
} }
#[inline]
fn random_lorem(repeat: usize) -> usize {
let mut rng = SmallRng::from_seed(SEED);
let mut textarea = TextArea::default();
let mut term = dummy_terminal();
for _ in 0..repeat {
for line in LOREM {
let row = rng.gen_range(0..textarea.lines().len() as u16);
textarea.move_cursor(CursorMove::Jump(row, 0));
textarea.move_cursor(CursorMove::End);
textarea.input(Input {
key: Key::Enter,
ctrl: false,
alt: false,
});
term.draw(|f| {
f.render_widget(textarea.widget(), f.size());
})
.unwrap();
for c in line.chars() {
textarea.input(Input {
key: Key::Char(c),
ctrl: false,
alt: false,
});
term.draw(|f| {
f.render_widget(textarea.widget(), f.size());
})
.unwrap();
}
}
}
textarea.lines().len()
}
fn append(c: &mut Criterion) { fn append(c: &mut Criterion) {
c.bench_function("append::1_lorem", |b| b.iter(|| black_box(append_lorem(1)))); c.bench_function("append::1_lorem", |b| b.iter(|| black_box(append_lorem(1))));
c.bench_function("append::10_lorem", |b| { c.bench_function("append::10_lorem", |b| {
b.iter(|| black_box(append_lorem(10))) b.iter(|| black_box(append_lorem(10)))
}); });
c.bench_function("append::100_lorem", |b| { c.bench_function("append::50_lorem", |b| {
b.iter(|| black_box(append_lorem(100))) b.iter(|| black_box(append_lorem(50)))
}); });
} }
criterion_group!(insert, append); fn random(c: &mut Criterion) {
c.bench_function("random::1_lorem", |b| b.iter(|| black_box(random_lorem(1))));
c.bench_function("random::10_lorem", |b| {
b.iter(|| black_box(random_lorem(10)))
});
c.bench_function("random::50_lorem", |b| {
b.iter(|| black_box(random_lorem(50)))
});
}
criterion_group!(insert, append, random);
criterion_main!(insert); criterion_main!(insert);