aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_hir_ty/src/tests
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ra_hir_ty/src/tests')
-rw-r--r--crates/ra_hir_ty/src/tests/coercion.rs31
-rw-r--r--crates/ra_hir_ty/src/tests/simple.rs55
2 files changed, 86 insertions, 0 deletions
diff --git a/crates/ra_hir_ty/src/tests/coercion.rs b/crates/ra_hir_ty/src/tests/coercion.rs
index ac9e3872a..33d6ca403 100644
--- a/crates/ra_hir_ty/src/tests/coercion.rs
+++ b/crates/ra_hir_ty/src/tests/coercion.rs
@@ -440,3 +440,34 @@ fn test() {
440 "### 440 "###
441 ); 441 );
442} 442}
443
444#[test]
445fn closure_return_coerce() {
446 assert_snapshot!(
447 infer_with_mismatches(r#"
448fn foo() {
449 let x = || {
450 if true {
451 return &1u32;
452 }
453 &&1u32
454 };
455}
456"#, true),
457 @r###"
458 [10; 106) '{ ... }; }': ()
459 [20; 21) 'x': || -> &u32
460 [24; 103) '|| { ... }': || -> &u32
461 [27; 103) '{ ... }': &u32
462 [37; 82) 'if tru... }': ()
463 [40; 44) 'true': bool
464 [45; 82) '{ ... }': !
465 [59; 71) 'return &1u32': !
466 [66; 71) '&1u32': &u32
467 [67; 71) '1u32': u32
468 [91; 97) '&&1u32': &&u32
469 [92; 97) '&1u32': &u32
470 [93; 97) '1u32': u32
471 "###
472 );
473}
diff --git a/crates/ra_hir_ty/src/tests/simple.rs b/crates/ra_hir_ty/src/tests/simple.rs
index 18976c9ae..6fe647a5e 100644
--- a/crates/ra_hir_ty/src/tests/simple.rs
+++ b/crates/ra_hir_ty/src/tests/simple.rs
@@ -1606,3 +1606,58 @@ fn main() {
1606 ); 1606 );
1607 assert_eq!(t, "u32"); 1607 assert_eq!(t, "u32");
1608} 1608}
1609
1610#[test]
1611fn closure_return() {
1612 assert_snapshot!(
1613 infer(r#"
1614fn foo() -> u32 {
1615 let x = || -> usize { return 1; };
1616}
1617"#),
1618 @r###"
1619 [17; 59) '{ ...; }; }': ()
1620 [27; 28) 'x': || -> usize
1621 [31; 56) '|| -> ...n 1; }': || -> usize
1622 [43; 56) '{ return 1; }': !
1623 [45; 53) 'return 1': !
1624 [52; 53) '1': usize
1625 "###
1626 );
1627}
1628
1629#[test]
1630fn closure_return_unit() {
1631 assert_snapshot!(
1632 infer(r#"
1633fn foo() -> u32 {
1634 let x = || { return; };
1635}
1636"#),
1637 @r###"
1638 [17; 48) '{ ...; }; }': ()
1639 [27; 28) 'x': || -> ()
1640 [31; 45) '|| { return; }': || -> ()
1641 [34; 45) '{ return; }': !
1642 [36; 42) 'return': !
1643 "###
1644 );
1645}
1646
1647#[test]
1648fn closure_return_inferred() {
1649 assert_snapshot!(
1650 infer(r#"
1651fn foo() -> u32 {
1652 let x = || { "test" };
1653}
1654"#),
1655 @r###"
1656 [17; 47) '{ ..." }; }': ()
1657 [27; 28) 'x': || -> &str
1658 [31; 44) '|| { "test" }': || -> &str
1659 [34; 44) '{ "test" }': &str
1660 [36; 42) '"test"': &str
1661 "###
1662 );
1663}