aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_hir/src/ty/tests.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ra_hir/src/ty/tests.rs')
-rw-r--r--crates/ra_hir/src/ty/tests.rs202
1 files changed, 5 insertions, 197 deletions
diff --git a/crates/ra_hir/src/ty/tests.rs b/crates/ra_hir/src/ty/tests.rs
index 081bfe37c..cd5a05092 100644
--- a/crates/ra_hir/src/ty/tests.rs
+++ b/crates/ra_hir/src/ty/tests.rs
@@ -21,6 +21,7 @@ use crate::{
21// update the snapshots. 21// update the snapshots.
22 22
23mod never_type; 23mod never_type;
24mod coercion;
24 25
25#[test] 26#[test]
26fn infer_await() { 27fn infer_await() {
@@ -926,196 +927,6 @@ fn test(a: A<i32>) {
926} 927}
927 928
928#[test] 929#[test]
929fn infer_if_coerce() {
930 assert_snapshot!(
931 infer(r#"
932fn foo<T>(x: &[T]) -> &[T] { loop {} }
933fn test() {
934 let x = if true {
935 foo(&[1])
936 } else {
937 &[1]
938 };
939}
940"#),
941 @r###"
942 [11; 12) 'x': &[T]
943 [28; 39) '{ loop {} }': !
944 [30; 37) 'loop {}': !
945 [35; 37) '{}': ()
946 [50; 126) '{ ... }; }': ()
947 [60; 61) 'x': &[i32]
948 [64; 123) 'if tru... }': &[i32]
949 [67; 71) 'true': bool
950 [72; 97) '{ ... }': &[i32]
951 [82; 85) 'foo': fn foo<i32>(&[T]) -> &[T]
952 [82; 91) 'foo(&[1])': &[i32]
953 [86; 90) '&[1]': &[i32;_]
954 [87; 90) '[1]': [i32;_]
955 [88; 89) '1': i32
956 [103; 123) '{ ... }': &[i32;_]
957 [113; 117) '&[1]': &[i32;_]
958 [114; 117) '[1]': [i32;_]
959 [115; 116) '1': i32
960"###
961 );
962}
963
964#[test]
965fn infer_if_else_coerce() {
966 assert_snapshot!(
967 infer(r#"
968fn foo<T>(x: &[T]) -> &[T] { loop {} }
969fn test() {
970 let x = if true {
971 &[1]
972 } else {
973 foo(&[1])
974 };
975}
976"#),
977 @r###"
978 [11; 12) 'x': &[T]
979 [28; 39) '{ loop {} }': !
980 [30; 37) 'loop {}': !
981 [35; 37) '{}': ()
982 [50; 126) '{ ... }; }': ()
983 [60; 61) 'x': &[i32]
984 [64; 123) 'if tru... }': &[i32]
985 [67; 71) 'true': bool
986 [72; 92) '{ ... }': &[i32;_]
987 [82; 86) '&[1]': &[i32;_]
988 [83; 86) '[1]': [i32;_]
989 [84; 85) '1': i32
990 [98; 123) '{ ... }': &[i32]
991 [108; 111) 'foo': fn foo<i32>(&[T]) -> &[T]
992 [108; 117) 'foo(&[1])': &[i32]
993 [112; 116) '&[1]': &[i32;_]
994 [113; 116) '[1]': [i32;_]
995 [114; 115) '1': i32
996"###
997 );
998}
999
1000#[test]
1001fn infer_match_first_coerce() {
1002 assert_snapshot!(
1003 infer(r#"
1004fn foo<T>(x: &[T]) -> &[T] { loop {} }
1005fn test(i: i32) {
1006 let x = match i {
1007 2 => foo(&[2]),
1008 1 => &[1],
1009 _ => &[3],
1010 };
1011}
1012"#),
1013 @r###"
1014 [11; 12) 'x': &[T]
1015 [28; 39) '{ loop {} }': !
1016 [30; 37) 'loop {}': !
1017 [35; 37) '{}': ()
1018 [48; 49) 'i': i32
1019 [56; 150) '{ ... }; }': ()
1020 [66; 67) 'x': &[i32]
1021 [70; 147) 'match ... }': &[i32]
1022 [76; 77) 'i': i32
1023 [88; 89) '2': i32
1024 [93; 96) 'foo': fn foo<i32>(&[T]) -> &[T]
1025 [93; 102) 'foo(&[2])': &[i32]
1026 [97; 101) '&[2]': &[i32;_]
1027 [98; 101) '[2]': [i32;_]
1028 [99; 100) '2': i32
1029 [112; 113) '1': i32
1030 [117; 121) '&[1]': &[i32;_]
1031 [118; 121) '[1]': [i32;_]
1032 [119; 120) '1': i32
1033 [131; 132) '_': i32
1034 [136; 140) '&[3]': &[i32;_]
1035 [137; 140) '[3]': [i32;_]
1036 [138; 139) '3': i32
1037 "###
1038 );
1039}
1040
1041#[test]
1042fn infer_match_second_coerce() {
1043 assert_snapshot!(
1044 infer(r#"
1045fn foo<T>(x: &[T]) -> &[T] { loop {} }
1046fn test(i: i32) {
1047 let x = match i {
1048 1 => &[1],
1049 2 => foo(&[2]),
1050 _ => &[3],
1051 };
1052}
1053"#),
1054 @r###"
1055 [11; 12) 'x': &[T]
1056 [28; 39) '{ loop {} }': !
1057 [30; 37) 'loop {}': !
1058 [35; 37) '{}': ()
1059 [48; 49) 'i': i32
1060 [56; 150) '{ ... }; }': ()
1061 [66; 67) 'x': &[i32]
1062 [70; 147) 'match ... }': &[i32]
1063 [76; 77) 'i': i32
1064 [88; 89) '1': i32
1065 [93; 97) '&[1]': &[i32;_]
1066 [94; 97) '[1]': [i32;_]
1067 [95; 96) '1': i32
1068 [107; 108) '2': i32
1069 [112; 115) 'foo': fn foo<i32>(&[T]) -> &[T]
1070 [112; 121) 'foo(&[2])': &[i32]
1071 [116; 120) '&[2]': &[i32;_]
1072 [117; 120) '[2]': [i32;_]
1073 [118; 119) '2': i32
1074 [131; 132) '_': i32
1075 [136; 140) '&[3]': &[i32;_]
1076 [137; 140) '[3]': [i32;_]
1077 [138; 139) '3': i32
1078 "###
1079 );
1080}
1081
1082#[test]
1083fn coerce_merge_one_by_one1() {
1084 covers!(coerce_merge_fail_fallback);
1085
1086 assert_snapshot!(
1087 infer(r#"
1088fn test() {
1089 let t = &mut 1;
1090 let x = match 1 {
1091 1 => t as *mut i32,
1092 2 => t as &i32,
1093 _ => t as *const i32,
1094 };
1095}
1096"#),
1097 @r###"
1098 [11; 145) '{ ... }; }': ()
1099 [21; 22) 't': &mut i32
1100 [25; 31) '&mut 1': &mut i32
1101 [30; 31) '1': i32
1102 [41; 42) 'x': *const i32
1103 [45; 142) 'match ... }': *const i32
1104 [51; 52) '1': i32
1105 [63; 64) '1': i32
1106 [68; 69) 't': &mut i32
1107 [68; 81) 't as *mut i32': *mut i32
1108 [91; 92) '2': i32
1109 [96; 97) 't': &mut i32
1110 [96; 105) 't as &i32': &i32
1111 [115; 116) '_': i32
1112 [120; 121) 't': &mut i32
1113 [120; 135) 't as *const i32': *const i32
1114 "###
1115 );
1116}
1117
1118#[test]
1119fn bug_484() { 930fn bug_484() {
1120 assert_snapshot!( 931 assert_snapshot!(
1121 infer(r#" 932 infer(r#"
@@ -1302,7 +1113,6 @@ fn test(x: &str, y: isize) {
1302} 1113}
1303"#), 1114"#),
1304 @r###" 1115 @r###"
1305
1306 [9; 10) 'x': &str 1116 [9; 10) 'x': &str
1307 [18; 19) 'y': isize 1117 [18; 19) 'y': isize
1308 [28; 324) '{ ... 3]; }': () 1118 [28; 324) '{ ... 3]; }': ()
@@ -1355,7 +1165,7 @@ fn test(x: &str, y: isize) {
1355 [260; 263) '"b"': &str 1165 [260; 263) '"b"': &str
1356 [275; 276) 'x': [u8;_] 1166 [275; 276) 'x': [u8;_]
1357 [288; 290) '[]': [u8;_] 1167 [288; 290) '[]': [u8;_]
1358 [300; 301) 'z': &[u8;_] 1168 [300; 301) 'z': &[u8]
1359 [311; 321) '&[1, 2, 3]': &[u8;_] 1169 [311; 321) '&[1, 2, 3]': &[u8;_]
1360 [312; 321) '[1, 2, 3]': [u8;_] 1170 [312; 321) '[1, 2, 3]': [u8;_]
1361 [313; 314) '1': u8 1171 [313; 314) '1': u8
@@ -2288,10 +2098,9 @@ fn test() {
2288} 2098}
2289"#), 2099"#),
2290 @r###" 2100 @r###"
2291
2292 [11; 48) '{ ...&y]; }': () 2101 [11; 48) '{ ...&y]; }': ()
2293 [21; 22) 'y': &{unknown} 2102 [21; 22) 'y': &{unknown}
2294 [25; 32) 'unknown': &{unknown} 2103 [25; 32) 'unknown': &&{unknown}
2295 [38; 45) '[y, &y]': [&&{unknown};_] 2104 [38; 45) '[y, &y]': [&&{unknown};_]
2296 [39; 40) 'y': &{unknown} 2105 [39; 40) 'y': &{unknown}
2297 [42; 44) '&y': &&{unknown} 2106 [42; 44) '&y': &&{unknown}
@@ -2313,12 +2122,11 @@ fn test() {
2313} 2122}
2314"#), 2123"#),
2315 @r###" 2124 @r###"
2316
2317 [11; 80) '{ ...x)]; }': () 2125 [11; 80) '{ ...x)]; }': ()
2318 [21; 22) 'x': &&{unknown} 2126 [21; 22) 'x': &&{unknown}
2319 [25; 32) 'unknown': &&{unknown} 2127 [25; 32) 'unknown': &&&{unknown}
2320 [42; 43) 'y': &&{unknown} 2128 [42; 43) 'y': &&{unknown}
2321 [46; 53) 'unknown': &&{unknown} 2129 [46; 53) 'unknown': &&&{unknown}
2322 [59; 77) '[(x, y..., &x)]': [(&&{unknown}, &&{unknown});_] 2130 [59; 77) '[(x, y..., &x)]': [(&&{unknown}, &&{unknown});_]
2323 [60; 66) '(x, y)': (&&{unknown}, &&{unknown}) 2131 [60; 66) '(x, y)': (&&{unknown}, &&{unknown})
2324 [61; 62) 'x': &&{unknown} 2132 [61; 62) 'x': &&{unknown}