Skip to content

Commit

Permalink
Add success and fail tests for into_boxed_slice
Browse files Browse the repository at this point in the history
  • Loading branch information
elichai committed Apr 26, 2020
1 parent 6f31f05 commit 0228ca0
Show file tree
Hide file tree
Showing 3 changed files with 69 additions and 0 deletions.
15 changes: 15 additions & 0 deletions src/test/ui/box-into-boxed-slice-fail.rs
@@ -0,0 +1,15 @@
// ignore-tidy-linelength
#![feature(box_into_boxed_slice)]

use std::boxed::Box;
use std::fmt::Debug;
fn main() {
let boxed_slice = Box::new([1,2,3]) as Box<[u8]>;
let _ = Box::into_boxed_slice(boxed_slice);
//~^ ERROR the size for values of type `[u8]` cannot be known at compilation time
//~^^ ERROR the size for values of type `[u8]` cannot be known at compilation time
let boxed_trait: Box<dyn Debug> = Box::new(5u8);
let _ = Box::into_boxed_slice(boxed_trait);
//~^ ERROR the size for values of type `dyn std::fmt::Debug` cannot be known at compilation time
//~^^ ERROR the size for values of type `dyn std::fmt::Debug` cannot be known at compilation time
}
43 changes: 43 additions & 0 deletions src/test/ui/box-into-boxed-slice-fail.stderr
@@ -0,0 +1,43 @@
error[E0277]: the size for values of type `[u8]` cannot be known at compilation time
--> $DIR/box-into-boxed-slice-fail.rs:8:35
|
LL | let _ = Box::into_boxed_slice(boxed_slice);
| ^^^^^^^^^^^ doesn't have a size known at compile-time
|
= help: the trait `std::marker::Sized` is not implemented for `[u8]`
= note: to learn more, visit <https://doc.rust-lang.org/book/ch19-04-advanced-types.html#dynamically-sized-types-and-the-sized-trait>
= note: required by `std::boxed::Box::<T>::into_boxed_slice`

error[E0277]: the size for values of type `[u8]` cannot be known at compilation time
--> $DIR/box-into-boxed-slice-fail.rs:8:13
|
LL | let _ = Box::into_boxed_slice(boxed_slice);
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ doesn't have a size known at compile-time
|
= help: the trait `std::marker::Sized` is not implemented for `[u8]`
= note: to learn more, visit <https://doc.rust-lang.org/book/ch19-04-advanced-types.html#dynamically-sized-types-and-the-sized-trait>
= note: slice and array elements must have `Sized` type

error[E0277]: the size for values of type `dyn std::fmt::Debug` cannot be known at compilation time
--> $DIR/box-into-boxed-slice-fail.rs:12:35
|
LL | let _ = Box::into_boxed_slice(boxed_trait);
| ^^^^^^^^^^^ doesn't have a size known at compile-time
|
= help: the trait `std::marker::Sized` is not implemented for `dyn std::fmt::Debug`
= note: to learn more, visit <https://doc.rust-lang.org/book/ch19-04-advanced-types.html#dynamically-sized-types-and-the-sized-trait>
= note: required by `std::boxed::Box::<T>::into_boxed_slice`

error[E0277]: the size for values of type `dyn std::fmt::Debug` cannot be known at compilation time
--> $DIR/box-into-boxed-slice-fail.rs:12:13
|
LL | let _ = Box::into_boxed_slice(boxed_trait);
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ doesn't have a size known at compile-time
|
= help: the trait `std::marker::Sized` is not implemented for `dyn std::fmt::Debug`
= note: to learn more, visit <https://doc.rust-lang.org/book/ch19-04-advanced-types.html#dynamically-sized-types-and-the-sized-trait>
= note: slice and array elements must have `Sized` type

error: aborting due to 4 previous errors

For more information about this error, try `rustc --explain E0277`.
11 changes: 11 additions & 0 deletions src/test/ui/box-into-boxed-slice.rs
@@ -0,0 +1,11 @@
// run-pass
#![feature(box_into_boxed_slice)]

use std::boxed::Box;
fn main() {
assert_eq!(Box::into_boxed_slice(Box::new(5u8)), Box::new([5u8]) as Box<[u8]>);
assert_eq!(Box::into_boxed_slice(Box::new([25u8])), Box::new([[25u8]]) as Box<[[u8; 1]]>);
let a: Box<[Box<[u8; 1]>]> = Box::into_boxed_slice(Box::new(Box::new([5u8])));
let b: Box<[Box<[u8; 1]>]> = Box::new([Box::new([5u8])]);
assert_eq!(a, b);
}

0 comments on commit 0228ca0

Please sign in to comment.