279 lines
8.2 KiB
Rust
279 lines
8.2 KiB
Rust
use arraystring::{prelude::*, typenum::U20};
|
|
use inlinable_string::{InlinableString, StringExt};
|
|
use smallstring::SmallString as SmallVecString;
|
|
use criterion::{criterion_group, criterion_main, Criterion};
|
|
|
|
fn string_clone_benchmark(c: &mut Criterion) {
|
|
let string = String::from("abcdefghijklmnopqrst");
|
|
c.bench_function("string clone", move |b| b.iter(|| string.clone()));
|
|
}
|
|
|
|
fn string_from_benchmark(c: &mut Criterion) {
|
|
let string = String::from("uvwxyzaabbccddeeffgg");
|
|
c.bench_function("string from", move |b| {
|
|
b.iter(|| String::from(string.as_str()))
|
|
});
|
|
}
|
|
|
|
fn string_push_str_benchmark(c: &mut Criterion) {
|
|
let mut string = String::default();
|
|
c.bench_function("string push str", move |b| {
|
|
b.iter(|| {
|
|
string.push_str("0123456789123456789");
|
|
string.clear();
|
|
string.shrink_to_fit();
|
|
})
|
|
});
|
|
}
|
|
|
|
fn inlinable_clone_benchmark(c: &mut Criterion) {
|
|
let string = InlinableString::from("hcuahdaidshdaisuhda");
|
|
c.bench_function("inlinable clone", move |b| b.iter(|| string.clone()));
|
|
}
|
|
|
|
fn inlinable_from_benchmark(c: &mut Criterion) {
|
|
let string = "edauhefhiaw na na ";
|
|
c.bench_function("inlinable from", move |b| {
|
|
b.iter(|| InlinableString::from(string))
|
|
});
|
|
}
|
|
|
|
fn inlinable_push_str_benchmark(c: &mut Criterion) {
|
|
let mut string = InlinableString::default();
|
|
c.bench_function("inlinable push str", move |b| {
|
|
b.iter(|| {
|
|
string.push_str("ddauhifnaoe jaowijd");
|
|
string.clear();
|
|
string.shrink_to_fit();
|
|
})
|
|
});
|
|
}
|
|
|
|
fn smallvecstring_clone_benchmark(c: &mut Criterion) {
|
|
let string = SmallVecString::<<U20 as Capacity>::Array>::from("xhduibabicemlatdhue");
|
|
c.bench_function("smallvecstring clone", move |b| b.iter(|| string.clone()));
|
|
}
|
|
|
|
fn smallvecstring_from_benchmark(c: &mut Criterion) {
|
|
let string = "audshaisdhaisduo8";
|
|
c.bench_function("smallvecstring from", move |b| {
|
|
b.iter(|| SmallVecString::<<U20 as Capacity>::Array>::from(string))
|
|
});
|
|
}
|
|
|
|
fn small_clone_benchmark(c: &mut Criterion) {
|
|
let string = SmallString::from_str_truncate("hhiijjkkllmmneeeepqq");
|
|
c.bench_function("small clone", move |b| b.iter(|| string.clone()));
|
|
}
|
|
|
|
fn small_from_unchecked_benchmark(c: &mut Criterion) {
|
|
let string = "rrssttuuvvwwxxyyzza";
|
|
c.bench_function("small from unchecked", move |b| {
|
|
b.iter(|| unsafe { SmallString::from_str_unchecked(&string) })
|
|
});
|
|
}
|
|
|
|
fn small_from_truncate_benchmark(c: &mut Criterion) {
|
|
let string = "bbbcccdddeeefffgggh";
|
|
c.bench_function("small from truncate", move |b| {
|
|
b.iter(|| SmallString::from_str_truncate(&string))
|
|
});
|
|
}
|
|
|
|
fn small_try_from_benchmark(c: &mut Criterion) {
|
|
let string = "iiijjjkkklllmmmnnnoo";
|
|
c.bench_function("small try from", move |b| {
|
|
b.iter(|| SmallString::try_from_str(&string))
|
|
});
|
|
}
|
|
|
|
fn small_push_str_unchecked_benchmark(c: &mut Criterion) {
|
|
let mut string = SmallString::default();
|
|
c.bench_function("small push str unchecked", move |b| {
|
|
b.iter(|| unsafe {
|
|
string.push_str_unchecked("1413121110987654321");
|
|
string.clear();
|
|
})
|
|
});
|
|
}
|
|
|
|
fn small_push_str_benchmark(c: &mut Criterion) {
|
|
let mut string = SmallString::default();
|
|
c.bench_function("small push str truncate", move |b| {
|
|
b.iter(|| {
|
|
string.push_str("1413121110987654321");
|
|
string.clear();
|
|
})
|
|
});
|
|
}
|
|
|
|
fn small_try_push_str_benchmark(c: &mut Criterion) {
|
|
let mut string = SmallString::default();
|
|
c.bench_function("small try push str", move |b| {
|
|
b.iter(|| {
|
|
string.try_push_str("9897969594939291908").unwrap();
|
|
string.clear();
|
|
})
|
|
});
|
|
}
|
|
|
|
fn cache_clone_benchmark(c: &mut Criterion) {
|
|
let string = CacheString::from_str_truncate("opppqqqrrrssstttuuuv");
|
|
c.bench_function("cache clone", move |b| b.iter(|| string.clone()));
|
|
}
|
|
|
|
fn cache_from_unchecked_benchmark(c: &mut Criterion) {
|
|
let string = "wwwxxxyyyzzzaaaabbbb";
|
|
c.bench_function("cache from unchecked", move |b| {
|
|
b.iter(|| unsafe { CacheString::from_str_unchecked(&string) })
|
|
});
|
|
}
|
|
|
|
fn cache_from_truncate_benchmark(c: &mut Criterion) {
|
|
let string = "ccccddddeeeeffffggggh";
|
|
c.bench_function("cache from truncate", move |b| {
|
|
b.iter(|| CacheString::from_str_truncate(&string))
|
|
});
|
|
}
|
|
|
|
fn cache_try_from_benchmark(c: &mut Criterion) {
|
|
let string = "iiiijjjjkkkkllllmmmmn";
|
|
c.bench_function("cache try from", move |b| {
|
|
b.iter(|| CacheString::try_from_str(&string))
|
|
});
|
|
}
|
|
|
|
fn cache_push_str_unchecked_benchmark(c: &mut Criterion) {
|
|
let mut string = CacheString::default();
|
|
c.bench_function("cache push str unchecked", move |b| {
|
|
b.iter(|| unsafe {
|
|
string.push_str_unchecked("1413121110987654321");
|
|
string.clear();
|
|
})
|
|
});
|
|
}
|
|
|
|
fn cache_push_str_benchmark(c: &mut Criterion) {
|
|
let mut string = CacheString::default();
|
|
c.bench_function("cache push str truncate", move |b| {
|
|
b.iter(|| {
|
|
string.push_str("1413121110987654321");
|
|
string.clear();
|
|
})
|
|
});
|
|
}
|
|
|
|
fn cache_try_push_str_benchmark(c: &mut Criterion) {
|
|
let mut string = CacheString::default();
|
|
c.bench_function("cache try push str", move |b| {
|
|
b.iter(|| {
|
|
string.try_push_str("9897969594939291908").unwrap();
|
|
string.clear();
|
|
})
|
|
});
|
|
}
|
|
|
|
fn max_clone_benchmark(c: &mut Criterion) {
|
|
let string = MaxString::from_str_truncate("ooopppqqqrrrssstttuu");
|
|
c.bench_function("max clone", move |b| b.iter(|| string.clone()));
|
|
}
|
|
|
|
fn max_from_unchecked_benchmark(c: &mut Criterion) {
|
|
let string = "vvvvwwwwxxxxyyyzzzza";
|
|
c.bench_function("max from unchecked", move |b| {
|
|
b.iter(|| unsafe { MaxString::from_str_unchecked(&string) })
|
|
});
|
|
}
|
|
|
|
fn max_from_truncate_benchmark(c: &mut Criterion) {
|
|
let string = "bbbbccccddddeeeeffff";
|
|
c.bench_function("max from truncate", move |b| {
|
|
b.iter(|| MaxString::from_str_truncate(&string))
|
|
});
|
|
}
|
|
|
|
fn max_try_from_benchmark(c: &mut Criterion) {
|
|
let string = "gggghhhhiiiijjjjkkkk";
|
|
c.bench_function("max try from", move |b| {
|
|
b.iter(|| MaxString::try_from_str(&string).unwrap())
|
|
});
|
|
}
|
|
|
|
fn max_push_str_unchecked_benchmark(c: &mut Criterion) {
|
|
let mut string = MaxString::default();
|
|
c.bench_function("max push str unchecked", move |b| {
|
|
b.iter(|| unsafe {
|
|
string.push_str_unchecked("1413121110987654321");
|
|
string.clear();
|
|
})
|
|
});
|
|
}
|
|
|
|
fn max_push_str_benchmark(c: &mut Criterion) {
|
|
let mut string = MaxString::default();
|
|
c.bench_function("max push str truncate", move |b| {
|
|
b.iter(|| {
|
|
string.push_str("1413121110987654321");
|
|
string.clear();
|
|
})
|
|
});
|
|
}
|
|
|
|
fn max_try_push_str_benchmark(c: &mut Criterion) {
|
|
let mut string = MaxString::default();
|
|
c.bench_function("max try push str", move |b| {
|
|
b.iter(|| {
|
|
string.try_push_str("9897969594939291908").unwrap();
|
|
string.clear();
|
|
})
|
|
});
|
|
}
|
|
|
|
criterion_group!(
|
|
string,
|
|
string_clone_benchmark,
|
|
string_from_benchmark,
|
|
string_push_str_benchmark
|
|
);
|
|
criterion_group!(
|
|
inlinable,
|
|
inlinable_clone_benchmark,
|
|
inlinable_from_benchmark,
|
|
inlinable_push_str_benchmark
|
|
);
|
|
criterion_group!(
|
|
smallvecstring,
|
|
smallvecstring_clone_benchmark,
|
|
smallvecstring_from_benchmark,
|
|
);
|
|
criterion_group!(
|
|
small,
|
|
small_clone_benchmark,
|
|
small_try_from_benchmark,
|
|
small_from_unchecked_benchmark,
|
|
small_from_truncate_benchmark,
|
|
small_try_push_str_benchmark,
|
|
small_push_str_unchecked_benchmark,
|
|
small_push_str_benchmark,
|
|
);
|
|
criterion_group!(
|
|
cache,
|
|
cache_clone_benchmark,
|
|
cache_try_from_benchmark,
|
|
cache_from_unchecked_benchmark,
|
|
cache_from_truncate_benchmark,
|
|
cache_try_push_str_benchmark,
|
|
cache_push_str_unchecked_benchmark,
|
|
cache_push_str_benchmark,
|
|
);
|
|
criterion_group!(
|
|
max,
|
|
max_clone_benchmark,
|
|
max_try_from_benchmark,
|
|
max_from_unchecked_benchmark,
|
|
max_from_truncate_benchmark,
|
|
max_try_push_str_benchmark,
|
|
max_push_str_unchecked_benchmark,
|
|
max_push_str_benchmark,
|
|
);
|
|
criterion_main!(string, inlinable, smallvecstring, small, cache, max);
|