Skip to content

Commit da09f96

Browse files
committed
loop return value inference: add tests
1 parent 6e36ad3 commit da09f96

File tree

1 file changed

+63
-0
lines changed

1 file changed

+63
-0
lines changed

crates/ra_hir_ty/src/tests/simple.rs

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1860,3 +1860,66 @@ fn test() {
18601860
"###
18611861
);
18621862
}
1863+
1864+
#[test]
1865+
fn infer_loop_break_with_val() {
1866+
assert_snapshot!(
1867+
infer(r#"
1868+
enum Option<T> { Some(T), None }
1869+
use Option::*;
1870+
1871+
fn test() {
1872+
let x = loop {
1873+
if false {
1874+
break None;
1875+
}
1876+
1877+
break Some(true);
1878+
};
1879+
}
1880+
"#),
1881+
@r###"
1882+
60..169 '{ ... }; }': ()
1883+
70..71 'x': Option<bool>
1884+
74..166 'loop {... }': Option<bool>
1885+
79..166 '{ ... }': ()
1886+
89..133 'if fal... }': ()
1887+
92..97 'false': bool
1888+
98..133 '{ ... }': ()
1889+
112..122 'break None': !
1890+
118..122 'None': Option<bool>
1891+
143..159 'break ...(true)': !
1892+
149..153 'Some': Some<bool>(bool) -> Option<bool>
1893+
149..159 'Some(true)': Option<bool>
1894+
154..158 'true': bool
1895+
"###
1896+
);
1897+
}
1898+
1899+
#[test]
1900+
fn infer_loop_break_without_val() {
1901+
assert_snapshot!(
1902+
infer(r#"
1903+
enum Option<T> { Some(T), None }
1904+
use Option::*;
1905+
1906+
fn test() {
1907+
let x = loop {
1908+
if false {
1909+
break;
1910+
}
1911+
};
1912+
}
1913+
"#),
1914+
@r###"
1915+
60..137 '{ ... }; }': ()
1916+
70..71 'x': ()
1917+
74..134 'loop {... }': ()
1918+
79..134 '{ ... }': ()
1919+
89..128 'if fal... }': ()
1920+
92..97 'false': bool
1921+
98..128 '{ ... }': ()
1922+
112..117 'break': !
1923+
"###
1924+
);
1925+
}

0 commit comments

Comments
 (0)