omics_coordinate/position/base/
addition.rs1use 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}