use console_static_text::ConsoleSize;
use console_static_text::ConsoleStaticText;
use console_static_text::TextItem;
fn main() {
divan::main();
}
const COLS: u16 = 80;
const ROWS: u16 = 25;
const SIZE: ConsoleSize = ConsoleSize {
cols: Some(COLS),
rows: Some(ROWS),
};
#[divan::bench(args = [25, 100, 1_000, 10_000])]
fn many_items(bencher: divan::Bencher, n: usize) {
let items: Vec<TextItem<'static>> = (0..n)
.map(|i| TextItem::new_owned(format!("item line {}", i)))
.collect();
bencher.bench_local(|| {
let mut s = ConsoleStaticText::new(|| SIZE);
s.render_items_with_size(divan::black_box(items.iter()), SIZE)
});
}
#[divan::bench(args = [25, 100, 1_000, 10_000])]
fn single_item_many_paragraphs(bencher: divan::Bencher, n: usize) {
let text = (0..n)
.map(|i| format!("paragraph {}", i))
.collect::<Vec<_>>()
.join("\n");
let items = [TextItem::new_owned(text)];
bencher.bench_local(|| {
let mut s = ConsoleStaticText::new(|| SIZE);
s.render_items_with_size(divan::black_box(items.iter()), SIZE)
});
}
#[divan::bench(args = [80, 800, 8_000, 80_000])]
fn single_long_line(bencher: divan::Bencher, len: usize) {
let text: String = std::iter::repeat('x').take(len).collect();
let items = [TextItem::new_owned(text)];
bencher.bench_local(|| {
let mut s = ConsoleStaticText::new(|| SIZE);
s.render_items_with_size(divan::black_box(items.iter()), SIZE)
});
}
#[divan::bench(args = [25, 100, 1_000])]
fn wrapped_items(bencher: divan::Bencher, n: usize) {
let items: Vec<TextItem<'static>> = (0..n)
.map(|i| {
TextItem::new_owned(format!(
"this is a moderately long line {} that needs wrapping at eighty columns to exercise the word wrapping path",
i
))
})
.collect();
bencher.bench_local(|| {
let mut s = ConsoleStaticText::new(|| SIZE);
s.render_items_with_size(divan::black_box(items.iter()), SIZE)
});
}