omics_coordinate/position/base/
addition.rs

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