11#![ allow( unused_imports) ]
2+
3+ mod derives;
4+ mod enums;
5+ mod types;
6+ pub use types:: { RandValue , Test , TestEnum , TestSkip } ;
7+
28#[ cfg( not( feature = "nanoserde" ) ) ]
39use std:: hash:: Hash ;
410use std:: {
@@ -51,17 +57,6 @@ fn test_example() {
5157 assert_ne ! ( diffed, second) ;
5258}
5359
54- #[ cfg( not( feature = "nanoserde" ) ) ]
55- #[ cfg_attr( feature = "serde" , derive( Serialize , Deserialize ) ) ]
56- #[ derive( Debug , PartialEq , Clone , Difference , Default ) ]
57- pub struct Test {
58- test1 : i32 ,
59- test2 : String ,
60- test3 : Vec < i32 > ,
61- test4 : f32 ,
62- test5 : Option < usize > ,
63- }
64-
6560#[ cfg( not( feature = "nanoserde" ) ) ]
6661#[ test]
6762fn test_derive ( ) {
@@ -87,98 +82,6 @@ fn test_derive() {
8782 assert_eq ! ( diffed, second) ;
8883}
8984
90- // Trying to come up with all the edge cases that might be relevant
91- #[ allow( dead_code) ]
92- #[ cfg( not( any( feature = "serde" , feature = "nanoserde" ) ) ) ]
93- #[ derive( Difference ) ]
94- pub struct TestDeriveAll <
95- ' a ,
96- ' b : ' a ,
97- A : PartialEq + ' static ,
98- const C : usize ,
99- B ,
100- D ,
101- LM : Ord = Option < isize > ,
102- const N : usize = 4 ,
103- > where
104- A : core:: hash:: Hash + std:: cmp:: Eq + Default ,
105- LM : Ord + IntoIterator < Item = isize > ,
106- [ A ; N ] : Default ,
107- [ B ; C ] : Default ,
108- [ i32 ; N ] : Default ,
109- [ B ; N ] : Default ,
110- dyn Fn ( & B ) : PartialEq + Clone + core:: fmt:: Debug ,
111- ( dyn core:: fmt:: Debug + Send + ' static ) : Debug ,
112- {
113- f1 : ( ) ,
114- f2 : [ A ; N ] ,
115- f3 : [ i32 ; N ] ,
116- f4 : BTreeMap < LM , BTreeSet < <LM as IntoIterator >:: Item > > ,
117- f5 : Option < ( A , Option < & ' a <LM as IntoIterator >:: Item > ) > ,
118- f6 : HashMap < A , BTreeSet < LM > > ,
119- f7 : Box < ( Vec < LM > , HashSet < A > , [ i128 ; u8:: MIN as usize ] ) > ,
120- f8 : BTreeSet < Wrapping < D > > ,
121- #[ difference( skip) ]
122- f9 : [ B ; C ] ,
123- f10 : [ B ; N ] ,
124- r#f11 : Option < & ' b Option < usize > > ,
125- #[ difference( skip) ]
126- f12 : Option < Box < dyn Fn ( ) > > ,
127- #[ difference( skip) ]
128- f13 : Vec < fn ( A , & ( dyn core:: fmt:: Debug + Sync + ' static ) ) -> !> ,
129- #[ difference( skip) ]
130- f14 : Vec < Box < dyn FnMut ( A , LM ) -> Box < dyn Fn ( i32 ) -> i32 > > > ,
131- #[ difference( skip) ]
132- f15 : Vec < fn ( ) > ,
133- }
134-
135- #[ cfg( not( any( feature = "serde" , feature = "nanoserde" ) ) ) ]
136- #[ derive( PartialEq , Difference , Clone ) ]
137- pub enum TestDeriveAllEnum <
138- ' a ,
139- ' b : ' a ,
140- A : PartialEq + ' static ,
141- const C : usize ,
142- B ,
143- D ,
144- LM : Ord = Option < isize > ,
145- const N : usize = 4 ,
146- > where
147- A : core:: hash:: Hash + std:: cmp:: Eq + Default ,
148- LM : Ord + IntoIterator < Item = isize > ,
149- [ A ; N ] : Default ,
150- [ B ; C ] : Default ,
151- [ i32 ; N ] : Default ,
152- [ B ; N ] : Default ,
153- dyn Fn ( & B ) : PartialEq + Clone + core:: fmt:: Debug ,
154- ( dyn std:: cmp:: PartialEq < A > + Send + ' static ) : Debug + Clone + PartialEq ,
155- {
156- F1 ( ( ) ) ,
157- F2 ( [ A ; N ] ) ,
158- F3 ( [ i32 ; N ] ) ,
159- F4 ( BTreeMap < LM , BTreeSet < <LM as IntoIterator >:: Item > > ) ,
160- F5 ( Option < ( A , Option < & ' a <LM as IntoIterator >:: Item > ) > ) ,
161- F6 ( HashMap < A , BTreeSet < LM > > ) ,
162- F8 ( BTreeSet < Wrapping < D > > , BTreeSet < Wrapping < B > > ) ,
163- F9 { } ,
164- F10 { subfield1 : u64 } ,
165- r#F11( Option < & ' b Option < usize > > ) ,
166- F12 ,
167- }
168-
169- #[ cfg( not( feature = "nanoserde" ) ) ]
170- #[ derive( Debug , PartialEq , Clone , Difference ) ]
171- struct TestSkip < A >
172- where
173- A : PartialEq ,
174- {
175- test1 : A ,
176- test2 : String ,
177- #[ difference( skip) ]
178- test3skip : Vec < i32 > ,
179- test4 : f32 ,
180- }
181-
18285#[ cfg( not( feature = "nanoserde" ) ) ]
18386#[ test]
18487fn test_derive_with_skip ( ) {
@@ -352,6 +255,18 @@ fn test_generics_skip() {
352255 assert_eq ! ( diffed. test5, second. test5) ;
353256}
354257
258+ #[ test]
259+ fn test_enums ( ) {
260+ let mut follower = TestEnum :: next ( ) ;
261+ let mut leader: TestEnum ;
262+ for _ in 0 ..100 {
263+ leader = TestEnum :: next ( ) ;
264+ let diff = follower. diff ( & leader) ;
265+ follower. apply_mut ( diff) ;
266+ assert_eq ! ( leader, follower)
267+ }
268+ }
269+
355270#[ cfg( not( feature = "nanoserde" ) ) ]
356271mod derive_inner {
357272 use super :: { StructDiff , Test } ;
0 commit comments