anything 0.1.5

Calculate everything and nothing with perfect precision.
Documentation
use crate::rational::DisplaySpec;
use crate::Rational;

#[test]
fn test_zeros() {
    assert_eq! {
        str::parse::<Rational>("0").unwrap(),
        Rational::new(0u32, 1u32),
    };

    assert_eq! {
        str::parse::<Rational>("01").unwrap(),
        Rational::new(1u32, 1u32),
    };
}

#[test]
fn test_decimals() {
    assert_eq! {
        str::parse::<Rational>("3.1415").unwrap(),
        Rational::new(31415u32, 10000u32),
    };
}

#[test]
fn test_exponent() {
    assert_eq! {
        str::parse::<Rational>("1.1234e10").unwrap(),
        Rational::new(11234000000u64, 1u32),
    };

    assert_eq! {
        str::parse::<Rational>("1.1234e-10").unwrap(),
        Rational::new(5617u32, 50000000000000u64),
    };

    assert_eq! {
        str::parse::<Rational>("0e10").unwrap(),
        Rational::new(0u32, 1u32),
    };

    assert_eq! {
        str::parse::<Rational>("1e10").unwrap(),
        Rational::new(10000000000u64, 1u32),
    };
}

#[test]
fn test_display() {
    let basic = DisplaySpec {
        limit: 8,
        exponent_limit: 6,
        show_continuation: true,
    };

    let extended = DisplaySpec {
        limit: 40,
        exponent_limit: 6,
        show_continuation: true,
    };

    let s = Rational::new(1u32, 3u32).display(&basic).to_string();
    assert_eq!(s, "0.33333333…");

    let s = Rational::new(1u32, 1415u32).display(&basic).to_string();
    assert_eq!(s, "0.00070671378…");

    let s = Rational::new(1u32, 1415123312312333214u64)
        .display(&basic)
        .to_string();
    assert_eq!(s, "7.0665219…e-19");

    let s = Rational::new(1u32, 1415123312312333214u64)
        .display(&extended)
        .to_string();
    assert_eq!(s, "7.066521986454909362816626182915140226065…e-19");
}

#[test]
fn deserialize() {
    let r = Rational::new(1u32, 100u32);
    let s = serde_json::to_string(&r).unwrap();

    let num: Rational = serde_json::from_str(&s).unwrap();
    assert_eq!(num, Rational::new(1u32, 100u32));
}