approx_int 1.2.1

A compact representation of numbers using a tuple (u8, u8, bool) for efficient approximation and storage.
Documentation
use std::u32;

use approx_int::SmallValue;

#[test]
fn add_t_0() {
    assert_eq!((SmallValue::new(128) + SmallValue::new(128)).min_bits(), 8);
}

#[test]
fn add_t_1() {
    assert_eq!((SmallValue::new(128) + SmallValue::new(64)).min_bits(), 8);
}

#[should_panic(expected = "overflow")]
#[test]
fn add_t_2() {
    let _c = SmallValue::new(u32::MAX) + SmallValue::new(u32::MAX);
}

#[test]
fn add_t_3() {
    assert!(SmallValue::new(u32::MAX)
        .checked_add(SmallValue::new(u32::MAX))
        .is_none());
}

#[test]
fn sub_t_0() {
    assert_eq!((SmallValue::new(128) - SmallValue::new(128)).min_bits(), 1);
}

#[test]
fn sub_t_1() {
    assert_eq!((SmallValue::new(128) - SmallValue::new(64)).min_bits(), 6);
}

#[test]
fn sub_t_2() {
    assert!(SmallValue::new(u32::MIN)
        .checked_sub(SmallValue::new(u32::MAX))
        .is_none());
}

#[test]
fn div_t_0() {
    assert_eq!((SmallValue::new(128) / SmallValue::new(128)).min_bits(), 1);
}

#[test]
fn div_t_1() {
    assert_eq!((SmallValue::new(128) / SmallValue::new(64)).min_bits(), 2);
}

#[test]
fn div_t_2() {
    assert!(SmallValue::new(u32::MAX)
        .checked_div(SmallValue::new(u32::MIN))
        .is_none());
}

#[test]
fn mul_t_0() {
    assert_eq!((SmallValue::new(128) * SmallValue::new(128)).min_bits(), 14);
}

#[test]
fn mul_t_1() {
    assert_eq!(
        (SmallValue::new(128u32) * SmallValue::new(128u32)).min_bits(),
        14
    );
}

#[test]
fn mul_t_2() {
    assert!(SmallValue::new(u32::MAX)
        .checked_mul(SmallValue::new(u32::MAX))
        .is_none());
}

#[test]
fn rem_t_0() {
    assert_eq!((SmallValue::new(128) % SmallValue::new(128)).min_bits(), 1);
}

#[test]
fn rem_t_1() {
    assert_eq!((SmallValue::new(128) % SmallValue::new(64)).min_bits(), 1);
}

#[test]
fn rem_t_2() {
    assert!(SmallValue::new(u32::MAX)
        .checked_rem(SmallValue::new(u32::MIN))
        .is_none());
}