@@ -110,7 +110,7 @@ pub enum SiliconId {
110
110
Ccg8 = 0x3580 ,
111
111
}
112
112
113
- #[ derive( Debug , PartialEq , Copy , Clone ) ]
113
+ #[ derive( Debug , PartialEq , Eq , PartialOrd , Ord , Copy , Clone ) ]
114
114
pub struct BaseVersion {
115
115
/// Major part of the version. X of X.Y.Z.BB
116
116
pub major : u8 ,
@@ -154,15 +154,15 @@ impl From<u32> for BaseVersion {
154
154
}
155
155
}
156
156
157
- #[ derive( Debug , PartialEq , Copy , Clone ) ]
157
+ #[ derive( Debug , PartialEq , Eq , PartialOrd , Ord , Copy , Clone ) ]
158
158
pub enum Application {
159
159
Notebook ,
160
160
Monitor ,
161
161
AA ,
162
162
Invalid ,
163
163
}
164
164
165
- #[ derive( Debug , PartialEq , Copy , Clone ) ]
165
+ #[ derive( Debug , PartialEq , Eq , PartialOrd , Ord , Copy , Clone ) ]
166
166
pub struct AppVersion {
167
167
pub application : Application ,
168
168
/// Major part of the version. X of X.Y.Z
@@ -309,3 +309,42 @@ fn parse_metadata_cyacd2(buffer: &[u8]) -> Option<(u32, u32)> {
309
309
None
310
310
}
311
311
}
312
+
313
+ #[ cfg( test) ]
314
+ mod tests {
315
+ use super :: * ;
316
+
317
+ #[ test]
318
+ // Make sure deriving does what I expect, properly comparing with multiple fields
319
+ fn derive_ord ( ) {
320
+ let v0_0_0 = AppVersion {
321
+ application : Application :: Notebook ,
322
+ major : 0 ,
323
+ minor : 0 ,
324
+ circuit : 0 ,
325
+ } ;
326
+ let v1_0_1 = AppVersion {
327
+ application : Application :: Notebook ,
328
+ major : 1 ,
329
+ minor : 0 ,
330
+ circuit : 1 ,
331
+ } ;
332
+ let v0_1_0 = AppVersion {
333
+ application : Application :: Notebook ,
334
+ major : 0 ,
335
+ minor : 1 ,
336
+ circuit : 0 ,
337
+ } ;
338
+ let v1_1_1 = AppVersion {
339
+ application : Application :: Notebook ,
340
+ major : 1 ,
341
+ minor : 1 ,
342
+ circuit : 1 ,
343
+ } ;
344
+ assert_eq ! ( v0_0_0, v0_0_0. clone( ) ) ;
345
+ assert ! ( v0_0_0 < v1_0_1) ;
346
+ assert ! ( v0_1_0 < v1_0_1) ;
347
+ assert ! ( v1_0_1 < v1_1_1) ;
348
+ assert ! ( v1_1_1 > v1_0_1) ;
349
+ }
350
+ }
0 commit comments