termint 0.8.1

Library for colored printing and Terminal User Interfaces
Documentation
use criterion::{Criterion, black_box, criterion_group};
use termint::{
    buffer::Buffer,
    geometry::Rect,
    widgets::{Element, Layout, LayoutNode, Widget},
};

fn layout_cache_render(c: &mut Criterion) {
    let mut layout = Layout::horizontal();
    for i in 0..100 {
        layout.push("word ".repeat((i % 15) + 1), 0..);
    }

    let rect = Rect::new(1, 1, 1000, 10);
    let buffer = Buffer::empty(rect);

    let layout: Element = layout.into();
    let mut node = LayoutNode::new(&layout);
    layout.render(&mut buffer.clone(), &node);

    c.bench_function("layout_cache_render", |b| {
        b.iter(|| {
            node.diff(&layout, &layout);
            layout.render(black_box(&mut buffer.clone()), black_box(&node));
        });
    });
}

fn layout_no_cache_render(c: &mut Criterion) {
    let mut layout = Layout::horizontal();
    for i in 0..100 {
        layout.push("word ".repeat((i % 15) + 1), 0..);
    }

    let rect = Rect::new(1, 1, 1000, 10);
    let buffer = Buffer::empty(rect);

    let layout: Element = layout.into();
    c.bench_function("layout_no_cache_render", |b| {
        b.iter(|| {
            let node = LayoutNode::new(&layout);
            layout.render(black_box(&mut buffer.clone()), black_box(&node));
        });
    });
}

criterion_group!(benches, layout_cache_render, layout_no_cache_render);