klavier-core 0.1.15

Core library of klavier.
Documentation
#[derive(Debug, Clone)]
pub struct Clipper<T> where T: PartialOrd + Copy {
    pub min: T,
    pub max: T,
}

pub const fn for_i32(min: i32, max: i32) -> Clipper<i32> {
    Clipper::<i32> { min, max, }
}

pub const fn for_i16(min: i16, max: i16) -> Clipper<i16> {
    Clipper::<i16> { min, max, }
}

pub const fn for_f32(min: f32, max: f32) -> Clipper<f32> {
    Clipper::<f32> { min, max, }
}

impl <T: PartialOrd + Copy> Clipper<T> {
    pub fn clip(&self, value: T) -> T {
        if value < self.min {
            self.min
        } else if self.max < value {
            self.max
        } else {
            value
        }
    }
}

#[cfg(test)]
mod tests {
    use crate::clipper;

    #[test]
    fn can_i32_clipped() {
        let clipper = clipper::for_i32(5, 10);
        assert_eq!(clipper.clip(4), 5);
        assert_eq!(clipper.clip(5), 5);
        assert_eq!(clipper.clip(6), 6);
        assert_eq!(clipper.clip(9), 9);
        assert_eq!(clipper.clip(10), 10);
        assert_eq!(clipper.clip(11), 10);
    }

    #[test]
    fn can_f32_clipped() {
        let clipper = clipper::for_f32(5f32, 10f32);
        assert_eq!(clipper.clip(4f32), 5f32);
        assert_eq!(clipper.clip(5f32), 5f32);
        assert_eq!(clipper.clip(6f32), 6f32);
        assert_eq!(clipper.clip(9f32), 9f32);
        assert_eq!(clipper.clip(10f32), 10f32);
        assert_eq!(clipper.clip(11f32), 10f32);
    }
}