blob: b0740bad9fab21d151db528a6bf4e7ef46af0f2b [file] [log] [blame]
#![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);