use std::cmp::Ordering;
use std::time::{Duration as StdDuration, SystemTime};
use rstest::rstest;
use time::Weekday::*;
use time::ext::{NumericalDuration, NumericalStdDuration};
use time::macros::{date, format_description, offset, time, timestamp, utc_datetime};
use time::{
Date, Month, OffsetDateTime, SignedDuration, Time, Timestamp, UtcDateTime, UtcOffset, Weekday,
};
#[rstest]
fn unix_epoch() {
assert_eq!(Timestamp::UNIX_EPOCH.as_seconds(), 0);
assert_eq!(Timestamp::UNIX_EPOCH.as_nanoseconds(), 0);
}
#[rstest]
#[case(0, 0, timestamp!(0))]
#[case(1, 0, timestamp!(1))]
#[case(-1, 0, timestamp!(-1))]
#[case(1_546_398_245, 0, timestamp!(1_546_398_245))]
#[case(1_546_398_245, 1, timestamp!(1_546_398_245.000_000_001))]
#[case(i64::MAX, 0, None)]
#[case(i64::MIN, 0, None)]
#[case(0, 1_000_000_000, None)]
fn new(
#[case] seconds: i64,
#[case] nanoseconds: u32,
#[case] expected: impl Into