mirror of
https://github.com/rust-lang/rust.git
synced 2024-12-01 03:03:40 +00:00
538e198193
Move: - `src\test\ui\consts\const-nonzero.rs` to `library\core` - `src\test\ui\consts\ascii.rs` to `library\core` - `src\test\ui\consts\cow-is-borrowed` to `library\alloc` Part of #76268
61 lines
1.3 KiB
Rust
61 lines
1.3 KiB
Rust
use std::borrow::{Cow, ToOwned};
|
|
use std::ffi::{CStr, OsStr};
|
|
use std::path::Path;
|
|
use std::rc::Rc;
|
|
use std::sync::Arc;
|
|
|
|
macro_rules! test_from_cow {
|
|
($value:ident => $($ty:ty),+) => {$(
|
|
let borrowed = <$ty>::from(Cow::Borrowed($value));
|
|
let owned = <$ty>::from(Cow::Owned($value.to_owned()));
|
|
assert_eq!($value, &*borrowed);
|
|
assert_eq!($value, &*owned);
|
|
)+};
|
|
($value:ident : & $ty:ty) => {
|
|
test_from_cow!($value => Box<$ty>, Rc<$ty>, Arc<$ty>);
|
|
}
|
|
}
|
|
|
|
#[test]
|
|
fn test_from_cow_slice() {
|
|
let slice: &[i32] = &[1, 2, 3];
|
|
test_from_cow!(slice: &[i32]);
|
|
}
|
|
|
|
#[test]
|
|
fn test_from_cow_str() {
|
|
let string = "hello";
|
|
test_from_cow!(string: &str);
|
|
}
|
|
|
|
#[test]
|
|
fn test_from_cow_c_str() {
|
|
let string = CStr::from_bytes_with_nul(b"hello\0").unwrap();
|
|
test_from_cow!(string: &CStr);
|
|
}
|
|
|
|
#[test]
|
|
fn test_from_cow_os_str() {
|
|
let string = OsStr::new("hello");
|
|
test_from_cow!(string: &OsStr);
|
|
}
|
|
|
|
#[test]
|
|
fn test_from_cow_path() {
|
|
let path = Path::new("hello");
|
|
test_from_cow!(path: &Path);
|
|
}
|
|
|
|
#[test]
|
|
fn cow_const() {
|
|
// test that the methods of `Cow` are usable in a const context
|
|
|
|
const COW: Cow<'_, str> = Cow::Borrowed("moo");
|
|
|
|
const IS_BORROWED: bool = COW.is_borrowed();
|
|
assert!(IS_BORROWED);
|
|
|
|
const IS_OWNED: bool = COW.is_owned();
|
|
assert!(!IS_OWNED);
|
|
}
|