@@ -26,6 +26,7 @@ const ENTITY_TYPE_CARDANO_TRANSACTIONS: usize = 3;
26
26
/// are identified by their discriminant (i.e. index in the enum), thus the
27
27
/// modification of this type should only ever consist of appending new
28
28
/// variants.
29
+ // Important note: The order of the variants is important as it is used for the derived Ord trait.
29
30
#[ derive( Display , Debug , Clone , PartialEq , Eq , Serialize , Deserialize , EnumDiscriminants ) ]
30
31
#[ strum( serialize_all = "PascalCase" ) ]
31
32
#[ strum_discriminants( derive( EnumString , AsRefStr , Serialize , Deserialize , PartialOrd , Ord ) ) ]
@@ -162,4 +163,56 @@ impl SignedEntityTypeDiscriminants {
162
163
}
163
164
164
165
#[ cfg( test) ]
165
- mod tests { }
166
+ mod tests {
167
+ use super :: * ;
168
+
169
+ // Expected ord:
170
+ // MithrilStakeDistribution < CardanoStakeDistribution < CardanoImmutableFilesFull < CardanoTransactions
171
+ #[ test]
172
+ fn ordering_discriminant ( ) {
173
+ let mut list = vec ! [
174
+ SignedEntityTypeDiscriminants :: CardanoStakeDistribution ,
175
+ SignedEntityTypeDiscriminants :: CardanoTransactions ,
176
+ SignedEntityTypeDiscriminants :: CardanoImmutableFilesFull ,
177
+ SignedEntityTypeDiscriminants :: MithrilStakeDistribution ,
178
+ ] ;
179
+ list. sort ( ) ;
180
+
181
+ assert_eq ! (
182
+ list,
183
+ vec![
184
+ SignedEntityTypeDiscriminants :: MithrilStakeDistribution ,
185
+ SignedEntityTypeDiscriminants :: CardanoStakeDistribution ,
186
+ SignedEntityTypeDiscriminants :: CardanoImmutableFilesFull ,
187
+ SignedEntityTypeDiscriminants :: CardanoTransactions ,
188
+ ]
189
+ ) ;
190
+ }
191
+
192
+ #[ test]
193
+ fn ordering_discriminant_with_duplicate ( ) {
194
+ let mut list = vec ! [
195
+ SignedEntityTypeDiscriminants :: CardanoStakeDistribution ,
196
+ SignedEntityTypeDiscriminants :: MithrilStakeDistribution ,
197
+ SignedEntityTypeDiscriminants :: CardanoTransactions ,
198
+ SignedEntityTypeDiscriminants :: CardanoStakeDistribution ,
199
+ SignedEntityTypeDiscriminants :: CardanoImmutableFilesFull ,
200
+ SignedEntityTypeDiscriminants :: MithrilStakeDistribution ,
201
+ SignedEntityTypeDiscriminants :: MithrilStakeDistribution ,
202
+ ] ;
203
+ list. sort ( ) ;
204
+
205
+ assert_eq ! (
206
+ list,
207
+ vec![
208
+ SignedEntityTypeDiscriminants :: MithrilStakeDistribution ,
209
+ SignedEntityTypeDiscriminants :: MithrilStakeDistribution ,
210
+ SignedEntityTypeDiscriminants :: MithrilStakeDistribution ,
211
+ SignedEntityTypeDiscriminants :: CardanoStakeDistribution ,
212
+ SignedEntityTypeDiscriminants :: CardanoStakeDistribution ,
213
+ SignedEntityTypeDiscriminants :: CardanoImmutableFilesFull ,
214
+ SignedEntityTypeDiscriminants :: CardanoTransactions ,
215
+ ]
216
+ ) ;
217
+ }
218
+ }
0 commit comments