#![feature(test)]
#[cfg(feature = "hyphenation")]
extern crate hyphenation;
extern crate lipsum;
extern crate rand;
extern crate rand_xorshift;
extern crate test;
extern crate textwrap;
#[cfg(feature = "hyphenation")]
use hyphenation::{Language, Load, Standard};
use lipsum::MarkovChain;
use rand::SeedableRng;
use rand_xorshift::XorShiftRng;
use test::Bencher;
#[cfg(feature = "hyphenation")]
use textwrap::Wrapper;
const LINE_LENGTH: usize = 60;
fn lorem_ipsum(length: usize) -> String {
let rng = XorShiftRng::seed_from_u64(0);
let mut chain = MarkovChain::new_with_rng(rng);
chain.learn(lipsum::LOREM_IPSUM);
chain.learn(lipsum::LIBER_PRIMUS);
let mut text = chain.generate_from(length / 5, ("Lorem", "ipsum"));
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 dictionary = Standard::from_embedded(Language::Latin).unwrap();
let wrapper = Wrapper::with_splitter(LINE_LENGTH, dictionary);
b.iter(|| wrapper.fill(text))
}
#[bench]
#[cfg(feature = "hyphenation")]
fn hyphenation_fill_200(b: &mut Bencher) {
let text = &lorem_ipsum(200);
let dictionary = Standard::from_embedded(Language::Latin).unwrap();
let wrapper = Wrapper::with_splitter(LINE_LENGTH, dictionary);
b.iter(|| wrapper.fill(text))
}
#[bench]
#[cfg(feature = "hyphenation")]
fn hyphenation_fill_400(b: &mut Bencher) {
let text = &lorem_ipsum(400);
let dictionary = Standard::from_embedded(Language::Latin).unwrap();
let wrapper = Wrapper::with_splitter(LINE_LENGTH, dictionary);
b.iter(|| wrapper.fill(text))
}
#[bench]
#[cfg(feature = "hyphenation")]
fn hyphenation_fill_800(b: &mut Bencher) {
let text = &lorem_ipsum(800);
let dictionary = Standard::from_embedded(Language::Latin).unwrap();
let wrapper = Wrapper::with_splitter(LINE_LENGTH, dictionary);
b.iter(|| wrapper.fill(text))
}