Rollup merge of #61376 - czipperz:bound-cloned, r=sfackler
Add Bound::cloned() Suggested by #61356
This commit is contained in:
commit
654854fdb5
@ -70,6 +70,7 @@
|
||||
#![feature(arbitrary_self_types)]
|
||||
#![feature(asm)]
|
||||
#![feature(associated_type_defaults)]
|
||||
#![feature(bound_cloned)]
|
||||
#![feature(cfg_target_has_atomic)]
|
||||
#![feature(concat_idents)]
|
||||
#![feature(const_fn)]
|
||||
|
@ -696,6 +696,29 @@ pub enum Bound<T> {
|
||||
Unbounded,
|
||||
}
|
||||
|
||||
impl<T: Clone> Bound<&T> {
|
||||
/// Map a `Bound<&T>` to a `Bound<T>` by cloning the contents of the bound.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// ```
|
||||
/// #![feature(bound_cloned)]
|
||||
/// use std::ops::Bound::*;
|
||||
/// use std::ops::RangeBounds;
|
||||
///
|
||||
/// assert_eq!((1..12).start_bound(), Included(&1));
|
||||
/// assert_eq!((1..12).start_bound().cloned(), Included(1));
|
||||
/// ```
|
||||
#[unstable(feature = "bound_cloned", issue = "61356")]
|
||||
pub fn cloned(self) -> Bound<T> {
|
||||
match self {
|
||||
Bound::Unbounded => Bound::Unbounded,
|
||||
Bound::Included(x) => Bound::Included(x.clone()),
|
||||
Bound::Excluded(x) => Bound::Excluded(x.clone()),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[stable(feature = "collections_range", since = "1.28.0")]
|
||||
/// `RangeBounds` is implemented by Rust's built-in range types, produced
|
||||
/// by range syntax like `..`, `a..`, `..b`, `..=c`, `d..e`, or `f..=g`.
|
||||
|
@ -1,3 +1,4 @@
|
||||
#![feature(bound_cloned)]
|
||||
#![feature(box_syntax)]
|
||||
#![feature(cell_update)]
|
||||
#![feature(core_private_bignum)]
|
||||
|
@ -1,4 +1,4 @@
|
||||
use core::ops::{Range, RangeFull, RangeFrom, RangeTo, RangeInclusive};
|
||||
use core::ops::{Bound, Range, RangeFull, RangeFrom, RangeTo, RangeInclusive};
|
||||
|
||||
// Test the Range structs without the syntactic sugar.
|
||||
|
||||
@ -82,3 +82,18 @@ fn test_range_is_empty() {
|
||||
assert!( (NAN ..= EPSILON).is_empty());
|
||||
assert!( (NAN ..= NAN).is_empty());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_bound_cloned_unbounded() {
|
||||
assert_eq!(Bound::<&u32>::Unbounded.cloned(), Bound::Unbounded);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_bound_cloned_included() {
|
||||
assert_eq!(Bound::Included(&3).cloned(), Bound::Included(3));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_bound_cloned_excluded() {
|
||||
assert_eq!(Bound::Excluded(&3).cloned(), Bound::Excluded(3));
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user