From d1b43f1c5503583b4b30caace31b3d239cd9d3d8 Mon Sep 17 00:00:00 2001
From: Daniel Rose <droseger@protonmail.com>
Date: Fri, 13 Jul 2018 11:04:18 +0200
Subject: [PATCH] [MinMax] rank1, rank0: improve error checking, update tests

---
 src/common/min_max.rs | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/src/common/min_max.rs b/src/common/min_max.rs
index 9ff3b79..0de66c5 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]
-- 
GitLab