@@ -16,7 +16,7 @@ mod ops;
16
16
pub use cpu:: * ;
17
17
pub use memory:: * ;
18
18
19
- #[ derive( Debug , Snafu ) ]
19
+ #[ derive( Debug , PartialEq , Snafu ) ]
20
20
pub enum ParseQuantityError {
21
21
#[ snafu( display( "input is either empty or contains non-ascii characters" ) ) ]
22
22
InvalidFormat ,
@@ -28,7 +28,7 @@ pub enum ParseQuantityError {
28
28
InvalidSuffix { source : ParseSuffixError } ,
29
29
}
30
30
31
- #[ derive( Clone , Debug , PartialEq ) ]
31
+ #[ derive( Clone , Copy , Debug , PartialEq , PartialOrd ) ]
32
32
pub struct Quantity {
33
33
// FIXME (@Techassi): Support arbitrary-precision numbers
34
34
/// The numeric value of the quantity.
@@ -138,22 +138,26 @@ impl Quantity {
138
138
let factor = ( s. base ( ) as f64 ) . powf ( s. exponent ( ) )
139
139
/ ( suffix. base ( ) as f64 ) . powf ( suffix. exponent ( ) ) ;
140
140
141
- * v = * v * factor;
141
+ * v *= factor;
142
142
* s = suffix;
143
143
144
144
false
145
145
}
146
146
}
147
147
}
148
+
149
+ pub fn ceil ( & mut self ) {
150
+ self . value = self . value . ceil ( ) ;
151
+ }
148
152
}
149
153
150
- #[ derive( Debug , Snafu ) ]
154
+ #[ derive( Debug , PartialEq , Snafu ) ]
151
155
#[ snafu( display( "failed to parse {input:?} as quantity suffix" ) ) ]
152
156
pub struct ParseSuffixError {
153
157
input : String ,
154
158
}
155
159
156
- #[ derive( Clone , Debug , PartialEq ) ]
160
+ #[ derive( Clone , Copy , Debug , PartialEq , PartialOrd ) ]
157
161
pub enum Suffix {
158
162
DecimalByteMultiple ( DecimalByteMultiple ) ,
159
163
BinaryByteMultiple ( BinaryByteMultiple ) ,
@@ -244,7 +248,7 @@ pub trait SuffixMultiple {
244
248
/// - <https://physics.nist.gov/cuu/Units/binary.html>
245
249
///
246
250
/// [k8s-serialization-format]: https://github.com/kubernetes/apimachinery/blob/8c60292e48e46c4faa1e92acb232ce6adb37512c/pkg/api/resource/quantity.go#L37-L59
247
- #[ derive( Clone , Debug , PartialEq , strum:: Display , strum:: EnumString ) ]
251
+ #[ derive( Clone , Copy , Debug , PartialEq , PartialOrd , strum:: Display , strum:: EnumString ) ]
248
252
pub enum BinaryByteMultiple {
249
253
#[ strum( serialize = "Ki" ) ]
250
254
Kibi ,
@@ -310,7 +314,7 @@ impl SuffixMultiple for BinaryByteMultiple {
310
314
/// - <https://physics.nist.gov/cuu/Units/binary.html>
311
315
///
312
316
/// [k8s-serialization-format]: https://github.com/kubernetes/apimachinery/blob/8c60292e48e46c4faa1e92acb232ce6adb37512c/pkg/api/resource/quantity.go#L37-L59
313
- #[ derive( Clone , Debug , PartialEq , strum:: Display , strum:: EnumString ) ]
317
+ #[ derive( Clone , Copy , Debug , PartialEq , PartialOrd , strum:: Display , strum:: EnumString ) ]
314
318
pub enum DecimalByteMultiple {
315
319
#[ strum( serialize = "m" ) ]
316
320
Milli ,
@@ -355,7 +359,7 @@ impl SuffixMultiple for DecimalByteMultiple {
355
359
/// ### See
356
360
///
357
361
/// - <https://en.wikipedia.org/wiki/Scientific_notation#E_notation>
358
- #[ derive( Clone , Debug , PartialEq ) ]
362
+ #[ derive( Clone , Copy , Debug , PartialEq , PartialOrd ) ]
359
363
pub struct DecimalExponent ( f64 ) ;
360
364
361
365
impl Deref for DecimalExponent {
@@ -471,10 +475,10 @@ mod test {
471
475
#[ case] output : & str ,
472
476
#[ case] scaled : bool ,
473
477
) {
474
- let parsed = Quantity :: from_str ( input) . unwrap ( ) ;
475
- let ( quantity , was_scaled) = parsed. scale_to ( Suffix :: BinaryByteMultiple ( scale_to) ) ;
478
+ let mut parsed = Quantity :: from_str ( input) . unwrap ( ) ;
479
+ let was_scaled = parsed. scale_to ( Suffix :: BinaryByteMultiple ( scale_to) ) ;
476
480
477
- assert_eq ! ( quantity . to_string( ) , output) ;
481
+ assert_eq ! ( parsed . to_string( ) , output) ;
478
482
assert_eq ! ( was_scaled, scaled) ;
479
483
}
480
484
@@ -487,10 +491,10 @@ mod test {
487
491
#[ case] output : & str ,
488
492
#[ case] scaled : bool ,
489
493
) {
490
- let parsed = Quantity :: from_str ( input) . unwrap ( ) ;
491
- let ( quantity , was_scaled) = parsed. scale_to ( Suffix :: DecimalByteMultiple ( scale_to) ) ;
494
+ let mut parsed = Quantity :: from_str ( input) . unwrap ( ) ;
495
+ let was_scaled = parsed. scale_to ( Suffix :: DecimalByteMultiple ( scale_to) ) ;
492
496
493
- assert_eq ! ( quantity . to_string( ) , output) ;
497
+ assert_eq ! ( parsed . to_string( ) , output) ;
494
498
assert_eq ! ( was_scaled, scaled) ;
495
499
}
496
500
@@ -504,10 +508,10 @@ mod test {
504
508
#[ case] output : & str ,
505
509
#[ case] scaled : bool ,
506
510
) {
507
- let parsed = Quantity :: from_str ( input) . unwrap ( ) ;
508
- let ( quantity , was_scaled) = parsed. scale_to ( Suffix :: DecimalByteMultiple ( scale_to) ) ;
511
+ let mut parsed = Quantity :: from_str ( input) . unwrap ( ) ;
512
+ let was_scaled = parsed. scale_to ( Suffix :: DecimalByteMultiple ( scale_to) ) ;
509
513
510
- assert_eq ! ( quantity . to_string( ) , output) ;
514
+ assert_eq ! ( parsed . to_string( ) , output) ;
511
515
assert_eq ! ( was_scaled, scaled) ;
512
516
}
513
517
@@ -521,10 +525,10 @@ mod test {
521
525
#[ case] output : & str ,
522
526
#[ case] scaled : bool ,
523
527
) {
524
- let parsed = Quantity :: from_str ( input) . unwrap ( ) ;
525
- let ( quantity , was_scaled) = parsed. scale_to ( Suffix :: DecimalExponent ( scale_to) ) ;
528
+ let mut parsed = Quantity :: from_str ( input) . unwrap ( ) ;
529
+ let was_scaled = parsed. scale_to ( Suffix :: DecimalExponent ( scale_to) ) ;
526
530
527
- assert_eq ! ( quantity . to_string( ) , output) ;
531
+ assert_eq ! ( parsed . to_string( ) , output) ;
528
532
assert_eq ! ( was_scaled, scaled) ;
529
533
}
530
534
}
0 commit comments