diff options
Diffstat (limited to 'crates/hir_ty/src/tests')
-rw-r--r-- | crates/hir_ty/src/tests/patterns.rs | 58 |
1 files changed, 57 insertions, 1 deletions
diff --git a/crates/hir_ty/src/tests/patterns.rs b/crates/hir_ty/src/tests/patterns.rs index 787647e9f..ddbadbe40 100644 --- a/crates/hir_ty/src/tests/patterns.rs +++ b/crates/hir_ty/src/tests/patterns.rs | |||
@@ -546,7 +546,9 @@ fn infer_const_pattern() { | |||
546 | 273..276 'Bar': usize | 546 | 273..276 'Bar': usize |
547 | 280..283 'Bar': usize | 547 | 280..283 'Bar': usize |
548 | 200..223: expected (), got Foo | 548 | 200..223: expected (), got Foo |
549 | 211..214: expected (), got Foo | ||
549 | 262..285: expected (), got usize | 550 | 262..285: expected (), got usize |
551 | 273..276: expected (), got usize | ||
550 | "#]], | 552 | "#]], |
551 | ); | 553 | ); |
552 | } | 554 | } |
@@ -703,7 +705,7 @@ fn box_pattern() { | |||
703 | 705 | ||
704 | #[test] | 706 | #[test] |
705 | fn tuple_ellipsis_pattern() { | 707 | fn tuple_ellipsis_pattern() { |
706 | check_infer( | 708 | check_infer_with_mismatches( |
707 | r#" | 709 | r#" |
708 | fn foo(tuple: (u8, i16, f32)) { | 710 | fn foo(tuple: (u8, i16, f32)) { |
709 | match tuple { | 711 | match tuple { |
@@ -744,6 +746,8 @@ fn foo(tuple: (u8, i16, f32)) { | |||
744 | 186..200 '{/*too long*/}': () | 746 | 186..200 '{/*too long*/}': () |
745 | 209..210 '_': (u8, i16, f32) | 747 | 209..210 '_': (u8, i16, f32) |
746 | 214..216 '{}': () | 748 | 214..216 '{}': () |
749 | 136..142: expected (u8, i16, f32), got (u8, i16) | ||
750 | 170..182: expected (u8, i16, f32), got (u8, i16, f32, _) | ||
747 | "#]], | 751 | "#]], |
748 | ); | 752 | ); |
749 | } | 753 | } |
@@ -851,3 +855,55 @@ fn f(e: Enum) { | |||
851 | "#, | 855 | "#, |
852 | ) | 856 | ) |
853 | } | 857 | } |
858 | |||
859 | #[test] | ||
860 | fn type_mismatch_in_or_pattern() { | ||
861 | check_infer_with_mismatches( | ||
862 | r#" | ||
863 | fn main() { | ||
864 | match (false,) { | ||
865 | (true | (),) => {} | ||
866 | (() | true,) => {} | ||
867 | (_ | (),) => {} | ||
868 | (() | _,) => {} | ||
869 | } | ||
870 | } | ||
871 | "#, | ||
872 | expect![[r#" | ||
873 | 10..142 '{ ... } }': () | ||
874 | 16..140 'match ... }': () | ||
875 | 22..30 '(false,)': (bool,) | ||
876 | 23..28 'false': bool | ||
877 | 41..53 '(true | (),)': (bool,) | ||
878 | 42..46 'true': bool | ||
879 | 42..46 'true': bool | ||
880 | 42..51 'true | ()': bool | ||
881 | 49..51 '()': () | ||
882 | 57..59 '{}': () | ||
883 | 68..80 '(() | true,)': ((),) | ||
884 | 69..71 '()': () | ||
885 | 69..78 '() | true': () | ||
886 | 74..78 'true': bool | ||
887 | 74..78 'true': bool | ||
888 | 84..86 '{}': () | ||
889 | 95..104 '(_ | (),)': (bool,) | ||
890 | 96..97 '_': bool | ||
891 | 96..102 '_ | ()': bool | ||
892 | 100..102 '()': () | ||
893 | 108..110 '{}': () | ||
894 | 119..128 '(() | _,)': ((),) | ||
895 | 120..122 '()': () | ||
896 | 120..126 '() | _': () | ||
897 | 125..126 '_': bool | ||
898 | 132..134 '{}': () | ||
899 | 49..51: expected bool, got () | ||
900 | 68..80: expected (bool,), got ((),) | ||
901 | 69..71: expected bool, got () | ||
902 | 69..78: expected bool, got () | ||
903 | 100..102: expected bool, got () | ||
904 | 119..128: expected (bool,), got ((),) | ||
905 | 120..122: expected bool, got () | ||
906 | 120..126: expected bool, got () | ||
907 | "#]], | ||
908 | ); | ||
909 | } | ||