Expand description

Traits for converting between different number types. The traits are CheckedFrom, WrappingFrom, SaturatingFrom, OverflowingFrom, ConvertibleFrom, and RoundingFrom.

checked_from

use malachite_base::num::conversion::traits::CheckedFrom;

assert_eq!(u8::checked_from(123u8), Some(123));
assert_eq!(i32::checked_from(-5i32), Some(-5));

assert_eq!(u16::checked_from(123u8), Some(123));
assert_eq!(i64::checked_from(-5i32), Some(-5));
assert_eq!(u32::checked_from(5u64), Some(5));

assert_eq!(u8::checked_from(1000u16), None);
assert_eq!(u32::checked_from(-5i32), None);
assert_eq!(i32::checked_from(3000000000u32), None);
assert_eq!(i8::checked_from(-1000i16), None);

assert_eq!(f32::checked_from(100u8), Some(100.0));
assert_eq!(f32::checked_from(u32::MAX), None);

assert_eq!(u8::checked_from(100.0f32), Some(100));
assert_eq!(u8::checked_from(100.1f32), None);
assert_eq!(u8::checked_from(300.0f32), None);
assert_eq!(u8::checked_from(-100.0f32), None);

wrapping_from

use malachite_base::num::conversion::traits::WrappingFrom;

assert_eq!(u8::wrapping_from(123u8), 123);
assert_eq!(i32::wrapping_from(-5i32), -5);

assert_eq!(u16::wrapping_from(123u8), 123);
assert_eq!(i64::wrapping_from(-5i32), -5);
assert_eq!(u32::wrapping_from(5u64), 5);

assert_eq!(u8::wrapping_from(1000u16), 232);
assert_eq!(u32::wrapping_from(-5i32), 4294967291);
assert_eq!(i32::wrapping_from(3000000000u32), -1294967296);
assert_eq!(i8::wrapping_from(-1000i16), 24);

saturating_from

use malachite_base::num::conversion::traits::SaturatingFrom;

assert_eq!(u8::saturating_from(123u8), 123);
assert_eq!(i32::saturating_from(-5i32), -5);

assert_eq!(u16::saturating_from(123u8), 123);
assert_eq!(i64::saturating_from(-5i32), -5);
assert_eq!(u32::saturating_from(5u64), 5);

assert_eq!(u8::saturating_from(1000u16), 255);
assert_eq!(u32::saturating_from(-5i32), 0);
assert_eq!(i32::saturating_from(3000000000u32), 2147483647);
assert_eq!(i8::saturating_from(-1000i16), -128);

overflowing_from

use malachite_base::num::conversion::traits::OverflowingFrom;

assert_eq!(u8::overflowing_from(123u8), (123, false));
assert_eq!(i32::overflowing_from(-5i32), (-5, false));

assert_eq!(u16::overflowing_from(123u8), (123, false));
assert_eq!(i64::overflowing_from(-5i32), (-5, false));
assert_eq!(u32::overflowing_from(5u64), (5, false));

assert_eq!(u8::overflowing_from(1000u16), (232, true));
assert_eq!(u32::overflowing_from(-5i32), (4294967291, true));
assert_eq!(i32::overflowing_from(3000000000u32), (-1294967296, true));
assert_eq!(i8::overflowing_from(-1000i16), (24, true));

convertible_from

use malachite_base::num::conversion::traits::ConvertibleFrom;

assert_eq!(u8::convertible_from(123u8), true);
assert_eq!(i32::convertible_from(-5i32), true);

assert_eq!(u16::convertible_from(123u8), true);
assert_eq!(i64::convertible_from(-5i32), true);
assert_eq!(u32::convertible_from(5u64), true);

assert_eq!(u8::convertible_from(1000u16), false);
assert_eq!(u32::convertible_from(-5i32), false);
assert_eq!(i32::convertible_from(3000000000u32), false);
assert_eq!(i8::convertible_from(-1000i16), false);

assert_eq!(f32::convertible_from(100u8), true);
assert_eq!(f32::convertible_from(u32::MAX), false);

assert_eq!(u8::convertible_from(100.0f32), true);
assert_eq!(u8::convertible_from(100.1f32), false);
assert_eq!(u8::convertible_from(300.0f32), false);
assert_eq!(u8::convertible_from(-100.0f32), false);

rounding_from

use malachite_base::num::conversion::traits::RoundingFrom;
use malachite_base::rounding_modes::RoundingMode;

assert_eq!(f32::rounding_from(100, RoundingMode::Floor), 100.0);
assert_eq!(f32::rounding_from(100, RoundingMode::Down), 100.0);
assert_eq!(f32::rounding_from(100, RoundingMode::Ceiling), 100.0);
assert_eq!(f32::rounding_from(100, RoundingMode::Up), 100.0);
assert_eq!(f32::rounding_from(100, RoundingMode::Nearest), 100.0);
assert_eq!(f32::rounding_from(100, RoundingMode::Exact), 100.0);

assert_eq!(
    f32::rounding_from(i32::MAX, RoundingMode::Floor),
    2147483500.0
);
assert_eq!(
    f32::rounding_from(i32::MAX, RoundingMode::Down),
    2147483500.0
);
assert_eq!(
    f32::rounding_from(i32::MAX, RoundingMode::Ceiling),
    2147483600.0
);
assert_eq!(f32::rounding_from(i32::MAX, RoundingMode::Up), 2147483600.0);
assert_eq!(
    f32::rounding_from(i32::MAX, RoundingMode::Nearest),
    2147483600.0
);

assert_eq!(u32::rounding_from(100.0f32, RoundingMode::Floor), 100);
assert_eq!(u32::rounding_from(100.0f32, RoundingMode::Down), 100);
assert_eq!(u32::rounding_from(100.0f32, RoundingMode::Ceiling), 100);
assert_eq!(u32::rounding_from(100.0f32, RoundingMode::Up), 100);
assert_eq!(u32::rounding_from(100.0f32, RoundingMode::Nearest), 100);
assert_eq!(u32::rounding_from(100.0f32, RoundingMode::Exact), 100);

assert_eq!(u32::rounding_from(100.5f32, RoundingMode::Floor), 100);
assert_eq!(u32::rounding_from(100.5f32, RoundingMode::Down), 100);
assert_eq!(u32::rounding_from(100.5f32, RoundingMode::Ceiling), 101);
assert_eq!(u32::rounding_from(100.5f32, RoundingMode::Up), 101);
assert_eq!(u32::rounding_from(100.5f32, RoundingMode::Nearest), 100);