mirror of
https://git.proxmox.com/git/rustc
synced 2025-08-18 03:32:21 +00:00
140 lines
5.2 KiB
Rust
140 lines
5.2 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] = &[
|
|
// Empty handling
|
|
"",
|
|
// Barely used
|
|
"1",
|
|
// kstring's max small-string size
|
|
"123456789012345",
|
|
// Boundary conditions for most small-string optimizations
|
|
"1234567890123456789012",
|
|
"12345678901234567890123",
|
|
"123456789012345678901234",
|
|
"1234567890123456789012345",
|
|
// Small heap
|
|
"1234567890123456789012345678901234567890123456789012345678901234",
|
|
// Large heap
|
|
"12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890",
|
|
];
|
|
|
|
#[cfg(feature = "unstable_bench_subset")]
|
|
pub static FIXTURES: &[&str] = &[
|
|
"0123456789",
|
|
"01234567890123456789012345678901234567890123456789012345678901234567890123456789",
|
|
];
|
|
|
|
fn bench_clone(c: &mut Criterion) {
|
|
let mut group = c.benchmark_group("clone");
|
|
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.clone())
|
|
},
|
|
);
|
|
group.bench_with_input(BenchmarkId::new("StringCow::Owned", len), &len, |b, _| {
|
|
let fixture = String::from(*fixture);
|
|
let uut = StringCow::Owned(fixture);
|
|
let uut = criterion::black_box(uut);
|
|
b.iter(|| uut.clone())
|
|
});
|
|
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.clone())
|
|
},
|
|
);
|
|
group.bench_with_input(BenchmarkId::new("KString::from_ref", len), &len, |b, _| {
|
|
let fixture = String::from(*fixture);
|
|
let uut = kstring::KString::from_ref(&fixture);
|
|
let uut = criterion::black_box(uut);
|
|
b.iter(|| uut.clone())
|
|
});
|
|
group.bench_with_input(
|
|
BenchmarkId::new("KString::from_string", len),
|
|
&len,
|
|
|b, _| {
|
|
let fixture = String::from(*fixture);
|
|
let uut = kstring::KString::from_string(fixture);
|
|
let uut = criterion::black_box(uut);
|
|
b.iter(|| uut.clone())
|
|
},
|
|
);
|
|
#[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.clone())
|
|
},
|
|
);
|
|
#[cfg(not(feature = "unstable_bench_subset"))]
|
|
group.bench_with_input(
|
|
BenchmarkId::new("KStringCow::from_ref", len),
|
|
&len,
|
|
|b, _| {
|
|
let fixture = String::from(*fixture);
|
|
let uut = kstring::KStringCow::from_ref(&fixture);
|
|
let uut = criterion::black_box(uut);
|
|
b.iter(|| uut.clone())
|
|
},
|
|
);
|
|
#[cfg(not(feature = "unstable_bench_subset"))]
|
|
group.bench_with_input(
|
|
BenchmarkId::new("KStringCow::from_string", len),
|
|
&len,
|
|
|b, _| {
|
|
let fixture = String::from(*fixture);
|
|
let uut = kstring::KStringCow::from_string(fixture);
|
|
let uut = criterion::black_box(uut);
|
|
b.iter(|| uut.clone())
|
|
},
|
|
);
|
|
#[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.clone())
|
|
},
|
|
);
|
|
#[cfg(not(feature = "unstable_bench_subset"))]
|
|
group.bench_with_input(
|
|
BenchmarkId::new("KStringRef::from_ref", len),
|
|
&len,
|
|
|b, _| {
|
|
let fixture = String::from(*fixture);
|
|
let uut = kstring::KStringRef::from_ref(&fixture);
|
|
let uut = criterion::black_box(uut);
|
|
b.iter(|| uut.clone())
|
|
},
|
|
);
|
|
}
|
|
group.finish();
|
|
}
|
|
|
|
criterion_group!(benches, bench_clone);
|
|
criterion_main!(benches);
|