]> git.lizzy.rs Git - rust.git/blob - src/test/run-pass/try-block.rs
Rollup merge of #58306 - GuillaumeGomez:crate-browser-history, r=QuietMisdreavus
[rust.git] / src / test / run-pass / try-block.rs
1 #![allow(non_camel_case_types)]
2 #![allow(dead_code)]
3 // compile-flags: --edition 2018
4
5 #![feature(try_blocks)]
6
7 struct catch {}
8
9 pub fn main() {
10     let catch_result: Option<_> = try {
11         let x = 5;
12         x
13     };
14     assert_eq!(catch_result, Some(5));
15
16     let mut catch = true;
17     while catch { catch = false; }
18     assert_eq!(catch, false);
19
20     catch = if catch { false } else { true };
21     assert_eq!(catch, true);
22
23     match catch {
24         _ => {}
25     };
26
27     let catch_err: Result<_, i32> = try {
28         Err(22)?;
29         1
30     };
31     assert_eq!(catch_err, Err(22));
32
33     let catch_okay: Result<i32, i32> = try {
34         if false { Err(25)?; }
35         Ok::<(), i32>(())?;
36         28
37     };
38     assert_eq!(catch_okay, Ok(28));
39
40     let catch_from_loop: Result<i32, i32> = try {
41         for i in 0..10 {
42             if i < 5 { Ok::<i32, i32>(i)?; } else { Err(i)?; }
43         }
44         22
45     };
46     assert_eq!(catch_from_loop, Err(5));
47
48     let cfg_init;
49     let _res: Result<(), ()> = try {
50         cfg_init = 5;
51     };
52     assert_eq!(cfg_init, 5);
53
54     let cfg_init_2;
55     let _res: Result<(), ()> = try {
56         cfg_init_2 = 6;
57         Err(())?;
58     };
59     assert_eq!(cfg_init_2, 6);
60
61     let my_string = "test".to_string();
62     let res: Result<&str, ()> = try {
63         // Unfortunately, deref doesn't fire here (#49356)
64         &my_string[..]
65     };
66     assert_eq!(res, Ok("test"));
67
68     let my_opt: Option<_> = try { () };
69     assert_eq!(my_opt, Some(()));
70
71     let my_opt: Option<_> = try { };
72     assert_eq!(my_opt, Some(()));
73 }