use super::super::*;
use core::num::flt2dec::strategy::dragon::*;
use std::mem::MaybeUninit;
use test::Bencher;

#[bench]
fn bench_small_shortest(b: &mut Bencher) {
    let decoded = decode_finite(3.141592f64);
    let mut buf = [MaybeUninit::new(0); MAX_SIG_DIGITS];
    b.iter(|| {
        format_shortest(&decoded, &mut buf);
    });
}

#[bench]
fn bench_big_shortest(b: &mut Bencher) {
    let decoded = decode_finite(f64::MAX);
    let mut buf = [MaybeUninit::new(0); MAX_SIG_DIGITS];
    b.iter(|| {
        format_shortest(&decoded, &mut buf);
    });
}

#[bench]
fn bench_small_exact_3(b: &mut Bencher) {
    let decoded = decode_finite(3.141592f64);
    let mut buf = [MaybeUninit::new(0); 3];
    b.iter(|| {
        format_exact(&decoded, &mut buf, i16::MIN);
    });
}

#[bench]
fn bench_big_exact_3(b: &mut Bencher) {
    let decoded = decode_finite(f64::MAX);
    let mut buf = [MaybeUninit::new(0); 3];
    b.iter(|| {
        format_exact(&decoded, &mut buf, i16::MIN);
    });
}

#[bench]
fn bench_small_exact_12(b: &mut Bencher) {
    let decoded = decode_finite(3.141592f64);
    let mut buf = [MaybeUninit::new(0); 12];
    b.iter(|| {
        format_exact(&decoded, &mut buf, i16::MIN);
    });
}

#[bench]
fn bench_big_exact_12(b: &mut Bencher) {
    let decoded = decode_finite(f64::MAX);
    let mut buf = [MaybeUninit::new(0); 12];
    b.iter(|| {
        format_exact(&decoded, &mut buf, i16::MIN);
    });
}

#[bench]
fn bench_small_exact_inf(b: &mut Bencher) {
    let decoded = decode_finite(3.141592f64);
    let mut buf = [MaybeUninit::new(0); 1024];
    b.iter(|| {
        format_exact(&decoded, &mut buf, i16::MIN);
    });
}

#[bench]
fn bench_big_exact_inf(b: &mut Bencher) {
    let decoded = decode_finite(f64::MAX);
    let mut buf = [MaybeUninit::new(0); 1024];
    b.iter(|| {
        format_exact(&decoded, &mut buf, i16::MIN);
    });
}
