summaryrefslogtreecommitdiffstats
path: root/vendor/kstring/benches/clone.rs
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/kstring/benches/clone.rs')
-rw-r--r--vendor/kstring/benches/clone.rs139
1 files changed, 139 insertions, 0 deletions
diff --git a/vendor/kstring/benches/clone.rs b/vendor/kstring/benches/clone.rs
new file mode 100644
index 000000000..b0740bad9
--- /dev/null
+++ b/vendor/kstring/benches/clone.rs
@@ -0,0 +1,139 @@
+#![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);