diff --git a/src/common/min_max.rs b/src/common/min_max.rs index 9ff3b79f2ec51e7627bd9efccd178a63ba2b7d2e..0de66c540fbd4c56991395583498b3b5db82f00c 100644 --- a/src/common/min_max.rs +++ b/src/common/min_max.rs @@ -466,8 +466,7 @@ impl MinMax { } pub fn rank_0(&self, index: u64) -> Result<u64, NodeError> { - let result = (index - self.rank_1(index).unwrap()) as i64; - if result < 0 { + if index >= self.bits.len() { return Err(NodeError::NotANodeError); } Ok(index - self.rank_1(index).unwrap() + 1) @@ -731,6 +730,7 @@ mod tests { let min_max = MinMax::new(bits, 4); assert_eq!(min_max.rank_1(11).unwrap(), 7); assert_eq!(min_max.rank_1(21).unwrap(), 11); + assert_eq!(min_max.rank_1(22).unwrap_err(), NodeError::NotANodeError); } #[test] @@ -743,6 +743,7 @@ mod tests { assert_eq!(min_max.rank_0(12).unwrap(), 6); assert_eq!(min_max.rank_0(17).unwrap(), 7); assert_eq!(min_max.rank_0(21).unwrap(), 11); + assert_eq!(min_max.rank_0(22).unwrap_err(), NodeError::NotANodeError); } #[test]