From e805e8c1d5bf26e9716fb855f97d950395129c20 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Mon, 29 Jun 2020 14:21:57 +0200 Subject: (T): make typification tests more data driven --- crates/ra_hir_ty/src/tests/never_type.rs | 118 ++++++++++++------------------- 1 file changed, 46 insertions(+), 72 deletions(-) (limited to 'crates/ra_hir_ty/src/tests/never_type.rs') diff --git a/crates/ra_hir_ty/src/tests/never_type.rs b/crates/ra_hir_ty/src/tests/never_type.rs index ab9a990f5..64d421d40 100644 --- a/crates/ra_hir_ty/src/tests/never_type.rs +++ b/crates/ra_hir_ty/src/tests/never_type.rs @@ -1,99 +1,91 @@ use insta::assert_snapshot; -use super::{infer_with_mismatches, type_at}; +use super::{check_types, infer_with_mismatches}; #[test] fn infer_never1() { - let t = type_at( + check_types( r#" -//- /main.rs fn test() { let t = return; - t<|>; -} + t; +} //^ ! "#, ); - assert_eq!(t, "!"); } #[test] fn infer_never2() { - let t = type_at( + check_types( r#" -//- /main.rs fn gen() -> T { loop {} } fn test() { let a = gen(); if false { a } else { loop {} }; - a<|>; -} + a; +} //^ ! "#, ); - assert_eq!(t, "!"); } #[test] fn infer_never3() { - let t = type_at( + check_types( r#" -//- /main.rs fn gen() -> T { loop {} } fn test() { let a = gen(); if false { loop {} } else { a }; - a<|>; + a; + //^ ! } "#, ); - assert_eq!(t, "!"); } #[test] fn never_type_in_generic_args() { - let t = type_at( + check_types( r#" -//- /main.rs enum Option { None, Some(T) } fn test() { let a = if true { Option::None } else { Option::Some(return) }; - a<|>; -} + a; +} //^ Option "#, ); - assert_eq!(t, "Option"); } #[test] fn never_type_can_be_reinferred1() { - let t = type_at( + check_types( r#" -//- /main.rs fn gen() -> T { loop {} } fn test() { let a = gen(); if false { loop {} } else { a }; - a<|>; + a; + //^ () if false { a }; } "#, ); - assert_eq!(t, "()"); } #[test] fn never_type_can_be_reinferred2() { - let t = type_at( + check_types( r#" -//- /main.rs enum Option { None, Some(T) } fn test() { let a = if true { Option::None } else { Option::Some(return) }; - a<|>; + a; + //^ Option match 42 { 42 => a, _ => Option::Some(42), @@ -101,19 +93,18 @@ fn test() { } "#, ); - assert_eq!(t, "Option"); } #[test] fn never_type_can_be_reinferred3() { - let t = type_at( + check_types( r#" -//- /main.rs enum Option { None, Some(T) } fn test() { let a = if true { Option::None } else { Option::Some(return) }; - a<|>; + a; + //^ Option<&str> match 42 { 42 => a, _ => Option::Some("str"), @@ -121,82 +112,72 @@ fn test() { } "#, ); - assert_eq!(t, "Option<&str>"); } #[test] fn match_no_arm() { - let t = type_at( + check_types( r#" -//- /main.rs enum Void {} fn test(a: Void) { let t = match a {}; - t<|>; -} + t; +} //^ ! "#, ); - assert_eq!(t, "!"); } #[test] fn match_unknown_arm() { - let t = type_at( + check_types( r#" -//- /main.rs fn test(a: Option) { let t = match 0 { _ => unknown, }; - t<|>; -} + t; +} //^ {unknown} "#, ); - assert_eq!(t, "{unknown}"); } #[test] fn if_never() { - let t = type_at( + check_types( r#" -//- /main.rs fn test() { let i = if true { loop {} } else { 3.0 }; - i<|>; -} + i; +} //^ f64 "#, ); - assert_eq!(t, "f64"); } #[test] fn if_else_never() { - let t = type_at( + check_types( r#" -//- /main.rs fn test(input: bool) { let i = if input { 2.0 } else { return }; - i<|>; -} + i; +} //^ f64 "#, ); - assert_eq!(t, "f64"); } #[test] fn match_first_arm_never() { - let t = type_at( + check_types( r#" -//- /main.rs fn test(a: i32) { let i = match a { 1 => return, @@ -204,18 +185,16 @@ fn test(a: i32) { 3 => loop {}, _ => 3.0, }; - i<|>; -} + i; +} //^ f64 "#, ); - assert_eq!(t, "f64"); } #[test] fn match_second_arm_never() { - let t = type_at( + check_types( r#" -//- /main.rs fn test(a: i32) { let i = match a { 1 => 3.0, @@ -223,45 +202,40 @@ fn test(a: i32) { 3 => 3.0, _ => return, }; - i<|>; -} + i; +} //^ f64 "#, ); - assert_eq!(t, "f64"); } #[test] fn match_all_arms_never() { - let t = type_at( + check_types( r#" -//- /main.rs fn test(a: i32) { let i = match a { 2 => return, _ => loop {}, }; - i<|>; -} + i; +} //^ ! "#, ); - assert_eq!(t, "!"); } #[test] fn match_no_never_arms() { - let t = type_at( + check_types( r#" -//- /main.rs fn test(a: i32) { let i = match a { 2 => 2.0, _ => 3.0, }; - i<|>; -} + i; +} //^ f64 "#, ); - assert_eq!(t, "f64"); } #[test] -- cgit v1.2.3