mirror of
https://git.proxmox.com/git/rustc
synced 2025-08-16 14:40:37 +00:00
135 lines
4.5 KiB
Rust
135 lines
4.5 KiB
Rust
#![allow(
|
|
clippy::clone_on_copy,
|
|
clippy::useless_conversion,
|
|
clippy::clone_double_ref
|
|
)]
|
|
|
|
use criterion::{criterion_group, criterion_main, BenchmarkId, Criterion, Throughput};
|
|
|
|
type StringCow<'s> = std::borrow::Cow<'s, str>;
|
|
|
|
#[cfg(not(feature = "unstable_bench_subset"))]
|
|
pub static FIXTURES: &[&str] = &[
|
|
"",
|
|
"0",
|
|
"01",
|
|
"012",
|
|
"0123",
|
|
"01234",
|
|
"012345",
|
|
"0123456",
|
|
"01234567",
|
|
"012345678",
|
|
"0123456789",
|
|
"01234567890123456789",
|
|
"0123456789012345678901234567890123456789",
|
|
"01234567890123456789012345678901234567890123456789012345678901234567890123456789",
|
|
];
|
|
|
|
#[cfg(feature = "unstable_bench_subset")]
|
|
pub static FIXTURES: &[&str] = &[
|
|
"0123456789",
|
|
"01234567890123456789012345678901234567890123456789012345678901234567890123456789",
|
|
];
|
|
|
|
// Note: this is meant to measure the overhead for accessing the underlying str. We shouldn't try
|
|
// to optimize *just* the case being measured here.
|
|
fn bench_access(c: &mut Criterion) {
|
|
let mut group = c.benchmark_group("access");
|
|
for fixture in FIXTURES {
|
|
let len = fixture.len();
|
|
group.throughput(Throughput::Bytes(len as u64));
|
|
group.bench_with_input(
|
|
BenchmarkId::new("StringCow::Borrowed", len),
|
|
&len,
|
|
|b, _| {
|
|
let uut = StringCow::Borrowed(*fixture);
|
|
let uut = criterion::black_box(uut);
|
|
b.iter(|| uut.is_empty())
|
|
},
|
|
);
|
|
group.bench_with_input(BenchmarkId::new("StringCow::Owned", len), &len, |b, _| {
|
|
let uut = StringCow::Owned(String::from(*fixture));
|
|
let uut = criterion::black_box(uut);
|
|
b.iter(|| uut.is_empty())
|
|
});
|
|
group.bench_with_input(
|
|
BenchmarkId::new("KString::from_static", len),
|
|
&len,
|
|
|b, _| {
|
|
let uut = kstring::KString::from_static(*fixture);
|
|
let uut = criterion::black_box(uut);
|
|
b.iter(|| uut.is_empty())
|
|
},
|
|
);
|
|
group.bench_with_input(BenchmarkId::new("KString::from_ref", len), &len, |b, _| {
|
|
let uut = kstring::KString::from_ref(*fixture);
|
|
let uut = criterion::black_box(uut);
|
|
b.iter(|| uut.is_empty())
|
|
});
|
|
group.bench_with_input(
|
|
BenchmarkId::new("KString::from_string", len),
|
|
&len,
|
|
|b, _| {
|
|
let uut = kstring::KString::from_string(String::from(*fixture));
|
|
let uut = criterion::black_box(uut);
|
|
b.iter(|| uut.is_empty())
|
|
},
|
|
);
|
|
#[cfg(not(feature = "unstable_bench_subset"))]
|
|
group.bench_with_input(
|
|
BenchmarkId::new("KStringCow::from_static", len),
|
|
&len,
|
|
|b, _| {
|
|
let uut = kstring::KStringCow::from_static(*fixture);
|
|
let uut = criterion::black_box(uut);
|
|
b.iter(|| uut.is_empty())
|
|
},
|
|
);
|
|
#[cfg(not(feature = "unstable_bench_subset"))]
|
|
group.bench_with_input(
|
|
BenchmarkId::new("KStringCow::from_ref", len),
|
|
&len,
|
|
|b, _| {
|
|
let uut = kstring::KStringCow::from_ref(*fixture);
|
|
let uut = criterion::black_box(uut);
|
|
b.iter(|| uut.is_empty())
|
|
},
|
|
);
|
|
#[cfg(not(feature = "unstable_bench_subset"))]
|
|
group.bench_with_input(
|
|
BenchmarkId::new("KStringCow::from_string", len),
|
|
&len,
|
|
|b, _| {
|
|
let uut = kstring::KStringCow::from_string(String::from(*fixture));
|
|
let uut = criterion::black_box(uut);
|
|
b.iter(|| uut.is_empty())
|
|
},
|
|
);
|
|
#[cfg(not(feature = "unstable_bench_subset"))]
|
|
group.bench_with_input(
|
|
BenchmarkId::new("KStringRef::from_static", len),
|
|
&len,
|
|
|b, _| {
|
|
let uut = kstring::KStringRef::from_static(*fixture);
|
|
let uut = criterion::black_box(uut);
|
|
b.iter(|| uut.is_empty())
|
|
},
|
|
);
|
|
#[cfg(not(feature = "unstable_bench_subset"))]
|
|
group.bench_with_input(
|
|
BenchmarkId::new("KStringRef::from_ref", len),
|
|
&len,
|
|
|b, _| {
|
|
let uut = kstring::KStringRef::from_ref(*fixture);
|
|
let uut = criterion::black_box(uut);
|
|
b.iter(|| uut.is_empty())
|
|
},
|
|
);
|
|
}
|
|
group.finish();
|
|
}
|
|
|
|
criterion_group!(benches, bench_access);
|
|
criterion_main!(benches);
|