omics_coordinate/position/interbase/
addition.rs

1//! Addition for interbase positions.
2
3use crate::math::CheckedAdd;
4use crate::position::Number;
5use crate::position::interbase::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::new)
12    }
13}
14
15#[cfg(test)]
16mod tests {
17    use super::*;
18
19    #[test]
20    fn addition() {
21        let zero = Position::new(0);
22
23        let one = zero.checked_add(1).unwrap();
24        assert_eq!(one.get(), 1);
25
26        let two = one.checked_add(1).unwrap();
27        assert_eq!(two.get(), 2);
28    }
29
30    #[test]
31    fn overflow() {
32        let max = Position::new(Number::MAX);
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}