• Home
  • Raw
  • Download

Lines Matching +full:rkyv +full:- +full:validation

1 // Copyright 2012-2014 The Rust Project Developers. See the COPYRIGHT
2 // file at the top-level directory of this distribution and at
3 // http://rust-lang.org/COPYRIGHT.
5 // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6 // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
21 #[cfg(any(feature = "rkyv", feature = "rkyv-16", feature = "rkyv-32", feature = "rkyv-64"))]
22 use rkyv::{Archive, Deserialize, Serialize};
38 /// The number of (non-leap) seconds in days.
40 /// The number of (non-leap) seconds in a week.
49 /// minimum value notably being set to `-i64::MAX` rather than allowing the full
54 any(feature = "rkyv", feature = "rkyv-16", feature = "rkyv-32", feature = "rkyv-64"),
59 #[cfg_attr(feature = "rkyv-validation", archive(check_bytes))]
65 /// The minimum possible `TimeDelta`: `-i64::MAX` milliseconds.
67 secs: -i64::MAX / MILLIS_PER_SEC - 1,
68 nanos: NANOS_PER_SEC + (-i64::MAX % MILLIS_PER_SEC) as i32 * NANOS_PER_MILLI,
83 pub const fn new(secs: i64, nanos: u32) -> Option<TimeDelta> { in new()
105 pub const fn weeks(weeks: i64) -> TimeDelta { in weeks()
118 pub const fn try_weeks(weeks: i64) -> Option<TimeDelta> { in try_weeks()
132 pub const fn days(days: i64) -> TimeDelta { in days()
145 pub const fn try_days(days: i64) -> Option<TimeDelta> { in try_days()
158 pub const fn hours(hours: i64) -> TimeDelta { in hours()
170 pub const fn try_hours(hours: i64) -> Option<TimeDelta> { in try_hours()
183 pub const fn minutes(minutes: i64) -> TimeDelta { in minutes()
195 pub const fn try_minutes(minutes: i64) -> Option<TimeDelta> { in try_minutes()
203 /// Panics when `seconds` is more than `i64::MAX / 1_000` or less than `-i64::MAX / 1_000`
207 pub const fn seconds(seconds: i64) -> TimeDelta { in seconds()
216 /// `-i64::MAX / 1_000` (in this context, this is the same as `i64::MIN / 1_000` due to
219 pub const fn try_seconds(seconds: i64) -> Option<TimeDelta> { in try_seconds()
228 /// `i64::MAX` or less than `-i64::MAX`. Notably, this is not the same as `i64::MIN`.
230 pub const fn milliseconds(milliseconds: i64) -> TimeDelta { in milliseconds()
239 /// than `i64::MAX` or less than `-i64::MAX`. Notably, this is not the same as `i64::MIN`.
241 pub const fn try_milliseconds(milliseconds: i64) -> Option<TimeDelta> { in try_milliseconds()
244 if milliseconds < -i64::MAX { in try_milliseconds()
259 pub const fn microseconds(microseconds: i64) -> TimeDelta { in microseconds()
272 pub const fn nanoseconds(nanos: i64) -> TimeDelta { in nanoseconds()
279 pub const fn num_weeks(&self) -> i64 { in num_weeks()
284 pub const fn num_days(&self) -> i64 { in num_days()
290 pub const fn num_hours(&self) -> i64 { in num_hours()
296 pub const fn num_minutes(&self) -> i64 { in num_minutes()
301 pub const fn num_seconds(&self) -> i64 { in num_seconds()
313 pub const fn subsec_nanos(&self) -> i32 { in subsec_nanos()
315 self.nanos - NANOS_PER_SEC in subsec_nanos()
322 pub const fn num_milliseconds(&self) -> i64 { in num_milliseconds()
324 // that the range is within the bounds of an i64, from -i64::MAX through to in num_milliseconds()
333 pub const fn num_microseconds(&self) -> Option<i64> { in num_microseconds()
341 pub const fn num_nanoseconds(&self) -> Option<i64> { in num_nanoseconds()
349 pub const fn checked_add(&self, rhs: &TimeDelta) -> Option<TimeDelta> { in checked_add()
355 nanos -= NANOS_PER_SEC; in checked_add()
363 pub const fn checked_sub(&self, rhs: &TimeDelta) -> Option<TimeDelta> { in checked_sub()
366 let mut secs = self.secs - rhs.secs; in checked_sub()
367 let mut nanos = self.nanos - rhs.nanos; in checked_sub()
370 secs -= 1; in checked_sub()
375 /// Returns the `TimeDelta` as an absolute (non-negative) value.
377 pub const fn abs(&self) -> TimeDelta { in abs()
379 TimeDelta { secs: (self.secs + 1).abs(), nanos: NANOS_PER_SEC - self.nanos } in abs()
385 /// The minimum possible `TimeDelta`: `-i64::MAX` milliseconds.
387 pub const fn min_value() -> TimeDelta { in min_value()
393 pub const fn max_value() -> TimeDelta { in max_value()
399 pub const fn zero() -> TimeDelta { in zero()
405 pub const fn is_zero(&self) -> bool { in is_zero()
413 pub const fn from_std(duration: Duration) -> Result<TimeDelta, OutOfRangeError> { in from_std()
427 /// library implementation is limited to non-negative values.
428 pub const fn to_std(&self) -> Result<Duration, OutOfRangeError> { in to_std()
436 pub(crate) const fn neg(self) -> TimeDelta { in neg()
439 nanos => (1, NANOS_PER_SEC - nanos), in neg()
441 TimeDelta { secs: -self.secs - secs_diff, nanos } in neg()
449 fn neg(self) -> TimeDelta { in neg()
452 nanos => (1, NANOS_PER_SEC - nanos), in neg()
454 TimeDelta { secs: -self.secs - secs_diff, nanos } in neg()
461 fn add(self, rhs: TimeDelta) -> TimeDelta { in add()
469 fn sub(self, rhs: TimeDelta) -> TimeDelta { in sub()
470 self.checked_sub(&rhs).expect("`TimeDelta - TimeDelta` overflowed") in sub()
483 let new = self.checked_sub(&rhs).expect("`TimeDelta - TimeDelta` overflowed"); in sub_assign()
491 fn mul(self, rhs: i32) -> TimeDelta { in mul()
503 fn div(self, rhs: i32) -> TimeDelta { in div()
505 let carry = self.secs - secs * rhs as i64; in div()
509 nanos -= NANOS_PER_SEC; in div()
514 secs -= 1; in div()
521 fn sum<I: Iterator<Item = &'a TimeDelta>>(iter: I) -> TimeDelta { in sum()
527 fn sum<I: Iterator<Item = TimeDelta>>(iter: I) -> TimeDelta { in sum()
536 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { in fmt()
539 let (abs, sign) = if self.secs < 0 { (-*self, "-") } else { (*self, "") }; in fmt()
560 figures -= 1; in fmt()
579 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { in fmt()
587 fn description(&self) -> &str { in description()
593 const fn div_mod_floor_64(this: i64, other: i64) -> (i64, i64) { in div_mod_floor_64()
599 fn arbitrary(u: &mut arbitrary::Unstructured) -> arbitrary::Result<TimeDelta> { in arbitrary()
600 const MIN_SECS: i64 = -i64::MAX / MILLIS_PER_SEC - 1; in arbitrary()
604 let nanos: i32 = u.int_in_range(0..=(NANOS_PER_SEC - 1))?; in arbitrary()
629 assert_eq!(TimeDelta::days(10) - TimeDelta::seconds(1000), TimeDelta::seconds(863_000)); in test_duration()
631 TimeDelta::days(10) - TimeDelta::seconds(1_000_000), in test_duration()
632 TimeDelta::seconds(-136_000) in test_duration()
638 assert_eq!(-TimeDelta::days(3), TimeDelta::days(-3)); in test_duration()
640 -(TimeDelta::days(3) + TimeDelta::seconds(70)), in test_duration()
641 TimeDelta::days(-4) + TimeDelta::seconds(86_400 - 70) in test_duration()
646 d -= TimeDelta::seconds(30); in test_duration()
654 assert_eq!(TimeDelta::days(-1).num_days(), -1); in test_duration_num_days()
657 assert_eq!(TimeDelta::seconds(-86_399).num_days(), 0); in test_duration_num_days()
658 assert_eq!(TimeDelta::seconds(-86_401).num_days(), -1); in test_duration_num_days()
667 assert_eq!(TimeDelta::seconds(-1).num_seconds(), -1); in test_duration_num_seconds()
670 assert_eq!(TimeDelta::milliseconds(-999).num_seconds(), 0); in test_duration_num_seconds()
671 assert_eq!(TimeDelta::milliseconds(-1001).num_seconds(), -1); in test_duration_num_seconds()
693 … let duration = TimeDelta::seconds(i64::MIN / 1_000); // Same as -i64::MAX / 1_000 due to rounding in test_duration_seconds_min_allowed()
694 … assert_eq!(duration.num_seconds(), i64::MIN / 1_000); // Same as -i64::MAX / 1_000 due to rounding in test_duration_seconds_min_allowed()
697 -i64::MAX as i128 / 1_000 * 1_000_000_000 in test_duration_seconds_min_allowed()
702 assert!(TimeDelta::try_seconds(-i64::MAX / 1_000 - 1).is_none()); in test_duration_seconds_min_underflow()
707 let _ = TimeDelta::seconds(-i64::MAX / 1_000 - 1); in test_duration_seconds_min_underflow_panic()
714 assert_eq!(TimeDelta::milliseconds(-1).num_milliseconds(), -1); in test_duration_num_milliseconds()
717 assert_eq!(TimeDelta::microseconds(-999).num_milliseconds(), 0); in test_duration_num_milliseconds()
718 assert_eq!(TimeDelta::microseconds(-1001).num_milliseconds(), -1); in test_duration_num_milliseconds()
742 // not equal to the number that can be stored in a TimeDelta - there is a in test_duration_milliseconds_min_allowed()
743 // difference of one (i64::MIN vs -i64::MAX). in test_duration_milliseconds_min_allowed()
744 let duration = TimeDelta::milliseconds(-i64::MAX); in test_duration_milliseconds_min_allowed()
745 assert_eq!(duration.num_milliseconds(), -i64::MAX); in test_duration_milliseconds_min_allowed()
748 -i64::MAX as i128 * 1_000_000 in test_duration_milliseconds_min_allowed()
755 assert!(TimeDelta::milliseconds(-i64::MAX) in test_duration_milliseconds_min_underflow()
764 // storable range is -i64::MAX, but the constructor type of i64 will allow in test_duration_milliseconds_min_underflow_panic()
766 let _ = TimeDelta::milliseconds(i64::MIN); // Same as -i64::MAX - 1 in test_duration_milliseconds_min_underflow_panic()
773 assert_eq!(TimeDelta::microseconds(-1).num_microseconds(), Some(-1)); in test_duration_num_microseconds()
776 assert_eq!(TimeDelta::nanoseconds(-999).num_microseconds(), Some(0)); in test_duration_num_microseconds()
777 assert_eq!(TimeDelta::nanoseconds(-1001).num_microseconds(), Some(-1)); in test_duration_num_microseconds()
786 TimeDelta::days(-i64::MAX / MICROS_PER_DAY).num_microseconds(), in test_duration_num_microseconds()
787 Some(-i64::MAX / MICROS_PER_DAY * MICROS_PER_DAY) in test_duration_num_microseconds()
790 assert_eq!(TimeDelta::days(-i64::MAX / MICROS_PER_DAY - 1).num_microseconds(), None); in test_duration_num_microseconds()
845 let duration = TimeDelta::milliseconds(-i64::MAX); in test_duration_microseconds_min_allowed()
849 -i64::MAX as i128 * 1_000_000 in test_duration_microseconds_min_allowed()
856 let duration = TimeDelta::microseconds(i64::MIN) - TimeDelta::microseconds(1); in test_duration_microseconds_min_underflow()
860 (i64::MIN as i128 - 1) * 1_000 in test_duration_microseconds_min_underflow()
864 assert!(TimeDelta::milliseconds(-i64::MAX) in test_duration_microseconds_min_underflow()
873 assert_eq!(TimeDelta::nanoseconds(-1).num_nanoseconds(), Some(-1)); in test_duration_num_nanoseconds()
882 TimeDelta::days(-i64::MAX / NANOS_PER_DAY).num_nanoseconds(), in test_duration_num_nanoseconds()
883 Some(-i64::MAX / NANOS_PER_DAY * NANOS_PER_DAY) in test_duration_num_nanoseconds()
886 assert_eq!(TimeDelta::days(-i64::MAX / NANOS_PER_DAY - 1).num_nanoseconds(), None); in test_duration_num_nanoseconds()
939 let duration = TimeDelta::milliseconds(-i64::MAX); in test_duration_nanoseconds_min_allowed()
943 -i64::MAX as i128 * 1_000_000 in test_duration_nanoseconds_min_allowed()
950 let duration = TimeDelta::nanoseconds(i64::MIN) - TimeDelta::nanoseconds(1); in test_duration_nanoseconds_min_underflow()
954 i64::MIN as i128 - 1 in test_duration_nanoseconds_min_underflow()
958 assert!(TimeDelta::milliseconds(-i64::MAX) in test_duration_nanoseconds_min_underflow()
978 -i64::MAX as i128 * 1_000_000 in test_min()
980 assert_eq!(MIN, TimeDelta::milliseconds(-i64::MAX)); in test_min()
981 assert_eq!(MIN.num_milliseconds(), -i64::MAX); in test_min()
990 assert!(TimeDelta::milliseconds(-1) > TimeDelta::milliseconds(-2)); in test_duration_ord()
991 assert!(TimeDelta::milliseconds(-2) < TimeDelta::milliseconds(-1)); in test_duration_ord()
992 assert!(TimeDelta::milliseconds(-1) < TimeDelta::milliseconds(1)); in test_duration_ord()
993 assert!(TimeDelta::milliseconds(1) > TimeDelta::milliseconds(-1)); in test_duration_ord()
995 assert!(TimeDelta::milliseconds(0) > TimeDelta::milliseconds(-1)); in test_duration_ord()
997 assert!(TimeDelta::milliseconds(-1_001) > TimeDelta::milliseconds(-1_002)); in test_duration_ord()
999 assert!(TimeDelta::nanoseconds(-1_234_567_890) > TimeDelta::nanoseconds(-1_234_567_891)); in test_duration_ord()
1000 assert!(TimeDelta::milliseconds(i64::MAX) > TimeDelta::milliseconds(i64::MAX - 1)); in test_duration_ord()
1001 assert!(TimeDelta::milliseconds(-i64::MAX) < TimeDelta::milliseconds(-i64::MAX + 1)); in test_duration_ord()
1011 TimeDelta::milliseconds(i64::MAX - 1).checked_add(&TimeDelta::microseconds(999)), in test_duration_checked_ops()
1012 Some(TimeDelta::milliseconds(i64::MAX - 2) + TimeDelta::microseconds(1999)) in test_duration_checked_ops()
1022 TimeDelta::milliseconds(-i64::MAX).checked_sub(&TimeDelta::milliseconds(0)), in test_duration_checked_ops()
1023 Some(TimeDelta::milliseconds(-i64::MAX)) in test_duration_checked_ops()
1026 TimeDelta::milliseconds(-i64::MAX + 1).checked_sub(&TimeDelta::microseconds(999)), in test_duration_checked_ops()
1027 Some(TimeDelta::milliseconds(-i64::MAX + 2) - TimeDelta::microseconds(1999)) in test_duration_checked_ops()
1029 assert!(TimeDelta::milliseconds(-i64::MAX) in test_duration_checked_ops()
1032 assert!(TimeDelta::milliseconds(-i64::MAX) in test_duration_checked_ops()
1043 assert_eq!(TimeDelta::milliseconds(-300).abs(), TimeDelta::milliseconds(300)); in test_duration_abs()
1044 assert_eq!(TimeDelta::milliseconds(-700).abs(), TimeDelta::milliseconds(700)); in test_duration_abs()
1045 assert_eq!(TimeDelta::milliseconds(-1000).abs(), TimeDelta::milliseconds(1000)); in test_duration_abs()
1046 assert_eq!(TimeDelta::milliseconds(-1300).abs(), TimeDelta::milliseconds(1300)); in test_duration_abs()
1047 assert_eq!(TimeDelta::milliseconds(-1700).abs(), TimeDelta::milliseconds(1700)); in test_duration_abs()
1048 assert_eq!(TimeDelta::milliseconds(-i64::MAX).abs(), TimeDelta::milliseconds(i64::MAX)); in test_duration_abs()
1059 assert_eq!(TimeDelta::nanoseconds(1) * -1_000_000_000, -TimeDelta::seconds(1)); in test_duration_mul()
1060 assert_eq!(-TimeDelta::nanoseconds(1) * 1_000_000_000, -TimeDelta::seconds(1)); in test_duration_mul()
1063 TimeDelta::seconds(10) - TimeDelta::nanoseconds(10) in test_duration_mul()
1069 assert_eq!(TimeDelta::milliseconds(1500) * -2, TimeDelta::seconds(-3)); in test_duration_mul()
1070 assert_eq!(TimeDelta::milliseconds(-1500) * 2, TimeDelta::seconds(-3)); in test_duration_mul()
1078 assert_eq!(TimeDelta::nanoseconds(123_456_789) / -1, -TimeDelta::nanoseconds(123_456_789)); in test_duration_div()
1079 assert_eq!(-TimeDelta::nanoseconds(123_456_789) / -1, TimeDelta::nanoseconds(123_456_789)); in test_duration_div()
1080 assert_eq!(-TimeDelta::nanoseconds(123_456_789) / 1, -TimeDelta::nanoseconds(123_456_789)); in test_duration_div()
1083 assert_eq!(TimeDelta::seconds(-1) / 2, TimeDelta::milliseconds(-500)); in test_duration_div()
1084 assert_eq!(TimeDelta::seconds(1) / -2, TimeDelta::milliseconds(-500)); in test_duration_div()
1085 assert_eq!(TimeDelta::seconds(-1) / -2, TimeDelta::milliseconds(500)); in test_duration_div()
1086 assert_eq!(TimeDelta::seconds(-4) / 3, TimeDelta::nanoseconds(-1_333_333_333)); in test_duration_div()
1087 assert_eq!(TimeDelta::seconds(-4) / -3, TimeDelta::nanoseconds(1_333_333_333)); in test_duration_div()
1119 assert_eq!(TimeDelta::days(-42).to_string(), "-PT3628800S"); in test_duration_fmt()
1128 assert_eq!(TimeDelta::seconds(-86_401).to_string(), "-PT86401S"); in test_duration_fmt()
1129 assert_eq!(TimeDelta::nanoseconds(-1).to_string(), "-PT0.000000001S"); in test_duration_fmt()
1146 assert_eq!(TimeDelta::seconds(-1).to_std(), Err(OutOfRangeError(()))); in test_to_std()
1147 assert_eq!(TimeDelta::milliseconds(-1).to_std(), Err(OutOfRangeError(()))); in test_to_std()
1209 #[cfg(feature = "rkyv-validation")]
1212 let bytes = rkyv::to_bytes::<_, 16>(&duration).unwrap(); in test_rkyv_validation()
1213 assert_eq!(rkyv::from_bytes::<TimeDelta>(&bytes).unwrap(), duration); in test_rkyv_validation()