From c1622c197d1e1099cac0481df93f4d7f0e0e36b2 Mon Sep 17 00:00:00 2001 From: rhysd Date: Wed, 13 Jul 2022 21:44:37 +0900 Subject: [PATCH] add benchmarks to delete text --- bench/Cargo.toml | 4 ++++ bench/benches/delete.rs | 44 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+) create mode 100644 bench/benches/delete.rs diff --git a/bench/Cargo.toml b/bench/Cargo.toml index 113ff28..f829fae 100644 --- a/bench/Cargo.toml +++ b/bench/Cargo.toml @@ -27,3 +27,7 @@ harness = false [[bench]] name = "cursor" harness = false + +[[bench]] +name = "delete" +harness = false diff --git a/bench/benches/delete.rs b/bench/benches/delete.rs new file mode 100644 index 0000000..1b3bb0b --- /dev/null +++ b/bench/benches/delete.rs @@ -0,0 +1,44 @@ +use criterion::{criterion_group, criterion_main, Criterion}; +use tui_textarea::{CursorMove, TextArea}; +use tui_textarea_bench::{dummy_terminal, TerminalExt, LOREM}; + +#[derive(Clone, Copy)] +enum Kind { + Char, + Word, + Line, +} + +#[inline] +fn run(textarea: &TextArea<'_>, kind: Kind) { + let mut term = dummy_terminal(); + let mut t = textarea.clone(); + t.move_cursor(CursorMove::Jump(u16::MAX, u16::MAX)); + for _ in 0..100 { + let modified = match kind { + Kind::Char => t.delete_char(), + Kind::Word => t.delete_word(), + Kind::Line => t.delete_line_by_head(), + }; + if !modified { + t = textarea.clone(); + t.move_cursor(CursorMove::Jump(u16::MAX, u16::MAX)); + } + term.draw_textarea(&t); + } +} + +fn bench(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("delete::char", |b| b.iter(|| run(&textarea, Kind::Char))); + c.bench_function("delete::word", |b| b.iter(|| run(&textarea, Kind::Word))); + c.bench_function("delete::line", |b| b.iter(|| run(&textarea, Kind::Line))); +} + +criterion_group!(delete, bench); +criterion_main!(delete);