internal: switch some tests to minicore

This commit is contained in:
Aleksey Kladov 2021-06-15 21:34:26 +03:00
parent 0475201538
commit 7ebac5e54c
3 changed files with 75 additions and 62 deletions

View file

@ -426,15 +426,15 @@ fn coerce_autoderef() {
#[test]
fn coerce_autoderef_generic() {
check_infer_with_mismatches(
r"
struct Foo;
fn takes_ref<T>(x: &T) -> T { *x }
fn test() {
takes_ref(&Foo);
takes_ref(&&Foo);
takes_ref(&&&Foo);
}
",
r#"
struct Foo;
fn takes_ref<T>(x: &T) -> T { *x }
fn test() {
takes_ref(&Foo);
takes_ref(&&Foo);
takes_ref(&&&Foo);
}
"#,
expect![[r"
28..29 'x': &T
40..46 '{ *x }': T
@ -464,30 +464,29 @@ fn coerce_autoderef_generic() {
fn coerce_autoderef_block() {
check_infer_with_mismatches(
r#"
struct String {}
#[lang = "deref"]
trait Deref { type Target; }
impl Deref for String { type Target = str; }
fn takes_ref_str(x: &str) {}
fn returns_string() -> String { loop {} }
fn test() {
takes_ref_str(&{ returns_string() });
}
"#,
expect![[r"
126..127 'x': &str
135..137 '{}': ()
168..179 '{ loop {} }': String
170..177 'loop {}': !
175..177 '{}': ()
190..235 '{ ... }); }': ()
196..209 'takes_ref_str': fn takes_ref_str(&str)
196..232 'takes_...g() })': ()
210..231 '&{ ret...ng() }': &String
211..231 '{ retu...ng() }': String
213..227 'returns_string': fn returns_string() -> String
213..229 'return...ring()': String
"]],
//- minicore: deref
struct String {}
impl core::ops::Deref for String { type Target = str; }
fn takes_ref_str(x: &str) {}
fn returns_string() -> String { loop {} }
fn test() {
takes_ref_str(&{ returns_string() });
}
"#,
expect![[r#"
90..91 'x': &str
99..101 '{}': ()
132..143 '{ loop {} }': String
134..141 'loop {}': !
139..141 '{}': ()
154..199 '{ ... }); }': ()
160..173 'takes_ref_str': fn takes_ref_str(&str)
160..196 'takes_...g() })': ()
174..195 '&{ ret...ng() }': &String
175..195 '{ retu...ng() }': String
177..191 'returns_string': fn returns_string() -> String
177..193 'return...ring()': String
"#]],
);
}

View file

@ -780,10 +780,7 @@ fn test() { (&S).foo(); }
fn method_resolution_unsize_array() {
check_types(
r#"
#[lang = "slice"]
impl<T> [T] {
fn len(&self) -> usize { loop {} }
}
//- minicore: slice
fn test() {
let a = [1, 2, 3];
a.len();
@ -1178,11 +1175,7 @@ fn main() {
fn autoderef_visibility_field() {
check_infer(
r#"
#[lang = "deref"]
pub trait Deref {
type Target;
fn deref(&self) -> &Self::Target;
}
//- minicore: deref
mod a {
pub struct Foo(pub char);
pub struct Bar(i32);
@ -1191,7 +1184,7 @@ mod a {
Self(0)
}
}
impl super::Deref for Bar {
impl core::ops::Deref for Bar {
type Target = Foo;
fn deref(&self) -> &Foo {
&Foo('z')
@ -1205,22 +1198,21 @@ mod b {
}
"#,
expect![[r#"
67..71 'self': &Self
200..231 '{ ... }': Bar
214..218 'Self': Bar(i32) -> Bar
214..221 'Self(0)': Bar
219..220 '0': i32
315..319 'self': &Bar
329..362 '{ ... }': &Foo
343..352 '&Foo('z')': &Foo
344..347 'Foo': Foo(char) -> Foo
344..352 'Foo('z')': Foo
348..351 ''z'': char
392..439 '{ ... }': ()
406..407 'x': char
410..428 'super:...r::new': fn new() -> Bar
410..430 'super:...:new()': Bar
410..432 'super:...ew().0': char
107..138 '{ ... }': Bar
121..125 'Self': Bar(i32) -> Bar
121..128 'Self(0)': Bar
126..127 '0': i32
226..230 'self': &Bar
240..273 '{ ... }': &Foo
254..263 '&Foo('z')': &Foo
255..258 'Foo': Foo(char) -> Foo
255..263 'Foo('z')': Foo
259..262 ''z'': char
303..350 '{ ... }': ()
317..318 'x': char
321..339 'super:...r::new': fn new() -> Bar
321..341 'super:...:new()': Bar
321..343 'super:...ew().0': char
"#]],
)
}

View file

@ -9,7 +9,9 @@
//!
//! Available flags:
//! sized:
//! slice:
//! unsize: sized
//! deref: sized
//! coerce_unsized: unsize
pub mod marker {
@ -27,8 +29,8 @@ pub mod marker {
}
pub mod ops {
// region:coerce_unsized
mod unsize {
// region:coerce_unsized
use crate::marker::Unsize;
#[lang = "coerce_unsized"]
@ -45,12 +47,32 @@ pub mod ops {
impl<T: ?Sized + Unsize<U>, U: ?Sized> CoerceUnsized<*mut U> for *mut T {}
impl<T: ?Sized + Unsize<U>, U: ?Sized> CoerceUnsized<*const U> for *mut T {}
impl<T: ?Sized + Unsize<U>, U: ?Sized> CoerceUnsized<*const U> for *const T {}
// endregion:coerce_unsized
}
pub use self::unsize::CoerceUnsized;
// endregion:coerce_unsized
pub use self::unsize::CoerceUnsized; // :coerce_unsized
// region:deref
mod deref {
#[lang = "deref"]
pub trait Deref {
#[lang = "deref_target"]
type Target: ?Sized;
fn deref(&self) -> &Self::Target;
}
}
pub use self::deref::Deref;
// endregion:deref
}
// region:slice
pub mod slice {
#[lang = "slice"]
impl<T> [T] {
pub fn len(&self) -> usize { loop {} }
}
}
// endregion:slice
pub mod prelude {
pub mod v1 {
pub use crate::marker::Sized; // :sized