aboutsummaryrefslogtreecommitdiff
path: root/vendor/anstream/benches
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/anstream/benches')
-rw-r--r--vendor/anstream/benches/stream.rs81
-rw-r--r--vendor/anstream/benches/strip.rs102
-rw-r--r--vendor/anstream/benches/wincon.rs26
3 files changed, 209 insertions, 0 deletions
diff --git a/vendor/anstream/benches/stream.rs b/vendor/anstream/benches/stream.rs
new file mode 100644
index 0000000..f89aacf
--- /dev/null
+++ b/vendor/anstream/benches/stream.rs
@@ -0,0 +1,81 @@
+use std::io::Write as _;
+
+use criterion::{black_box, Criterion};
+
+fn stream(c: &mut Criterion) {
+ for (name, content) in [
+ ("demo.vte", &include_bytes!("../tests/demo.vte")[..]),
+ ("rg_help.vte", &include_bytes!("../tests/rg_help.vte")[..]),
+ ("rg_linus.vte", &include_bytes!("../tests/rg_linus.vte")[..]),
+ (
+ "state_changes",
+ &b"\x1b]2;X\x1b\\ \x1b[0m \x1bP0@\x1b\\"[..],
+ ),
+ ] {
+ let mut group = c.benchmark_group(name);
+ group.bench_function("nop", |b| {
+ b.iter(|| {
+ let buffer = Vec::with_capacity(content.len());
+ let mut stream = buffer;
+
+ stream.write_all(content).unwrap();
+
+ black_box(stream)
+ })
+ });
+ group.bench_function("StripStream", |b| {
+ b.iter(|| {
+ let buffer = Vec::with_capacity(content.len());
+ let mut stream = anstream::StripStream::new(buffer);
+
+ stream.write_all(content).unwrap();
+
+ black_box(stream)
+ })
+ });
+ #[cfg(all(windows, feature = "wincon"))]
+ group.bench_function("WinconStream", |b| {
+ b.iter(|| {
+ let buffer = Vec::with_capacity(content.len());
+ let mut stream = anstream::WinconStream::new(buffer);
+
+ stream.write_all(content).unwrap();
+
+ black_box(stream)
+ })
+ });
+ group.bench_function("AutoStream::always_ansi", |b| {
+ b.iter(|| {
+ let buffer = Vec::with_capacity(content.len());
+ let mut stream = anstream::AutoStream::always_ansi(buffer);
+
+ stream.write_all(content).unwrap();
+
+ black_box(stream)
+ })
+ });
+ group.bench_function("AutoStream::always", |b| {
+ b.iter(|| {
+ let buffer = Vec::with_capacity(content.len());
+ let mut stream = anstream::AutoStream::always(buffer);
+
+ stream.write_all(content).unwrap();
+
+ black_box(stream)
+ })
+ });
+ group.bench_function("AutoStream::never", |b| {
+ b.iter(|| {
+ let buffer = Vec::with_capacity(content.len());
+ let mut stream = anstream::AutoStream::never(buffer);
+
+ stream.write_all(content).unwrap();
+
+ black_box(stream)
+ })
+ });
+ }
+}
+
+criterion::criterion_group!(benches, stream);
+criterion::criterion_main!(benches);
diff --git a/vendor/anstream/benches/strip.rs b/vendor/anstream/benches/strip.rs
new file mode 100644
index 0000000..9ed6178
--- /dev/null
+++ b/vendor/anstream/benches/strip.rs
@@ -0,0 +1,102 @@
+use criterion::{black_box, Criterion};
+
+#[derive(Default)]
+struct Strip(String);
+impl Strip {
+ fn with_capacity(capacity: usize) -> Self {
+ Self(String::with_capacity(capacity))
+ }
+}
+impl anstyle_parse::Perform for Strip {
+ fn print(&mut self, c: char) {
+ self.0.push(c);
+ }
+
+ fn execute(&mut self, byte: u8) {
+ if byte.is_ascii_whitespace() {
+ self.0.push(byte as char);
+ }
+ }
+}
+
+fn strip(c: &mut Criterion) {
+ for (name, content) in [
+ ("demo.vte", &include_bytes!("../tests/demo.vte")[..]),
+ ("rg_help.vte", &include_bytes!("../tests/rg_help.vte")[..]),
+ ("rg_linus.vte", &include_bytes!("../tests/rg_linus.vte")[..]),
+ (
+ "state_changes",
+ &b"\x1b]2;X\x1b\\ \x1b[0m \x1bP0@\x1b\\"[..],
+ ),
+ ] {
+ // Make sure the comparison is fair
+ if let Ok(content) = std::str::from_utf8(content) {
+ let mut stripped = Strip::with_capacity(content.len());
+ let mut parser = anstyle_parse::Parser::<anstyle_parse::DefaultCharAccumulator>::new();
+ for byte in content.as_bytes() {
+ parser.advance(&mut stripped, *byte);
+ }
+ assert_eq!(
+ stripped.0,
+ anstream::adapter::strip_str(content).to_string()
+ );
+ assert_eq!(
+ stripped.0,
+ String::from_utf8(anstream::adapter::strip_bytes(content.as_bytes()).into_vec())
+ .unwrap()
+ );
+ }
+
+ let mut group = c.benchmark_group(name);
+ group.bench_function("advance_strip", |b| {
+ b.iter(|| {
+ let mut stripped = Strip::with_capacity(content.len());
+ let mut parser =
+ anstyle_parse::Parser::<anstyle_parse::DefaultCharAccumulator>::new();
+
+ for byte in content {
+ parser.advance(&mut stripped, *byte);
+ }
+
+ black_box(stripped.0)
+ })
+ });
+ group.bench_function("strip_ansi_escapes", |b| {
+ b.iter(|| {
+ let stripped = strip_ansi_escapes::strip(content);
+
+ black_box(stripped)
+ })
+ });
+ if let Ok(content) = std::str::from_utf8(content) {
+ group.bench_function("strip_str", |b| {
+ b.iter(|| {
+ let stripped = anstream::adapter::strip_str(content).to_string();
+
+ black_box(stripped)
+ })
+ });
+ group.bench_function("StripStr", |b| {
+ b.iter(|| {
+ let mut stripped = String::with_capacity(content.len());
+ let mut state = anstream::adapter::StripStr::new();
+ for printable in state.strip_next(content) {
+ stripped.push_str(printable);
+ }
+
+ black_box(stripped)
+ })
+ });
+ }
+ group.bench_function("strip_bytes", |b| {
+ b.iter(|| {
+ let stripped = anstream::adapter::strip_bytes(content).into_vec();
+
+ black_box(stripped)
+ })
+ });
+ }
+}
+
+criterion::criterion_group!(benches, strip);
+criterion::criterion_main!(benches);
diff --git a/vendor/anstream/benches/wincon.rs b/vendor/anstream/benches/wincon.rs
new file mode 100644
index 0000000..54e1f80
--- /dev/null
+++ b/vendor/anstream/benches/wincon.rs
@@ -0,0 +1,26 @@
+use criterion::{black_box, Criterion};
+
+fn wincon(c: &mut Criterion) {
+ for (name, content) in [
+ ("demo.vte", &include_bytes!("../tests/demo.vte")[..]),
+ ("rg_help.vte", &include_bytes!("../tests/rg_help.vte")[..]),
+ ("rg_linus.vte", &include_bytes!("../tests/rg_linus.vte")[..]),
+ (
+ "state_changes",
+ &b"\x1b]2;X\x1b\\ \x1b[0m \x1bP0@\x1b\\"[..],
+ ),
+ ] {
+ let mut group = c.benchmark_group(name);
+ group.bench_function("wincon_bytes", |b| {
+ b.iter(|| {
+ let mut state = anstream::adapter::WinconBytes::new();
+ let stripped = state.extract_next(content).collect::<Vec<_>>();
+
+ black_box(stripped)
+ })
+ });
+ }
+}
+
+criterion::criterion_group!(benches, wincon);
+criterion::criterion_main!(benches);