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);
Messung V0.5 in Prozent C=100 H=92 G=95
¤ Dauer der Verarbeitung: 0.12 Sekunden
(vorverarbeitet am 2026-06-21)
¤
*© Formatika GbR, Deutschland