}
}
+#[stable(feature = "box_from_slice", since = "1.17.0")]
+impl<'a, T: Copy> From<&'a [T]> for Box<[T]> {
+ fn from(slice: &'a [T]) -> Box<[T]> {
+ let mut boxed = unsafe { RawVec::with_capacity(slice.len()).into_box() };
+ boxed.copy_from_slice(slice);
+ boxed
+ }
+}
+
+#[stable(feature = "box_from_slice", since = "1.17.0")]
+impl<'a> From<&'a str> for Box<str> {
+ fn from(s: &'a str) -> Box<str> {
+ let boxed: Box<[u8]> = Box::from(s.as_bytes());
+ unsafe { mem::transmute(boxed) }
+ }
+}
+
impl Box<Any> {
#[inline]
#[stable(feature = "rust1", since = "1.0.0")]
use core::ops::Deref;
use core::result::Result::{Err, Ok};
use core::clone::Clone;
+use core::f64;
+use core::i64;
use std::boxed::Box;
assert_eq!(19, y.get());
}
}
+
+#[test]
+fn f64_slice() {
+ let slice: &[f64] = &[-1.0, 0.0, 1.0, f64::INFINITY];
+ let boxed: Box<[f64]> = Box::from(slice);
+ assert_eq!(&*boxed, slice)
+}
+
+#[test]
+fn i64_slice() {
+ let slice: &[i64] = &[i64::MIN, -2, -1, 0, 1, 2, i64::MAX];
+ let boxed: Box<[i64]> = Box::from(slice);
+ assert_eq!(&*boxed, slice)
+}
+
+#[test]
+fn str_slice() {
+ let s = "Hello, world!";
+ let boxed: Box<str> = Box::from(s);
+ assert_eq!(&*boxed, s)
+}