2025-04-09 16:55:13 +02:00
|
|
|
use criterion::{BenchmarkId, Criterion, Throughput, criterion_group, criterion_main};
|
2025-03-25 20:03:19 +01:00
|
|
|
use edit::helpers::*;
|
2025-04-16 15:19:03 +02:00
|
|
|
use edit::simd;
|
2025-04-09 16:55:13 +02:00
|
|
|
use edit::ucd;
|
2025-03-25 20:03:19 +01:00
|
|
|
|
|
|
|
fn bench(c: &mut Criterion) {
|
2025-04-16 15:19:03 +02:00
|
|
|
let mut buffer1 = [0u8; 2048];
|
|
|
|
let mut buffer4 = [0u32; 2048];
|
|
|
|
|
2025-03-28 22:53:32 +01:00
|
|
|
let reference = concat!(
|
|
|
|
"In the quiet twilight, dreams unfold, soft whispers of a story untold.\n",
|
|
|
|
"月明かりが静かに照らし出し、夢を見る心の奥で詩が静かに囁かれる\n",
|
|
|
|
"Stars collide in the early light of hope, echoing the silent call of the night.\n",
|
|
|
|
"夜の静寂、希望と孤独が混ざり合うその中で詩が永遠に続く\n",
|
|
|
|
);
|
2025-03-25 20:03:19 +01:00
|
|
|
let buffer = reference.repeat(10);
|
|
|
|
let bytes = buffer.as_bytes();
|
|
|
|
|
2025-04-09 16:55:13 +02:00
|
|
|
let mut group = c.benchmark_group("ucd::MeasurementConfig::goto_logical");
|
2025-03-25 20:03:19 +01:00
|
|
|
group.throughput(Throughput::Bytes(bytes.len() as u64));
|
2025-04-09 16:55:13 +02:00
|
|
|
group.bench_function("basic", |b| {
|
|
|
|
b.iter(|| ucd::MeasurementConfig::new(&bytes).goto_logical(Point::MAX))
|
2025-03-25 20:03:19 +01:00
|
|
|
});
|
2025-04-09 16:55:13 +02:00
|
|
|
group.bench_function("word_wrap", |b| {
|
2025-03-28 22:53:32 +01:00
|
|
|
b.iter(|| {
|
2025-04-09 16:55:13 +02:00
|
|
|
ucd::MeasurementConfig::new(&bytes)
|
|
|
|
.with_word_wrap_column(50)
|
|
|
|
.goto_logical(Point::MAX)
|
2025-03-28 22:53:32 +01:00
|
|
|
})
|
|
|
|
});
|
2025-03-25 20:03:19 +01:00
|
|
|
group.finish();
|
2025-04-09 16:55:13 +02:00
|
|
|
|
2025-04-16 15:19:03 +02:00
|
|
|
let mut group = c.benchmark_group("simd::memchr2");
|
|
|
|
for &size in &[8usize, 40, 72, 1032] {
|
2025-04-09 16:55:13 +02:00
|
|
|
group.throughput(Throughput::Bytes(size as u64 + 1));
|
|
|
|
group.bench_with_input(BenchmarkId::from_parameter(size), &size, |b, &size| {
|
2025-04-16 15:19:03 +02:00
|
|
|
buffer1.fill(b'a');
|
|
|
|
buffer1[size] = b'\n';
|
|
|
|
b.iter(|| simd::memchr2(b'\n', b'\r', &buffer1, 0));
|
|
|
|
});
|
|
|
|
}
|
|
|
|
group.finish();
|
|
|
|
|
|
|
|
let mut group = c.benchmark_group("simd::memset::<u8>");
|
|
|
|
for &size in &[8usize, 40, 72, 1032] {
|
|
|
|
group.throughput(Throughput::Bytes(size as u64));
|
|
|
|
group.bench_with_input(BenchmarkId::from_parameter(size), &size, |b, &size| {
|
|
|
|
b.iter(|| simd::memset(&mut buffer1[..size], 0));
|
|
|
|
});
|
|
|
|
}
|
|
|
|
group.finish();
|
|
|
|
|
|
|
|
let mut group = c.benchmark_group("simd::memset::<u32>");
|
|
|
|
for &size in &[8usize, 40, 72, 1032] {
|
|
|
|
group.throughput(Throughput::Bytes(size as u64));
|
|
|
|
group.bench_with_input(BenchmarkId::from_parameter(size), &size, |b, &size| {
|
|
|
|
b.iter(|| simd::memset(&mut buffer4[..size / 4], 0));
|
2025-04-09 16:55:13 +02:00
|
|
|
});
|
|
|
|
}
|
|
|
|
group.finish();
|
2025-03-25 20:03:19 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
criterion_group!(benches, bench);
|
|
|
|
criterion_main!(benches);
|