omics_coordinate/position/interbase/
subtraction.rs1use 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}