animate 0.4.1

Animation library for Ratatui
Documentation
use animate::{Animate as _, TweenAnim, Tween, Once, Alternate, Cycle, easing, tick};
use criterion::{Criterion, criterion_group, criterion_main};
use std::hint::black_box;

fn bench_once_f64(c: &mut Criterion) {
    c.bench_function("once_f64", |b| {
        b.iter(|| {
            let mut anim: Tween<_, _, _, Once> = Tween::new(0.0, 1000.0, easing::linear, f64::tween);
            anim.set(100.0);

            for _ in 0..10_000 {
                tick(1);
                anim.update();
                black_box(anim.get());
            }
        })
    });
}

fn bench_alternate_f64(c: &mut Criterion) {
    c.bench_function("alternate_f64", |b| {
        b.iter(|| {
            let mut anim: Tween<_, _, _, Alternate> = Tween::new(0.0, 1000.0, easing::linear, f64::tween);
            anim.set(100.0);

            for _ in 0..10_000 {
                tick(1);
                anim.update();
                black_box(anim.get());
            }
        })
    });
}

fn bench_cycle_f64(c: &mut Criterion) {
    c.bench_function("cycle_f64", |b| {
        b.iter(|| {
            let mut anim: Tween<_, _, _, Cycle> = Tween::new(0.0, 1000.0, easing::linear, f64::tween);
            anim.set(100.0);

            for _ in 0..10_000 {
                tick(1);
                anim.update();
                black_box(anim.get());
            }
        })
    });
}

fn bench_many_fields(c: &mut Criterion) {
    c.bench_function("many_fields_100", |b| {
        b.iter(|| {
            let mut anims = (0..100)
                .map(|_| Tween::<_, _, _, Once>::new(0.0, 1000.0, easing::linear, f64::tween))
                .collect::<Vec<_>>();

            for a in &mut anims {
                a.set(100.0);
            }

            for _ in 0..1000 {
                tick(1);
                for a in &mut anims {
                    a.update();
                    black_box(a.get());
                }
            }
        })
    });
}

criterion_group!(
    benches,
    bench_once_f64,
    bench_alternate_f64,
    bench_cycle_f64,
    bench_many_fields
);

criterion_main!(benches);