decstr 0.2.0

IEEE 754 decimal floating point bitstrings
Documentation
#![feature(test)]
extern crate test;

use decstr::Bitstring;

fn finite_cases() -> &'static [&'static str] {
    &[
        "123",
        "-0",
        "53346.6547e34",
        "-2432",
        "1",
        "-475765.35342",
        "-673873458673",
        "0",
        "-232.65473443e236",
        "673873458673",
        "1e17",
    ]
}

#[bench]
fn decimal_from_str_finite(b: &mut test::Bencher) {
    b.iter(|| {
        for case in finite_cases() {
            test::black_box(Bitstring::try_parse_str(case).unwrap());
        }
    });
}

#[bench]
fn decimal_to_str_finite(b: &mut test::Bencher) {
    use std::fmt::Write;

    let mut buf = String::new();

    let cases = finite_cases()
        .iter()
        .map(|case| Bitstring::try_parse_str(case).unwrap())
        .collect::<Vec<_>>();

    b.iter(|| {
        for case in &cases {
            buf.clear();

            write!(&mut buf, "{}", case).unwrap();
        }
    })
}

#[bench]
fn libdecimal128_from_str_finite(b: &mut test::Bencher) {
    b.iter(|| {
        for case in finite_cases() {
            let d: dec::Decimal128 = case.parse().unwrap();

            test::black_box(d);
        }
    });
}

#[bench]
fn libdecimal128_to_str_finite(b: &mut test::Bencher) {
    use std::fmt::Write;

    let mut buf = String::new();

    let cases = finite_cases()
        .iter()
        .map(|case| case.parse().unwrap())
        .collect::<Vec<dec::Decimal128>>();

    b.iter(|| {
        for case in &cases {
            buf.clear();

            write!(&mut buf, "{}", case).unwrap();
        }
    })
}