Skip to content

Commit

Permalink
Check for exhaustion in RangeInclusive::contains
Browse files Browse the repository at this point in the history
When a range has finished iteration, `is_empty` returns true, so it
should also be the case that `contains` returns false.
  • Loading branch information
cuviper committed Oct 19, 2020
1 parent cb2462c commit b62b352
Showing 1 changed file with 11 additions and 1 deletion.
12 changes: 11 additions & 1 deletion library/core/src/ops/range.rs
Expand Up @@ -479,13 +479,23 @@ impl<Idx: PartialOrd<Idx>> RangeInclusive<Idx> {
/// assert!(!(0.0..=f32::NAN).contains(&0.0));
/// assert!(!(f32::NAN..=1.0).contains(&1.0));
/// ```
///
/// This method always returns `false` after iteration has finished:
///
/// ```
/// let mut r = 3..=5;
/// assert!(r.contains(&3) && r.contains(&5));
/// for _ in r.by_ref() {}
/// // Precise field values are unspecified here
/// assert!(!r.contains(&3) && !r.contains(&5));
/// ```
#[stable(feature = "range_contains", since = "1.35.0")]
pub fn contains<U>(&self, item: &U) -> bool
where
Idx: PartialOrd<U>,
U: ?Sized + PartialOrd<Idx>,
{
<Self as RangeBounds<Idx>>::contains(self, item)
!self.exhausted && <Self as RangeBounds<Idx>>::contains(self, item)
}

/// Returns `true` if the range contains no items.
Expand Down

0 comments on commit b62b352

Please sign in to comment.