Add some tests
This commit is contained in:
parent
bade91db08
commit
415cdc5210
@ -418,6 +418,69 @@ fn test() {
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn infer_struct_generics() {
|
||||
check_inference(
|
||||
r#"
|
||||
struct A<T> {
|
||||
x: T,
|
||||
}
|
||||
|
||||
fn test(a1: A<u32>, i: i32) {
|
||||
a1.x;
|
||||
let a2 = A { x: i };
|
||||
a2.x;
|
||||
let a3 = A::<i128> { x: 1 };
|
||||
a3.x;
|
||||
}
|
||||
"#,
|
||||
"struct_generics.txt",
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn infer_function_generics() {
|
||||
check_inference(
|
||||
r#"
|
||||
fn id<T>(t: T) -> T { t }
|
||||
|
||||
fn test() {
|
||||
id(1u32);
|
||||
id::<i128>(1);
|
||||
let x: u64 = id(1);
|
||||
}
|
||||
"#,
|
||||
"function_generics.txt",
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn infer_generic_chain() {
|
||||
check_inference(
|
||||
r#"
|
||||
struct A<T> {
|
||||
x: T,
|
||||
}
|
||||
impl<T2> A<T2> {
|
||||
fn x(self) -> T2 {
|
||||
self.x
|
||||
}
|
||||
}
|
||||
fn id<T>(t: T) -> T { t }
|
||||
|
||||
fn test() -> i128 {
|
||||
let x = 1;
|
||||
let y = id(x);
|
||||
let a = A { x: id(y) };
|
||||
let z = id(a.x);
|
||||
let b = A { x: z };
|
||||
b.x()
|
||||
}
|
||||
"#,
|
||||
"generic_chain.txt",
|
||||
);
|
||||
}
|
||||
|
||||
fn infer(content: &str) -> String {
|
||||
let (db, _, file_id) = MockDatabase::with_single_file(content);
|
||||
let source_file = db.source_file(file_id);
|
||||
|
14
crates/ra_hir/src/ty/tests/data/function_generics.txt
Normal file
14
crates/ra_hir/src/ty/tests/data/function_generics.txt
Normal file
@ -0,0 +1,14 @@
|
||||
[10; 11) 't': [unknown]
|
||||
[21; 26) '{ t }': [unknown]
|
||||
[23; 24) 't': [unknown]
|
||||
[38; 98) '{ ...(1); }': ()
|
||||
[44; 46) 'id': fn([unknown]) -> [unknown]
|
||||
[44; 52) 'id(1u32)': [unknown]
|
||||
[47; 51) '1u32': [unknown]
|
||||
[58; 68) 'id::<i128>': fn([unknown]) -> [unknown]
|
||||
[58; 71) 'id::<i128>(1)': [unknown]
|
||||
[69; 70) '1': [unknown]
|
||||
[81; 82) 'x': u64
|
||||
[90; 92) 'id': fn([unknown]) -> u64
|
||||
[90; 95) 'id(1)': u64
|
||||
[93; 94) '1': [unknown]
|
29
crates/ra_hir/src/ty/tests/data/generic_chain.txt
Normal file
29
crates/ra_hir/src/ty/tests/data/generic_chain.txt
Normal file
@ -0,0 +1,29 @@
|
||||
[53; 57) 'self': A
|
||||
[65; 87) '{ ... }': [unknown]
|
||||
[75; 79) 'self': A
|
||||
[75; 81) 'self.x': [unknown]
|
||||
[99; 100) 't': [unknown]
|
||||
[110; 115) '{ t }': [unknown]
|
||||
[112; 113) 't': [unknown]
|
||||
[135; 261) '{ ....x() }': i128
|
||||
[146; 147) 'x': [unknown]
|
||||
[150; 151) '1': [unknown]
|
||||
[162; 163) 'y': [unknown]
|
||||
[166; 168) 'id': fn([unknown]) -> [unknown]
|
||||
[166; 171) 'id(x)': [unknown]
|
||||
[169; 170) 'x': [unknown]
|
||||
[182; 183) 'a': A
|
||||
[186; 200) 'A { x: id(y) }': A
|
||||
[193; 195) 'id': fn([unknown]) -> [unknown]
|
||||
[193; 198) 'id(y)': [unknown]
|
||||
[196; 197) 'y': [unknown]
|
||||
[211; 212) 'z': [unknown]
|
||||
[215; 217) 'id': fn([unknown]) -> [unknown]
|
||||
[215; 222) 'id(a.x)': [unknown]
|
||||
[218; 219) 'a': A
|
||||
[218; 221) 'a.x': [unknown]
|
||||
[233; 234) 'b': A
|
||||
[237; 247) 'A { x: z }': A
|
||||
[244; 245) 'z': [unknown]
|
||||
[254; 255) 'b': A
|
||||
[254; 259) 'b.x()': i128
|
15
crates/ra_hir/src/ty/tests/data/struct_generics.txt
Normal file
15
crates/ra_hir/src/ty/tests/data/struct_generics.txt
Normal file
@ -0,0 +1,15 @@
|
||||
[36; 38) 'a1': A
|
||||
[48; 49) 'i': i32
|
||||
[56; 147) '{ ...3.x; }': ()
|
||||
[62; 64) 'a1': A
|
||||
[62; 66) 'a1.x': [unknown]
|
||||
[76; 78) 'a2': A
|
||||
[81; 91) 'A { x: i }': A
|
||||
[88; 89) 'i': i32
|
||||
[97; 99) 'a2': A
|
||||
[97; 101) 'a2.x': [unknown]
|
||||
[111; 113) 'a3': A
|
||||
[116; 134) 'A::<i1...x: 1 }': A
|
||||
[131; 132) '1': [unknown]
|
||||
[140; 142) 'a3': A
|
||||
[140; 144) 'a3.x': [unknown]
|
Loading…
Reference in New Issue
Block a user