use crate::value::{datetime::DateTime, duration::Duration};
pub fn millis(value: u64) -> Duration {
Duration::from_milliseconds_const(value as i64)
}
pub fn secs(value: u64) -> Duration {
Duration::from_seconds_const(value as i64)
}
pub fn at_millis(value: u64) -> DateTime {
DateTime::from_millis(value)
}
pub fn at_nanos(value: u64) -> DateTime {
DateTime::from_nanos(value)
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn the_two_datetime_factories_disagree_by_exactly_a_million() {
assert_eq!(at_millis(1), at_nanos(1_000_000));
assert_ne!(at_millis(1), at_nanos(1));
}
#[test]
fn the_duration_factories_carry_their_named_unit() {
assert_eq!(millis(1_000).milliseconds().expect("millis"), secs(1).milliseconds().expect("millis"));
assert_eq!(millis(60).milliseconds().expect("millis"), 60);
assert_eq!(secs(60).milliseconds().expect("millis"), 60_000);
}
#[test]
fn the_epoch_is_the_zero_of_both_datetime_factories() {
assert_eq!(at_millis(0), at_nanos(0));
}
}