From 999e63ca55fb80990192929959798a5648027c9d Mon Sep 17 00:00:00 2001 From: itsybitesyspider Date: Tue, 4 Apr 2023 23:53:00 -0400 Subject: [PATCH 1/2] Fix panic with IdxRange size() method. --- src/idxsets/idxrange.rs | 36 ++++++++++++++++++++++++++++++++++-- src/types/entry.rs | 5 +---- 2 files changed, 35 insertions(+), 6 deletions(-) diff --git a/src/idxsets/idxrange.rs b/src/idxsets/idxrange.rs index ea19299..de0d628 100644 --- a/src/idxsets/idxrange.rs +++ b/src/idxsets/idxrange.rs @@ -28,11 +28,43 @@ impl IdxSet for IdxRange { } fn size(&self) -> usize { - ((self.0.end - 1) / crate::bits::bitfield::BITS + 1) - - self.0.start / crate::bits::bitfield::BITS + if self.0.end <= self.0.start { + 0 + } else { + let bitfield_end = (self.0.end - 1) / crate::bits::bitfield::BITS + 1; + let bitfield_start = self.0.start / crate::bits::bitfield::BITS; + bitfield_end - bitfield_start + } } fn intersect(&self, idx: &Bitfield) -> Bitfield { (*idx).clip(&self.0) } } + + +#[cfg(test)] +mod test { + use super::*; + + #[test] + fn test_size_of_zero_length_idxrange() { + let zero_range = IdxRange(0..0); + + assert_eq!(zero_range.size(), 0); + } + + #[test] + fn test_size_of_single_length_idxrange() { + let zero_range = IdxRange(0..1); + + assert_eq!(zero_range.size(), 1); + } + + #[test] + fn test_size_of_short_idxrange() { + let zero_range = IdxRange(0..7); + + assert_eq!(zero_range.size(), 1); + } +} \ No newline at end of file diff --git a/src/types/entry.rs b/src/types/entry.rs index 10e09e3..d74783f 100644 --- a/src/types/entry.rs +++ b/src/types/entry.rs @@ -96,10 +96,7 @@ where R: Debug, { self.get().or_else(|| { - panic!(format!( - "retriever: Entry::or_panic(): {:?} doesn't exist", - &self.id - )) + panic!("retriever: Entry::or_panic(): {:?} doesn't exist",&self.id) }); self From 1d37a6e61cf2489d9a6478899fb0b4b711745f69 Mon Sep 17 00:00:00 2001 From: itsybitesyspider Date: Tue, 4 Apr 2023 23:58:10 -0400 Subject: [PATCH 2/2] fmt --- src/idxsets/idxrange.rs | 3 +-- src/types/entry.rs | 5 ++--- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/src/idxsets/idxrange.rs b/src/idxsets/idxrange.rs index de0d628..9d22360 100644 --- a/src/idxsets/idxrange.rs +++ b/src/idxsets/idxrange.rs @@ -42,7 +42,6 @@ impl IdxSet for IdxRange { } } - #[cfg(test)] mod test { use super::*; @@ -67,4 +66,4 @@ mod test { assert_eq!(zero_range.size(), 1); } -} \ No newline at end of file +} diff --git a/src/types/entry.rs b/src/types/entry.rs index d74783f..aee8fa5 100644 --- a/src/types/entry.rs +++ b/src/types/entry.rs @@ -95,9 +95,8 @@ where where R: Debug, { - self.get().or_else(|| { - panic!("retriever: Entry::or_panic(): {:?} doesn't exist",&self.id) - }); + self.get() + .or_else(|| panic!("retriever: Entry::or_panic(): {:?} doesn't exist", &self.id)); self }