pub trait PixelBound {
fn min_pixel() -> Self;
fn max_pixel() -> Self;
fn is_integral() -> bool {
true
}
}
impl PixelBound for f64 {
fn min_pixel() -> Self {
0.0f64
}
fn max_pixel() -> Self {
1.0f64
}
fn is_integral() -> bool {
false
}
}
impl PixelBound for f32 {
fn min_pixel() -> Self {
0.0f32
}
fn max_pixel() -> Self {
1.0f32
}
fn is_integral() -> bool {
false
}
}
impl PixelBound for u8 {
fn min_pixel() -> Self {
Self::min_value()
}
fn max_pixel() -> Self {
Self::max_value()
}
}
impl PixelBound for u16 {
fn min_pixel() -> Self {
Self::min_value()
}
fn max_pixel() -> Self {
Self::max_value()
}
}
impl PixelBound for u32 {
fn min_pixel() -> Self {
Self::min_value()
}
fn max_pixel() -> Self {
Self::max_value()
}
}
impl PixelBound for u64 {
fn min_pixel() -> Self {
Self::min_value()
}
fn max_pixel() -> Self {
Self::max_value()
}
}
impl PixelBound for u128 {
fn min_pixel() -> Self {
Self::min_value()
}
fn max_pixel() -> Self {
Self::max_value()
}
}
impl PixelBound for i8 {
fn min_pixel() -> Self {
Self::min_value()
}
fn max_pixel() -> Self {
Self::max_value()
}
}
impl PixelBound for i16 {
fn min_pixel() -> Self {
Self::min_value()
}
fn max_pixel() -> Self {
Self::max_value()
}
}
impl PixelBound for i32 {
fn min_pixel() -> Self {
Self::min_value()
}
fn max_pixel() -> Self {
Self::max_value()
}
}
impl PixelBound for i64 {
fn min_pixel() -> Self {
Self::min_value()
}
fn max_pixel() -> Self {
Self::max_value()
}
}
impl PixelBound for i128 {
fn min_pixel() -> Self {
Self::min_value()
}
fn max_pixel() -> Self {
Self::max_value()
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn integral_correct() {
assert!(!f64::is_integral());
assert!(!f32::is_integral());
assert!(u128::is_integral());
assert!(u64::is_integral());
assert!(u32::is_integral());
assert!(u16::is_integral());
assert!(u8::is_integral());
assert!(i128::is_integral());
assert!(i64::is_integral());
assert!(i32::is_integral());
assert!(i16::is_integral());
assert!(i8::is_integral());
}
#[test]
fn max_more_than_min() {
assert!(f64::max_pixel() > f64::min_pixel());
assert!(f32::max_pixel() > f32::min_pixel());
assert!(u8::max_pixel() > u8::min_pixel());
assert!(u16::max_pixel() > u16::min_pixel());
assert!(u32::max_pixel() > u32::min_pixel());
assert!(u64::max_pixel() > u64::min_pixel());
assert!(u128::max_pixel() > u128::min_pixel());
assert!(i8::max_pixel() > i8::min_pixel());
assert!(i16::max_pixel() > i16::min_pixel());
assert!(i32::max_pixel() > i32::min_pixel());
assert!(i64::max_pixel() > i64::min_pixel());
assert!(i128::max_pixel() > i128::min_pixel());
}
}