dashu-float 0.4.3

A big float library supporting arbitrary precision, arbitrary base and arbitrary rounding mode
Documentation
use dashu_float::DBig;
type FBig = dashu_float::FBig;

mod helper_macros;

#[test]
#[rustfmt::skip::macros(fbig)]
fn test_sum() {
    let nums = [
        fbig!(-0x1p2),
        fbig!(-0x1p1),
        fbig!(-0x1),
        fbig!(-0x1p-1),
        fbig!(-0x1p-2),
        fbig!(0),
        fbig!(0x1p-2),
        fbig!(0x1p-1),
        fbig!(0x1),
        fbig!(0x1p1),
        fbig!(0x1p2),
    ];

    assert_eq!(nums[..0].iter().sum::<FBig>(), fbig!(0));
    assert_eq!(nums[..1].iter().sum::<FBig>(), fbig!(-0x1p2));
    assert_eq!(nums[..2].iter().sum::<FBig>(), fbig!(-0x3p1));
    assert_eq!(nums[..4].iter().sum::<FBig>(), fbig!(-0xfp-1));
    assert_eq!(nums.iter().sum::<FBig>(), fbig!(0x1p-2));
    assert_eq!(nums.into_iter().sum::<FBig>(), fbig!(0x1p-2));

    let nums = [
        dbig!(-0001e2),
        dbig!(-1e1),
        dbig!(-1),
        dbig!(-1e-1),
        dbig!(-1e-2),
        dbig!(0),
        dbig!(1e-2),
        dbig!(1e-1),
        dbig!(1),
        dbig!(1e1),
        dbig!(1e2),
    ];

    assert_eq!(nums[..0].iter().sum::<DBig>(), dbig!(0));
    assert_eq!(nums[..1].iter().sum::<DBig>(), dbig!(-1e2));
    assert_eq!(nums[..2].iter().sum::<DBig>(), dbig!(-11e1));
    assert_eq!(nums[..4].iter().sum::<DBig>(), dbig!(-1111e-1));
    assert_eq!(nums.iter().sum::<DBig>(), dbig!(1e-2));
    assert_eq!(nums.into_iter().sum::<DBig>(), dbig!(1e-2));
}

#[test]
#[rustfmt::skip::macros(fbig)]
fn test_prod() {
    let nums = [
        fbig!(-0x1p2),
        fbig!(0x1p1),
        fbig!(-0x1),
        fbig!(0x1p-1),
        fbig!(-0x1p-2),
        fbig!(0),
    ];

    assert_eq!(nums[..0].iter().product::<FBig>(), fbig!(0x1));
    assert_eq!(nums[..1].iter().product::<FBig>(), fbig!(-0x1p2));
    assert_eq!(nums[..2].iter().product::<FBig>(), fbig!(-0x1p3));
    assert_eq!(nums[..4].iter().product::<FBig>(), fbig!(0x1p2));
    assert_eq!(nums.iter().product::<FBig>(), fbig!(0));
    assert_eq!(nums.into_iter().product::<FBig>(), fbig!(0));

    let nums = [
        dbig!(-0001e2),
        dbig!(1e1),
        dbig!(-1),
        dbig!(1e-1),
        dbig!(-1e-2),
        dbig!(0),
    ];

    assert_eq!(nums[..0].iter().product::<DBig>(), dbig!(1));
    assert_eq!(nums[..1].iter().product::<DBig>(), dbig!(-1e2));
    assert_eq!(nums[..2].iter().product::<DBig>(), dbig!(-1e3));
    assert_eq!(nums[..4].iter().product::<DBig>(), dbig!(1e2));
    assert_eq!(nums.iter().product::<DBig>(), dbig!(0));
    assert_eq!(nums.into_iter().product::<DBig>(), dbig!(0));
}