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