1 #[cfg(feature = "use_core")]
2 extern crate core;
3 
4 #[macro_use]
5 extern crate derivative;
6 
7 #[derive(Debug, Derivative, PartialEq)]
8 #[derivative(Default="new")]
9 struct Foo {
10     foo: u8,
11     #[derivative(Default(value="42"))]
12     bar: u8,
13 }
14 
15 #[derive(Debug, Derivative, PartialEq)]
16 #[derivative(Default(new="true"))]
17 struct Bar (
18     u8,
19     #[derivative(Default(value="42"))]
20     u8,
21 );
22 
23 #[derive(Debug, PartialEq)]
24 struct B1(u8, u8);
25 #[derive(Debug, PartialEq)]
26 struct B2{a:u8, b:u8}
27 
28 #[derive(Debug, Derivative, PartialEq)]
29 #[derivative(Default(new="true"))]
30 struct Baz (
31     #[derivative(Default(value="[1,2]"))]
32     [u8;2],
33     #[derivative(Default(value="[3;2]"))]
34     [u8;2],
35     #[derivative(Default(value="(4,5)"))]
36     (u8, u8),
37     #[derivative(Default(value="B1(6,7)"))]
38     B1,
39     #[derivative(Default(value="B2{a:8,b:9}"))]
40     B2,
41 );
42 
43 #[derive(Debug, Derivative, PartialEq)]
44 #[derivative(Default)]
45 enum Enum1 {
46     #[allow(dead_code)]
47     A,
48     #[derivative(Default)]
49     B,
50 }
51 
52 #[derive(Debug, Derivative, PartialEq)]
53 #[derivative(Default)]
54 enum Enum2 {
55     #[derivative(Default)]
56     A,
57     #[allow(dead_code)]
58     B,
59 }
60 
61 #[derive(Debug, Derivative, PartialEq)]
62 #[derivative(Default)]
63 struct A(#[derivative(Default(value="NoDefault"))] NoDefault);
64 
65 #[derive(Debug, PartialEq)]
66 struct NoDefault;
67 
68 #[test]
main()69 fn main() {
70     assert_eq!(Foo::default(), Foo { foo: 0, bar: 42 });
71     assert_eq!(Foo::new(), Foo { foo: 0, bar: 42 });
72     assert_eq!(Bar::default(), Bar(0, 42));
73     assert_eq!(Bar::new(), Bar(0, 42));
74     assert_eq!(Baz::new(), Baz([1,2], [3,3], (4,5), B1(6,7), B2{a:8,b:9}));
75     assert_eq!(A::default(), A(NoDefault));
76     assert_eq!(Enum1::default(), Enum1::B);
77     assert_eq!(Enum2::default(), Enum2::A);
78 }
79