summaryrefslogtreecommitdiffstats
path: root/library/alloc/tests/borrow.rs
diff options
context:
space:
mode:
Diffstat (limited to 'library/alloc/tests/borrow.rs')
-rw-r--r--library/alloc/tests/borrow.rs60
1 files changed, 60 insertions, 0 deletions
diff --git a/library/alloc/tests/borrow.rs b/library/alloc/tests/borrow.rs
new file mode 100644
index 000000000..57976aa6c
--- /dev/null
+++ b/library/alloc/tests/borrow.rs
@@ -0,0 +1,60 @@
+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);
+}