From f63cfd5fca6180b51d3b00896b119def32314b71 Mon Sep 17 00:00:00 2001 From: Kirill Bulatov Date: Mon, 12 Aug 2019 00:11:15 +0300 Subject: Tests --- crates/ra_hir/src/ty/tests.rs | 104 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 104 insertions(+) (limited to 'crates/ra_hir/src/ty/tests.rs') diff --git a/crates/ra_hir/src/ty/tests.rs b/crates/ra_hir/src/ty/tests.rs index c5818b738..0f53f156e 100644 --- a/crates/ra_hir/src/ty/tests.rs +++ b/crates/ra_hir/src/ty/tests.rs @@ -3594,3 +3594,107 @@ fn no_such_field_diagnostics() { "### ); } + +#[cfg(test)] +mod match_with_never_tests { + use super::type_at; + + #[test] + fn match_compex_arm_ty() { + let t = type_at( + r#" +//- /main.rs +enum Option { + Some(T), + None +} + +fn test(a: i32) { + let i = match a { + 2 => Option::Some(2.0), + _ => loop {}, + }; + i<|> + () +} +"#, + ); + assert_eq!(t, "Option"); + } + + #[test] + fn match_first_arm_never() { + let t = type_at( + r#" +//- /main.rs +fn test(a: i32) { + let i = match a { + 1 => return, + 2 => 2.0, + 3 => loop {}, + _ => 3.0, + }; + i<|> + () +} +"#, + ); + assert_eq!(t, "f64"); + } + + #[test] + fn match_second_arm_never() { + let t = type_at( + r#" +//- /main.rs +fn test(a: i32) { + let i = match a { + 1 => 3.0, + 2 => loop {}, + 3 => 3.0, + _ => return, + }; + i<|> + () +} +"#, + ); + assert_eq!(t, "f64"); + } + + #[test] + fn match_all_arms_never() { + let t = type_at( + r#" +//- /main.rs +fn test(a: i32) { + let i = match a { + 2 => return, + _ => loop {}, + }; + i<|> + () +} +"#, + ); + assert_eq!(t, "!"); + } + + #[test] + fn match_no_never_arms() { + let t = type_at( + r#" +//- /main.rs +fn test(a: i32) { + let i = match a { + 2 => 2.0, + _ => 3.0, + }; + i<|> + () +} +"#, + ); + assert_eq!(t, "f64"); + } +} -- cgit v1.2.3 From 0ce05633a170076a3624a79ed96a40c1730a8164 Mon Sep 17 00:00:00 2001 From: Kirill Bulatov Date: Mon, 12 Aug 2019 01:01:15 +0300 Subject: Fix match type inference for Never match arms --- crates/ra_hir/src/ty/tests.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'crates/ra_hir/src/ty/tests.rs') diff --git a/crates/ra_hir/src/ty/tests.rs b/crates/ra_hir/src/ty/tests.rs index 0f53f156e..6bf56959d 100644 --- a/crates/ra_hir/src/ty/tests.rs +++ b/crates/ra_hir/src/ty/tests.rs @@ -3600,7 +3600,7 @@ mod match_with_never_tests { use super::type_at; #[test] - fn match_compex_arm_ty() { + fn match_complex_arm_ty() { let t = type_at( r#" //- /main.rs -- cgit v1.2.3 From c1f47c37886b5cba116ba99fa37977d51871eba4 Mon Sep 17 00:00:00 2001 From: Kirill Bulatov Date: Mon, 12 Aug 2019 23:06:32 +0300 Subject: Add test marks --- crates/ra_hir/src/ty/tests.rs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'crates/ra_hir/src/ty/tests.rs') diff --git a/crates/ra_hir/src/ty/tests.rs b/crates/ra_hir/src/ty/tests.rs index 6bf56959d..7ec834836 100644 --- a/crates/ra_hir/src/ty/tests.rs +++ b/crates/ra_hir/src/ty/tests.rs @@ -3595,12 +3595,13 @@ fn no_such_field_diagnostics() { ); } -#[cfg(test)] mod match_with_never_tests { use super::type_at; + use test_utils::covers; #[test] fn match_complex_arm_ty() { + covers!(match_complex_arm_ty); let t = type_at( r#" //- /main.rs @@ -3624,6 +3625,7 @@ fn test(a: i32) { #[test] fn match_first_arm_never() { + covers!(match_first_arm_never); let t = type_at( r#" //- /main.rs @@ -3644,6 +3646,7 @@ fn test(a: i32) { #[test] fn match_second_arm_never() { + covers!(match_second_arm_never); let t = type_at( r#" //- /main.rs @@ -3664,6 +3667,7 @@ fn test(a: i32) { #[test] fn match_all_arms_never() { + covers!(match_all_arms_never); let t = type_at( r#" //- /main.rs @@ -3682,6 +3686,7 @@ fn test(a: i32) { #[test] fn match_no_never_arms() { + covers!(match_no_never_arms); let t = type_at( r#" //- /main.rs -- cgit v1.2.3 From 44cf7b34fe1a486168590f7fead442f12602c419 Mon Sep 17 00:00:00 2001 From: Kirill Bulatov Date: Wed, 14 Aug 2019 22:20:18 +0300 Subject: Fix never in if expressions --- crates/ra_hir/src/ty/tests.rs | 42 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) (limited to 'crates/ra_hir/src/ty/tests.rs') diff --git a/crates/ra_hir/src/ty/tests.rs b/crates/ra_hir/src/ty/tests.rs index 7ec834836..94b0fe3b3 100644 --- a/crates/ra_hir/src/ty/tests.rs +++ b/crates/ra_hir/src/ty/tests.rs @@ -3595,7 +3595,7 @@ fn no_such_field_diagnostics() { ); } -mod match_with_never_tests { +mod branching_with_never_tests { use super::type_at; use test_utils::covers; @@ -3644,6 +3644,46 @@ fn test(a: i32) { assert_eq!(t, "f64"); } + #[test] + fn if_never() { + covers!(if_never); + let t = type_at( + r#" +//- /main.rs +fn test() { + let i = if true { + loop {} + } else { + 3.0 + }; + i<|> + () +} +"#, + ); + assert_eq!(t, "f64"); + } + + #[test] + fn if_else_never() { + covers!(if_else_never); + let t = type_at( + r#" +//- /main.rs +fn test(input: bool) { + let i = if input { + 2.0 + } else { + return + }; + i<|> + () +} +"#, + ); + assert_eq!(t, "f64"); + } + #[test] fn match_second_arm_never() { covers!(match_second_arm_never); -- cgit v1.2.3 From 8b612251fd8c741416d2fb320bd908b76134fde5 Mon Sep 17 00:00:00 2001 From: Kirill Bulatov Date: Wed, 14 Aug 2019 22:58:17 +0300 Subject: Remove extra inference test --- crates/ra_hir/src/ty/tests.rs | 24 ------------------------ 1 file changed, 24 deletions(-) (limited to 'crates/ra_hir/src/ty/tests.rs') diff --git a/crates/ra_hir/src/ty/tests.rs b/crates/ra_hir/src/ty/tests.rs index 94b0fe3b3..195514f10 100644 --- a/crates/ra_hir/src/ty/tests.rs +++ b/crates/ra_hir/src/ty/tests.rs @@ -3599,30 +3599,6 @@ mod branching_with_never_tests { use super::type_at; use test_utils::covers; - #[test] - fn match_complex_arm_ty() { - covers!(match_complex_arm_ty); - let t = type_at( - r#" -//- /main.rs -enum Option { - Some(T), - None -} - -fn test(a: i32) { - let i = match a { - 2 => Option::Some(2.0), - _ => loop {}, - }; - i<|> - () -} -"#, - ); - assert_eq!(t, "Option"); - } - #[test] fn match_first_arm_never() { covers!(match_first_arm_never); -- cgit v1.2.3 From 89f3cc587d07a3cdcebf84cc4b99fe42636e66f0 Mon Sep 17 00:00:00 2001 From: Kirill Bulatov Date: Thu, 15 Aug 2019 23:53:42 +0300 Subject: Properly coerce never types --- crates/ra_hir/src/ty/tests.rs | 7 ------- 1 file changed, 7 deletions(-) (limited to 'crates/ra_hir/src/ty/tests.rs') diff --git a/crates/ra_hir/src/ty/tests.rs b/crates/ra_hir/src/ty/tests.rs index 195514f10..a30a645eb 100644 --- a/crates/ra_hir/src/ty/tests.rs +++ b/crates/ra_hir/src/ty/tests.rs @@ -3597,11 +3597,9 @@ fn no_such_field_diagnostics() { mod branching_with_never_tests { use super::type_at; - use test_utils::covers; #[test] fn match_first_arm_never() { - covers!(match_first_arm_never); let t = type_at( r#" //- /main.rs @@ -3622,7 +3620,6 @@ fn test(a: i32) { #[test] fn if_never() { - covers!(if_never); let t = type_at( r#" //- /main.rs @@ -3642,7 +3639,6 @@ fn test() { #[test] fn if_else_never() { - covers!(if_else_never); let t = type_at( r#" //- /main.rs @@ -3662,7 +3658,6 @@ fn test(input: bool) { #[test] fn match_second_arm_never() { - covers!(match_second_arm_never); let t = type_at( r#" //- /main.rs @@ -3683,7 +3678,6 @@ fn test(a: i32) { #[test] fn match_all_arms_never() { - covers!(match_all_arms_never); let t = type_at( r#" //- /main.rs @@ -3702,7 +3696,6 @@ fn test(a: i32) { #[test] fn match_no_never_arms() { - covers!(match_no_never_arms); let t = type_at( r#" //- /main.rs -- cgit v1.2.3 From 44386d5373114ffc88ef6bd182fb3b58a7c27e69 Mon Sep 17 00:00:00 2001 From: Kirill Bulatov Date: Thu, 22 Aug 2019 00:34:50 +0300 Subject: An attempt to add the coercion logic for Never --- crates/ra_hir/src/ty/tests.rs | 58 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) (limited to 'crates/ra_hir/src/ty/tests.rs') diff --git a/crates/ra_hir/src/ty/tests.rs b/crates/ra_hir/src/ty/tests.rs index a30a645eb..4fa9d131d 100644 --- a/crates/ra_hir/src/ty/tests.rs +++ b/crates/ra_hir/src/ty/tests.rs @@ -3618,6 +3618,26 @@ fn test(a: i32) { assert_eq!(t, "f64"); } + #[test] + fn match_second_block_arm_never() { + let t = type_at( + r#" +//- /main.rs +fn test(a: i32) { + let i = match a { + 1 => { 3.0 }, + 2 => { loop {} }, + 3 => { 3.0 }, + _ => { return }, + }; + i<|> + () +} +"#, + ); + assert_eq!(t, "f64"); + } + #[test] fn if_never() { let t = type_at( @@ -3656,6 +3676,26 @@ fn test(input: bool) { assert_eq!(t, "f64"); } + #[test] + fn match_first_block_arm_never() { + let t = type_at( + r#" +//- /main.rs +fn test(a: i32) { + let i = match a { + 1 => { return }, + 2 => { 2.0 }, + 3 => { loop {} }, + _ => { 3.0 }, + }; + i<|> + () +} +"#, + ); + assert_eq!(t, "f64"); + } + #[test] fn match_second_arm_never() { let t = type_at( @@ -3694,6 +3734,24 @@ fn test(a: i32) { assert_eq!(t, "!"); } + #[test] + fn match_all_block_arms_never() { + let t = type_at( + r#" +//- /main.rs +fn test(a: i32) { + let i = match a { + 2 => { return }, + _ => { loop {} }, + }; + i<|> + () +} +"#, + ); + assert_eq!(t, "!"); + } + #[test] fn match_no_never_arms() { let t = type_at( -- cgit v1.2.3 From e37b6c58378355347898cbdf1eef278137f6b461 Mon Sep 17 00:00:00 2001 From: Florian Diebold Date: Mon, 26 Aug 2019 20:12:41 +0200 Subject: Make infer_block not unify; add back calculate_least_upper_bound --- crates/ra_hir/src/ty/tests.rs | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) (limited to 'crates/ra_hir/src/ty/tests.rs') diff --git a/crates/ra_hir/src/ty/tests.rs b/crates/ra_hir/src/ty/tests.rs index 4fa9d131d..7fc9fbb63 100644 --- a/crates/ra_hir/src/ty/tests.rs +++ b/crates/ra_hir/src/ty/tests.rs @@ -718,16 +718,18 @@ fn main(foo: Foo) { } "#), @r###" -[35; 38) 'foo': Foo -[45; 109) '{ ... } }': () -[51; 107) 'if tru... }': () -[54; 58) 'true': bool -[59; 67) '{ }': () -[73; 107) 'if fal... }': i32 -[76; 81) 'false': bool -[82; 107) '{ ... }': i32 -[92; 95) 'foo': Foo -[92; 101) 'foo.field': i32"### + ⋮ + ⋮[35; 38) 'foo': Foo + ⋮[45; 109) '{ ... } }': () + ⋮[51; 107) 'if tru... }': () + ⋮[54; 58) 'true': bool + ⋮[59; 67) '{ }': () + ⋮[73; 107) 'if fal... }': () + ⋮[76; 81) 'false': bool + ⋮[82; 107) '{ ... }': i32 + ⋮[92; 95) 'foo': Foo + ⋮[92; 101) 'foo.field': i32 + "### ) } -- cgit v1.2.3 From 590aed2eec869a1b64c5d3c07a26dd59c669004b Mon Sep 17 00:00:00 2001 From: Kirill Bulatov Date: Mon, 26 Aug 2019 23:00:27 +0300 Subject: Remove redundant tests --- crates/ra_hir/src/ty/tests.rs | 68 ++++--------------------------------------- 1 file changed, 5 insertions(+), 63 deletions(-) (limited to 'crates/ra_hir/src/ty/tests.rs') diff --git a/crates/ra_hir/src/ty/tests.rs b/crates/ra_hir/src/ty/tests.rs index 7fc9fbb63..e3eb0c3fa 100644 --- a/crates/ra_hir/src/ty/tests.rs +++ b/crates/ra_hir/src/ty/tests.rs @@ -3600,46 +3600,6 @@ fn no_such_field_diagnostics() { mod branching_with_never_tests { use super::type_at; - #[test] - fn match_first_arm_never() { - let t = type_at( - r#" -//- /main.rs -fn test(a: i32) { - let i = match a { - 1 => return, - 2 => 2.0, - 3 => loop {}, - _ => 3.0, - }; - i<|> - () -} -"#, - ); - assert_eq!(t, "f64"); - } - - #[test] - fn match_second_block_arm_never() { - let t = type_at( - r#" -//- /main.rs -fn test(a: i32) { - let i = match a { - 1 => { 3.0 }, - 2 => { loop {} }, - 3 => { 3.0 }, - _ => { return }, - }; - i<|> - () -} -"#, - ); - assert_eq!(t, "f64"); - } - #[test] fn if_never() { let t = type_at( @@ -3679,16 +3639,16 @@ fn test(input: bool) { } #[test] - fn match_first_block_arm_never() { + fn match_first_arm_never() { let t = type_at( r#" //- /main.rs fn test(a: i32) { let i = match a { - 1 => { return }, - 2 => { 2.0 }, - 3 => { loop {} }, - _ => { 3.0 }, + 1 => return, + 2 => 2.0, + 3 => loop {}, + _ => 3.0, }; i<|> () @@ -3736,24 +3696,6 @@ fn test(a: i32) { assert_eq!(t, "!"); } - #[test] - fn match_all_block_arms_never() { - let t = type_at( - r#" -//- /main.rs -fn test(a: i32) { - let i = match a { - 2 => { return }, - _ => { loop {} }, - }; - i<|> - () -} -"#, - ); - assert_eq!(t, "!"); - } - #[test] fn match_no_never_arms() { let t = type_at( -- cgit v1.2.3