#![doc(
html_logo_url = "https://raw.githubusercontent.com/embedded-graphics/embedded-graphics/b225511f390c0ed9bc065eb67d05125845312148/assets/logo_core.svg?sanitize=true"
)]
#![no_std]
#![deny(missing_docs)]
#![deny(missing_debug_implementations)]
#![deny(missing_copy_implementations)]
#![deny(trivial_casts)]
#![deny(trivial_numeric_casts)]
#![deny(unsafe_code)]
#![deny(unstable_features)]
#![deny(unused_import_braces)]
#![deny(unused_qualifications)]
pub mod draw_target;
mod drawable;
pub mod geometry;
pub mod image;
pub mod pixelcolor;
pub mod prelude;
pub mod primitives;
pub mod text;
pub use drawable::{Drawable, Pixel};
trait SaturatingCast<T> {
fn saturating_cast(self) -> T;
fn saturating_cast_neg(self) -> T;
}
impl SaturatingCast<i32> for u32 {
fn saturating_cast(self) -> i32 {
if self < 0x8000_0000 {
self as i32
} else {
i32::max_value()
}
}
fn saturating_cast_neg(self) -> i32 {
if self < 0x8000_0000 {
-(self as i32)
} else {
i32::min_value()
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn saturating_cast() {
assert_eq!(0u32.saturating_cast(), 0i32);
assert_eq!(0u32.saturating_cast_neg(), 0i32);
assert_eq!(1u32.saturating_cast(), 1i32);
assert_eq!(1u32.saturating_cast_neg(), -1i32);
assert_eq!(0x7FFF_FFFFu32.saturating_cast(), 0x7FFF_FFFFi32);
assert_eq!(0x7FFF_FFFFu32.saturating_cast_neg(), -0x7FFF_FFFFi32);
assert_eq!(0x8000_0000u32.saturating_cast(), 0x7FFF_FFFFi32);
assert_eq!(0x8000_0000u32.saturating_cast_neg(), -0x8000_0000i32);
assert_eq!(u32::max_value().saturating_cast(), 0x7FFF_FFFFi32);
assert_eq!(u32::max_value().saturating_cast_neg(), -0x8000_0000i32);
}
}