exact-float 0.1.1

Do your calculations with exact floating point numbers
extern crate exact_float;

use exact_float::ExactFloat;

#[test]
fn test_add() {
    let f = ExactFloat::new(10);
    let n = f.clone() + 1;
    let p = f * n;
    assert_eq!(p.calculate().unwrap(), 110.0);
}

#[test]
fn test_mul() {
    let f = ExactFloat::new(10);
    let n = f.clone() * f.clone() / 2;
    let p = f * n;
    assert_eq!(p.calculate().unwrap(), 500.0);
}

#[test]
fn test_div() {
    let f = ExactFloat::new(10);
    let mut n = f.clone() / 3;
    n *= 33;
    assert_eq!(n.calculate().unwrap(), 110.0);

    n.pre_calculate();
    assert_eq!(n.calculate().unwrap(), 110.0);
}

#[test]
fn test_neg() {
    let f = ExactFloat::new(-10);
    let f = f.clone() * 2;
    let n = f.clone() * -3;
    assert_eq!(n.calculate().unwrap(), 60.0);
    let n = -n;
    assert_eq!(n.calculate().unwrap(), -60.0);
    assert_eq!(n.abs().calculate().unwrap(), 60.0);
}

#[test]
fn test_float() {
    let mut f = ExactFloat::new(2.0f64);
    println!("{:?}", f);
    f.pre_calculate();
    println!("{:?}", f);
    assert_eq!(f.calculate().unwrap(), 2.0);
}