blob: 2a165775be61b2fe29d518804ca8d1f2be38b41a [file] [log] [blame]
#![feature(test)]
// The benchmarks here verify that the complexity grows as O(*n*)
// where *n* is the number of characters in the text to be wrapped.
extern crate test;
extern crate lipsum;
extern crate textwrap;
#[cfg(feature = "hyphenation")]
extern crate hyphenation;
use test::Bencher;
#[cfg(feature = "hyphenation")]
use hyphenation::Language;
#[cfg(feature = "hyphenation")]
use textwrap::Wrapper;
const LINE_LENGTH: usize = 60;
/// Generate a lorem ipsum text with the given number of characters.
fn lorem_ipsum(length: usize) -> String {
// The average word length in the lorem ipsum text is somewhere
// between 6 and 7. So we conservatively divide by 5 to have a
// long enough text that we can truncate below.
let mut text = lipsum::lipsum(length / 5);
text.truncate(length);
text
}
#[bench]
fn fill_100(b: &mut Bencher) {
let text = &lorem_ipsum(100);
b.iter(|| textwrap::fill(text, LINE_LENGTH))
}
#[bench]
fn fill_200(b: &mut Bencher) {
let text = &lorem_ipsum(200);
b.iter(|| textwrap::fill(text, LINE_LENGTH))
}
#[bench]
fn fill_400(b: &mut Bencher) {
let text = &lorem_ipsum(400);
b.iter(|| textwrap::fill(text, LINE_LENGTH))
}
#[bench]
fn fill_800(b: &mut Bencher) {
let text = &lorem_ipsum(800);
b.iter(|| textwrap::fill(text, LINE_LENGTH))
}
#[bench]
fn wrap_100(b: &mut Bencher) {
let text = &lorem_ipsum(100);
b.iter(|| textwrap::wrap(text, LINE_LENGTH))
}
#[bench]
fn wrap_200(b: &mut Bencher) {
let text = &lorem_ipsum(200);
b.iter(|| textwrap::wrap(text, LINE_LENGTH))
}
#[bench]
fn wrap_400(b: &mut Bencher) {
let text = &lorem_ipsum(400);
b.iter(|| textwrap::wrap(text, LINE_LENGTH))
}
#[bench]
fn wrap_800(b: &mut Bencher) {
let text = &lorem_ipsum(800);
b.iter(|| textwrap::wrap(text, LINE_LENGTH))
}
#[bench]
#[cfg(feature = "hyphenation")]
fn hyphenation_fill_100(b: &mut Bencher) {
let text = &lorem_ipsum(100);
let corpus = hyphenation::load(Language::Latin).unwrap();
let wrapper = Wrapper::new(LINE_LENGTH).word_splitter(Box::new(corpus));
b.iter(|| wrapper.fill(text))
}
#[bench]
#[cfg(feature = "hyphenation")]
fn hyphenation_fill_200(b: &mut Bencher) {
let text = &lorem_ipsum(200);
let corpus = hyphenation::load(Language::Latin).unwrap();
let wrapper = Wrapper::new(LINE_LENGTH).word_splitter(Box::new(corpus));
b.iter(|| wrapper.fill(text))
}
#[bench]
#[cfg(feature = "hyphenation")]
fn hyphenation_fill_400(b: &mut Bencher) {
let text = &lorem_ipsum(400);
let corpus = hyphenation::load(Language::Latin).unwrap();
let wrapper = Wrapper::new(LINE_LENGTH).word_splitter(Box::new(corpus));
b.iter(|| wrapper.fill(text))
}
#[bench]
#[cfg(feature = "hyphenation")]
fn hyphenation_fill_800(b: &mut Bencher) {
let text = &lorem_ipsum(800);
let corpus = hyphenation::load(Language::Latin).unwrap();
let wrapper = Wrapper::new(LINE_LENGTH).word_splitter(Box::new(corpus));
b.iter(|| wrapper.fill(text))
}