]> git.lizzy.rs Git - rust.git/blob - src/test/run-pass-fulldeps/derive-totalsum-attr.rs
Auto merge of #54919 - alexcrichton:update-cargo, r=Mark-Simulacrum
[rust.git] / src / test / run-pass-fulldeps / derive-totalsum-attr.rs
1 // Copyright 2015 The Rust Project Developers. See the COPYRIGHT
2 // file at the top-level directory of this distribution and at
3 // http://rust-lang.org/COPYRIGHT.
4 //
5 // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6 // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8 // option. This file may not be copied, modified, or distributed
9 // except according to those terms.
10
11 // aux-build:custom_derive_plugin_attr.rs
12 // ignore-stage1
13
14 #![feature(plugin, custom_derive, rustc_attrs)]
15 #![plugin(custom_derive_plugin_attr)]
16
17 trait TotalSum {
18     fn total_sum(&self) -> isize;
19 }
20
21 impl TotalSum for isize {
22     fn total_sum(&self) -> isize {
23         *self
24     }
25 }
26
27 struct Seven;
28
29 impl TotalSum for Seven {
30     fn total_sum(&self) -> isize {
31         7
32     }
33 }
34
35 #[rustc_derive_TotalSum]
36 struct Foo {
37     seven: Seven,
38     bar: Bar,
39     baz: isize,
40     #[ignore]
41     nan: NaN,
42 }
43
44 #[rustc_derive_TotalSum]
45 struct Bar {
46     quux: isize,
47     bleh: isize,
48     #[ignore]
49     nan: NaN2
50 }
51
52 struct NaN;
53
54 impl TotalSum for NaN {
55     fn total_sum(&self) -> isize {
56         panic!();
57     }
58 }
59
60 struct NaN2;
61
62 pub fn main() {
63     let v = Foo {
64         seven: Seven,
65         bar: Bar {
66             quux: 9,
67             bleh: 3,
68             nan: NaN2
69         },
70         baz: 80,
71         nan: NaN
72     };
73     assert_eq!(v.total_sum(), 99);
74 }