omics_coordinate/position/interbase/
subtraction.rs

1//! Subtraction for interbase positions.
2
3use crate::math::CheckedSub;
4use crate::position::Number;
5use crate::position::interbase::Position;
6
7impl CheckedSub<Number> for Position {
8    type Output = Self;
9
10    fn checked_sub(&self, rhs: Number) -> Option<Self::Output> {
11        self.get().checked_sub(rhs).map(Position::new)
12    }
13}
14
15#[cfg(test)]
16mod tests {
17    use super::*;
18
19    #[test]
20    fn addition() {
21        let ten = Position::new(10);
22
23        let nine = ten.checked_sub(1).unwrap();
24        assert_eq!(nine.get(), 9);
25
26        let zero = nine.checked_sub(9).unwrap();
27        assert_eq!(zero.get(), 0);
28    }
29
30    #[test]
31    fn overflow() {
32        let max = Position::new(Number::MAX);
33
34        let zero = max.checked_sub(Number::MAX).unwrap();
35        assert_eq!(zero.get(), 0);
36
37        assert!(zero.checked_sub(1).is_none());
38    }
39}