Add big string array bench generation.

This commit is contained in:
Ethiraric 2024-01-30 23:11:00 +01:00
parent 1dcb1eee34
commit 5d94b8174d
2 changed files with 23 additions and 1 deletions

View file

@ -120,6 +120,12 @@ pub fn name(rng: &mut ThreadRng, len_lo: usize, len_hi: usize) -> String {
ret ret
} }
/// Generate a set of words.
pub fn words(rng: &mut ThreadRng, words_lo: usize, words_hi: usize) -> String {
let nwords = rng.gen_range(words_lo..words_hi);
lipsum::lipsum_words_with_rng(rng.clone(), nwords).replace(|c| "-\'\",*:".contains(c), "")
}
/// Generate a lipsum text. /// Generate a lipsum text.
/// ///
/// Texts are composed of some paragraphs and empty lines between them. /// Texts are composed of some paragraphs and empty lines between them.

View file

@ -9,7 +9,7 @@ use rand::{rngs::ThreadRng, Rng};
fn main() -> std::fmt::Result { fn main() -> std::fmt::Result {
let mut s = String::new(); let mut s = String::new();
let mut g = Generator::new(); let mut g = Generator::new();
g.gen_record_array(&mut s, 100_000, 100_001)?; g.gen_strings_array(&mut s, 1_300_000, 1_300_001, 10, 40)?;
println!("{s}"); println!("{s}");
Ok(()) Ok(())
} }
@ -43,9 +43,25 @@ impl Generator {
self.gen_array(writer, items_lo, items_hi, Generator::gen_record_object) self.gen_array(writer, items_lo, items_hi, Generator::gen_record_object)
} }
/// Generate an array of strings.
fn gen_strings_array<W: std::fmt::Write>(
&mut self,
writer: &mut W,
items_lo: usize,
items_hi: usize,
words_lo: usize,
words_hi: usize,
) -> std::fmt::Result {
self.gen_array(writer, items_lo, items_hi, |gen, writer| {
write!(writer, "{}", gen::words(&mut gen.rng, words_lo, words_hi))
})
}
/// Generate a YAML object/mapping containing a record. /// Generate a YAML object/mapping containing a record.
/// ///
/// Fields are description, hash, version, home, repository and pdf. /// Fields are description, hash, version, home, repository and pdf.
/// The `description` field is a long string and puts a lot of weight in plain scalar / block
/// scalar parsing.
fn gen_record_object<W: std::fmt::Write>(&mut self, writer: &mut W) -> std::fmt::Result { fn gen_record_object<W: std::fmt::Write>(&mut self, writer: &mut W) -> std::fmt::Result {
let mut fields = HashMap::<String, Box<GenFn<W>>>::new(); let mut fields = HashMap::<String, Box<GenFn<W>>>::new();
fields.insert( fields.insert(