]> git.lizzy.rs Git - rust.git/blob - tests/source/closure.rs
Merge pull request #938 from kamalmarhubi/rename-doc-hint
[rust.git] / tests / source / closure.rs
1 // Closures
2
3 fn main() {
4     let square = ( |i:  i32 | i  *  i );
5
6     let commented = |/* first */ a /*argument*/, /* second*/ b: WithType /* argument*/, /* ignored */ _ |
7         (aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa, bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb);
8
9     let block_body = move   |xxxxxxxxxxxxxxxxxxxxxxxxxxxxx,  ref  yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy| {
10             xxxxxxxxxxxxxxxxxxxxxxxxxxxxx + yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
11         };
12
13     let loooooooooooooong_name = |field| {
14              // TODO(#27): format comments.
15              if field.node.attrs.len() > 0 { field.node.attrs[0].span.lo
16              } else {
17                  field.span.lo
18              }};
19
20     let block_me = |field| if true_story() { 1 } else { 2 };
21
22     let unblock_me = |trivial| {
23                          closure()
24                      };
25
26     let empty = |arg|    {};
27
28     let simple = |arg| { /* TODO(#27): comment formatting */ foo(arg) };
29
30     let test = |  | { do_something(); do_something_else(); };
31
32     let arg_test = |big_argument_name, test123| looooooooooooooooooong_function_naaaaaaaaaaaaaaaaame();
33
34     let arg_test = |big_argument_name, test123| {looooooooooooooooooong_function_naaaaaaaaaaaaaaaaame()};
35
36     let simple_closure = move ||   ->  () {};
37
38     let closure = |input: Ty| -> Option<String> {
39         foo()
40     };
41
42     let closure_with_return_type = |aaaaaaaaaaaaaaaaaaaaaaarg1, aaaaaaaaaaaaaaaaaaaaaaarg2| -> Strong { "sup".to_owned() };
43
44     |arg1, arg2, _, _, arg3, arg4| { let temp = arg4 + arg3;
45                                      arg2 * arg1 - temp }
46 }
47
48 fn issue311() {
49     let func = |x| println!("{}", x);
50
51     (func)(0.0);
52 }
53
54 fn issue863() {
55     let closure = |x| match x {
56         0 => true,
57         _ => false,
58     } == true;
59 }
60
61 fn issue934() {
62     let hash: &Fn(&&Block) -> u64 = &|block| -> u64 {
63         let mut h = SpanlessHash::new(cx);
64         h.hash_block(block);
65         h.finish()
66     };
67
68     let hash: &Fn(&&Block) -> u64 = &|block| -> u64 {
69         let mut h = SpanlessHash::new(cx);
70         h.hash_block(block);
71         h.finish();
72     };
73 }
74
75 impl<'a, 'tcx: 'a> SpanlessEq<'a, 'tcx> {
76     pub fn eq_expr(&self, left: &Expr, right: &Expr) -> bool {
77         match (&left.node, &right.node) {
78             (&ExprBinary(l_op, ref ll, ref lr), &ExprBinary(r_op, ref rl, ref rr)) => {
79                 l_op.node == r_op.node && self.eq_expr(ll, rl) && self.eq_expr(lr, rr) ||
80                 swap_binop(l_op.node, ll, lr).map_or(false, |(l_op, ll, lr)| l_op == r_op.node && self.eq_expr(ll, rl) && self.eq_expr(lr, rr))
81             }
82         }
83     }
84 }