use criterion::{black_box, criterion_group, criterion_main, Criterion}; use rand::SeedableRng; use rand_distr::{Alphanumeric, Distribution, Uniform}; use rand_pcg::Lcg64Xsh32; use std::ops::RangeInclusive;
use zerovec::VarZeroVec;
/// Generates an array of random alphanumeric strings. /// /// - length = range of lengths for the strings (chosen uniformly at random) /// - count = number of strings to generate /// - seed = seed for the PRNG /// /// Returns a tuple including the vector and a u64 that can be used to seed the next PRNG. fn random_alphanums(lengths: RangeInclusive<usize>, count: usize, seed: u64) -> (Vec<String>, u64) { // Lcg64Xsh32 is a small, fast PRNG for reproducible benchmarks. letmut rng1 = Lcg64Xsh32::seed_from_u64(seed); letmut rng2 = Lcg64Xsh32::seed_from_u64(rand::Rng::gen(&mut rng1)); let alpha_dist = Alphanumeric; let len_dist = Uniform::from(lengths); let string_vec = len_dist
.sample_iter(&mut rng1)
.take(count)
.map(|len| {
(&alpha_dist)
.sample_iter(&mut rng2)
.take(len)
.map(char::from)
.collect::<String>()
})
.collect();
(string_vec, rand::Rng::gen(&mut rng1))
}
fn overview_bench(c: &mut Criterion) { // Same as vzv/char_count/vzv but with different inputs let seed = 42; let (string_vec, _) = random_alphanums(2..=10, 100, seed); let bytes: Vec<u8> = VarZeroVec::<str>::from(&string_vec).into_bytes(); let vzv = VarZeroVec::<str>::parse_byte_slice(black_box(bytes.as_slice())).unwrap();
#[cfg(feature = "bench")] // Testing differences between operating on slices with precomputed/non-precomputed indexing info fn vzv_precompute_bench(c: &mut Criterion) { let seed = 2021; let (string_vec, seed) = random_alphanums(2..=20, 500, seed); let (needles, _) = random_alphanums(2..=20, 10, seed); let bytes: Vec<u8> = VarZeroVec::<str>::from(&string_vec).into_bytes(); let vzv = VarZeroVec::<str>::parse_byte_slice(black_box(bytes.as_slice())).unwrap(); let borrowed = vzv.as_components(); let slice = vzv.as_slice(); let single_needle = "lmnop";
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.