Update chrono
This commit is contained in:
parent
64c41b1073
commit
4529f383fe
9 changed files with 409 additions and 395 deletions
4
Cargo.lock
generated
4
Cargo.lock
generated
|
|
@ -69,9 +69,9 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "chrono"
|
name = "chrono"
|
||||||
version = "0.4.22"
|
version = "0.4.23"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "bfd4d1b31faaa3a89d7934dbded3111da0d2ef28e3ebccdb4f0179f5929d1ef1"
|
checksum = "16b0a3d9ed01224b22057780a37bb8c5dbfe1be8ba48678e7bf57ec4b385411f"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"iana-time-zone",
|
"iana-time-zone",
|
||||||
"js-sys",
|
"js-sys",
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@ version = "0.2.0"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
chrono = "0.4.22"
|
chrono = "0.4.23"
|
||||||
clap = { version = "4.0.18", features = ["derive"] }
|
clap = { version = "4.0.18", features = ["derive"] }
|
||||||
codespan-reporting = "0.11.1"
|
codespan-reporting = "0.11.1"
|
||||||
colored = "2.0.0"
|
colored = "2.0.0"
|
||||||
|
|
|
||||||
|
|
@ -35,8 +35,8 @@ impl CommandState<'_> {
|
||||||
assert_eq!(spec.date.month(), 2);
|
assert_eq!(spec.date.month(), 2);
|
||||||
assert_eq!(spec.date.day(), 29);
|
assert_eq!(spec.date.day(), 29);
|
||||||
|
|
||||||
let first = NaiveDate::from_ymd(year, 2, 28);
|
let first = NaiveDate::from_ymd_opt(year, 2, 28).unwrap();
|
||||||
let second = NaiveDate::from_ymd(year, 3, 1);
|
let second = NaiveDate::from_ymd_opt(year, 3, 1).unwrap();
|
||||||
self.add(self.entry_with_remind(kind, Some(Dates::new(first, second)))?);
|
self.add(self.entry_with_remind(kind, Some(Dates::new(first, second)))?);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -85,7 +85,7 @@ impl DateSpec {
|
||||||
let range_from = s
|
let range_from = s
|
||||||
.command
|
.command
|
||||||
.last_done_root()
|
.last_done_root()
|
||||||
.map(|date| date.succ())
|
.map(|date| date.succ_opt().unwrap())
|
||||||
.unwrap_or(self.start);
|
.unwrap_or(self.start);
|
||||||
let range = s
|
let range = s
|
||||||
.range_with_remind()
|
.range_with_remind()
|
||||||
|
|
|
||||||
|
|
@ -89,7 +89,10 @@ impl Var {
|
||||||
date,
|
date,
|
||||||
msg: e,
|
msg: e,
|
||||||
})?;
|
})?;
|
||||||
NaiveDate::from_ymd(e.year, e.month, e.day).ordinal().into()
|
NaiveDate::from_ymd_opt(e.year, e.month, e.day)
|
||||||
|
.unwrap()
|
||||||
|
.ordinal()
|
||||||
|
.into()
|
||||||
}
|
}
|
||||||
Self::IsWeekday => {
|
Self::IsWeekday => {
|
||||||
let wd: Weekday = date.weekday().into();
|
let wd: Weekday = date.weekday().into();
|
||||||
|
|
@ -332,7 +335,7 @@ impl FormulaSpec {
|
||||||
|
|
||||||
if let EvalCommand::Task(_) = s.command {
|
if let EvalCommand::Task(_) = s.command {
|
||||||
if let Some(last_done_root) = s.command.last_done_root() {
|
if let Some(last_done_root) = s.command.last_done_root() {
|
||||||
range = range.with_from(last_done_root.succ())?;
|
range = range.with_from(last_done_root.succ_opt().unwrap())?;
|
||||||
} else if let Some(from) = s.from {
|
} else if let Some(from) = s.from {
|
||||||
range = range.with_from(from)?;
|
range = range.with_from(from)?;
|
||||||
} else if matches!(s.command, EvalCommand::Task(_)) {
|
} else if matches!(s.command, EvalCommand::Task(_)) {
|
||||||
|
|
@ -395,12 +398,22 @@ mod tests {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn expr_ymd(e: &Expr, ymd: (i32, u32, u32), target: i64) {
|
||||||
|
let (y, m, d) = ymd;
|
||||||
|
expr(e, NaiveDate::from_ymd_opt(y, m, d).unwrap(), target);
|
||||||
|
}
|
||||||
|
|
||||||
|
fn expr_yo(e: &Expr, yo: (i32, u32), target: i64) {
|
||||||
|
let (y, o) = yo;
|
||||||
|
expr(e, NaiveDate::from_yo_opt(y, o).unwrap(), target);
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn julian_day() {
|
fn julian_day() {
|
||||||
let e = Expr::Var(Var::JulianDay);
|
let e = Expr::Var(Var::JulianDay);
|
||||||
|
|
||||||
for delta in -1000..1000 {
|
for delta in -1000..1000 {
|
||||||
let d1 = NaiveDate::from_ymd(2021, 12, 19);
|
let d1 = NaiveDate::from_ymd_opt(2021, 12, 19).unwrap();
|
||||||
let d2 = d1 + Duration::days(delta);
|
let d2 = d1 + Duration::days(delta);
|
||||||
assert_eq!(e.eval((), d2).unwrap() - e.eval((), d1).unwrap(), delta);
|
assert_eq!(e.eval((), d2).unwrap() - e.eval((), d1).unwrap(), delta);
|
||||||
}
|
}
|
||||||
|
|
@ -411,21 +424,21 @@ mod tests {
|
||||||
let e = Expr::Var(Var::Year);
|
let e = Expr::Var(Var::Year);
|
||||||
|
|
||||||
for y in -3000..=3000 {
|
for y in -3000..=3000 {
|
||||||
expr(&e, NaiveDate::from_ymd(y, 2, 19), y.into());
|
expr_ymd(&e, (y, 2, 19), y.into());
|
||||||
}
|
}
|
||||||
|
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 1, 1), 2021);
|
expr_ymd(&e, (2021, 1, 1), 2021);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 31), 2021);
|
expr_ymd(&e, (2021, 12, 31), 2021);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn year_length() {
|
fn year_length() {
|
||||||
let e = Expr::Var(Var::YearLength);
|
let e = Expr::Var(Var::YearLength);
|
||||||
|
|
||||||
expr(&e, NaiveDate::from_ymd(2000, 12, 19), 366);
|
expr_ymd(&e, (2000, 12, 19), 366);
|
||||||
expr(&e, NaiveDate::from_ymd(2019, 12, 19), 365);
|
expr_ymd(&e, (2019, 12, 19), 365);
|
||||||
expr(&e, NaiveDate::from_ymd(2020, 12, 19), 366);
|
expr_ymd(&e, (2020, 12, 19), 366);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 19), 365);
|
expr_ymd(&e, (2021, 12, 19), 365);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
|
@ -433,11 +446,11 @@ mod tests {
|
||||||
let e = Expr::Var(Var::YearDay);
|
let e = Expr::Var(Var::YearDay);
|
||||||
|
|
||||||
for i in 1..=365 {
|
for i in 1..=365 {
|
||||||
expr(&e, NaiveDate::from_yo(2020, i), i.into());
|
expr_yo(&e, (2020, i), i.into());
|
||||||
expr(&e, NaiveDate::from_yo(2021, i), i.into());
|
expr_yo(&e, (2021, i), i.into());
|
||||||
}
|
}
|
||||||
|
|
||||||
expr(&e, NaiveDate::from_yo(2020, 366), 366);
|
expr_yo(&e, (2020, 366), 366);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
|
@ -445,14 +458,14 @@ mod tests {
|
||||||
let e = Expr::Var(Var::YearDayReverse);
|
let e = Expr::Var(Var::YearDayReverse);
|
||||||
|
|
||||||
for i in 1..=365 {
|
for i in 1..=365 {
|
||||||
expr(&e, NaiveDate::from_yo(2020, i), (366 - i + 1).into());
|
expr_yo(&e, (2020, i), (366 - i + 1).into());
|
||||||
expr(&e, NaiveDate::from_yo(2021, i), (365 - i + 1).into());
|
expr_yo(&e, (2021, i), (365 - i + 1).into());
|
||||||
}
|
}
|
||||||
|
|
||||||
expr(&e, NaiveDate::from_ymd(2020, 1, 1), 366);
|
expr_ymd(&e, (2020, 1, 1), 366);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 1, 1), 365);
|
expr_ymd(&e, (2021, 1, 1), 365);
|
||||||
expr(&e, NaiveDate::from_ymd(2020, 12, 31), 1);
|
expr_ymd(&e, (2020, 12, 31), 1);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 31), 1);
|
expr_ymd(&e, (2021, 12, 31), 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
|
@ -460,32 +473,32 @@ mod tests {
|
||||||
let e = Expr::Var(Var::YearWeek);
|
let e = Expr::Var(Var::YearWeek);
|
||||||
|
|
||||||
for y in 1000..3000 {
|
for y in 1000..3000 {
|
||||||
expr(&e, NaiveDate::from_ymd(y, 1, 1), 1);
|
expr_ymd(&e, (y, 1, 1), 1);
|
||||||
expr(&e, NaiveDate::from_ymd(y, 1, 2), 1);
|
expr_ymd(&e, (y, 1, 2), 1);
|
||||||
expr(&e, NaiveDate::from_ymd(y, 1, 3), 1);
|
expr_ymd(&e, (y, 1, 3), 1);
|
||||||
expr(&e, NaiveDate::from_ymd(y, 1, 4), 1);
|
expr_ymd(&e, (y, 1, 4), 1);
|
||||||
expr(&e, NaiveDate::from_ymd(y, 1, 5), 1);
|
expr_ymd(&e, (y, 1, 5), 1);
|
||||||
expr(&e, NaiveDate::from_ymd(y, 1, 6), 1);
|
expr_ymd(&e, (y, 1, 6), 1);
|
||||||
expr(&e, NaiveDate::from_ymd(y, 1, 7), 1);
|
expr_ymd(&e, (y, 1, 7), 1);
|
||||||
expr(&e, NaiveDate::from_ymd(y, 1, 8), 2);
|
expr_ymd(&e, (y, 1, 8), 2);
|
||||||
expr(&e, NaiveDate::from_ymd(y, 1, 9), 2);
|
expr_ymd(&e, (y, 1, 9), 2);
|
||||||
expr(&e, NaiveDate::from_ymd(y, 1, 10), 2);
|
expr_ymd(&e, (y, 1, 10), 2);
|
||||||
expr(&e, NaiveDate::from_ymd(y, 1, 11), 2);
|
expr_ymd(&e, (y, 1, 11), 2);
|
||||||
expr(&e, NaiveDate::from_ymd(y, 1, 12), 2);
|
expr_ymd(&e, (y, 1, 12), 2);
|
||||||
expr(&e, NaiveDate::from_ymd(y, 1, 13), 2);
|
expr_ymd(&e, (y, 1, 13), 2);
|
||||||
expr(&e, NaiveDate::from_ymd(y, 1, 14), 2);
|
expr_ymd(&e, (y, 1, 14), 2);
|
||||||
expr(&e, NaiveDate::from_ymd(y, 1, 15), 3);
|
expr_ymd(&e, (y, 1, 15), 3);
|
||||||
}
|
}
|
||||||
|
|
||||||
expr(&e, NaiveDate::from_ymd(2020, 12, 28), 52);
|
expr_ymd(&e, (2020, 12, 28), 52);
|
||||||
expr(&e, NaiveDate::from_ymd(2020, 12, 29), 52);
|
expr_ymd(&e, (2020, 12, 29), 52);
|
||||||
expr(&e, NaiveDate::from_ymd(2020, 12, 30), 53);
|
expr_ymd(&e, (2020, 12, 30), 53);
|
||||||
expr(&e, NaiveDate::from_ymd(2020, 12, 31), 53);
|
expr_ymd(&e, (2020, 12, 31), 53);
|
||||||
|
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 28), 52);
|
expr_ymd(&e, (2021, 12, 28), 52);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 29), 52);
|
expr_ymd(&e, (2021, 12, 29), 52);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 30), 52);
|
expr_ymd(&e, (2021, 12, 30), 52);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 31), 53);
|
expr_ymd(&e, (2021, 12, 31), 53);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
|
@ -493,32 +506,32 @@ mod tests {
|
||||||
let e = Expr::Var(Var::YearWeekReverse);
|
let e = Expr::Var(Var::YearWeekReverse);
|
||||||
|
|
||||||
for y in 1000..3000 {
|
for y in 1000..3000 {
|
||||||
expr(&e, NaiveDate::from_ymd(y, 12, 31), 1);
|
expr_ymd(&e, (y, 12, 31), 1);
|
||||||
expr(&e, NaiveDate::from_ymd(y, 12, 30), 1);
|
expr_ymd(&e, (y, 12, 30), 1);
|
||||||
expr(&e, NaiveDate::from_ymd(y, 12, 29), 1);
|
expr_ymd(&e, (y, 12, 29), 1);
|
||||||
expr(&e, NaiveDate::from_ymd(y, 12, 28), 1);
|
expr_ymd(&e, (y, 12, 28), 1);
|
||||||
expr(&e, NaiveDate::from_ymd(y, 12, 27), 1);
|
expr_ymd(&e, (y, 12, 27), 1);
|
||||||
expr(&e, NaiveDate::from_ymd(y, 12, 26), 1);
|
expr_ymd(&e, (y, 12, 26), 1);
|
||||||
expr(&e, NaiveDate::from_ymd(y, 12, 25), 1);
|
expr_ymd(&e, (y, 12, 25), 1);
|
||||||
expr(&e, NaiveDate::from_ymd(y, 12, 24), 2);
|
expr_ymd(&e, (y, 12, 24), 2);
|
||||||
expr(&e, NaiveDate::from_ymd(y, 12, 23), 2);
|
expr_ymd(&e, (y, 12, 23), 2);
|
||||||
expr(&e, NaiveDate::from_ymd(y, 12, 22), 2);
|
expr_ymd(&e, (y, 12, 22), 2);
|
||||||
expr(&e, NaiveDate::from_ymd(y, 12, 21), 2);
|
expr_ymd(&e, (y, 12, 21), 2);
|
||||||
expr(&e, NaiveDate::from_ymd(y, 12, 20), 2);
|
expr_ymd(&e, (y, 12, 20), 2);
|
||||||
expr(&e, NaiveDate::from_ymd(y, 12, 19), 2);
|
expr_ymd(&e, (y, 12, 19), 2);
|
||||||
expr(&e, NaiveDate::from_ymd(y, 12, 18), 2);
|
expr_ymd(&e, (y, 12, 18), 2);
|
||||||
expr(&e, NaiveDate::from_ymd(y, 12, 17), 3);
|
expr_ymd(&e, (y, 12, 17), 3);
|
||||||
}
|
}
|
||||||
|
|
||||||
expr(&e, NaiveDate::from_ymd(2020, 1, 1), 53);
|
expr_ymd(&e, (2020, 1, 1), 53);
|
||||||
expr(&e, NaiveDate::from_ymd(2020, 1, 2), 53);
|
expr_ymd(&e, (2020, 1, 2), 53);
|
||||||
expr(&e, NaiveDate::from_ymd(2020, 1, 3), 52);
|
expr_ymd(&e, (2020, 1, 3), 52);
|
||||||
expr(&e, NaiveDate::from_ymd(2020, 1, 4), 52);
|
expr_ymd(&e, (2020, 1, 4), 52);
|
||||||
|
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 1, 1), 53);
|
expr_ymd(&e, (2021, 1, 1), 53);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 1, 2), 52);
|
expr_ymd(&e, (2021, 1, 2), 52);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 1, 3), 52);
|
expr_ymd(&e, (2021, 1, 3), 52);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 1, 4), 52);
|
expr_ymd(&e, (2021, 1, 4), 52);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
|
@ -526,7 +539,7 @@ mod tests {
|
||||||
let e = Expr::Var(Var::Month);
|
let e = Expr::Var(Var::Month);
|
||||||
for y in -1000..=3000 {
|
for y in -1000..=3000 {
|
||||||
for m in 1..=12 {
|
for m in 1..=12 {
|
||||||
expr(&e, NaiveDate::from_ymd(y, m, 13), m.into());
|
expr_ymd(&e, (y, m, 13), m.into());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -535,96 +548,96 @@ mod tests {
|
||||||
fn month_length() {
|
fn month_length() {
|
||||||
let e = Expr::Var(Var::MonthLength);
|
let e = Expr::Var(Var::MonthLength);
|
||||||
|
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 1, 5), 31);
|
expr_ymd(&e, (2021, 1, 5), 31);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 2, 5), 28);
|
expr_ymd(&e, (2021, 2, 5), 28);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 3, 5), 31);
|
expr_ymd(&e, (2021, 3, 5), 31);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 4, 5), 30);
|
expr_ymd(&e, (2021, 4, 5), 30);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 5, 5), 31);
|
expr_ymd(&e, (2021, 5, 5), 31);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 6, 5), 30);
|
expr_ymd(&e, (2021, 6, 5), 30);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 7, 5), 31);
|
expr_ymd(&e, (2021, 7, 5), 31);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 8, 5), 31);
|
expr_ymd(&e, (2021, 8, 5), 31);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 9, 5), 30);
|
expr_ymd(&e, (2021, 9, 5), 30);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 10, 5), 31);
|
expr_ymd(&e, (2021, 10, 5), 31);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 11, 5), 30);
|
expr_ymd(&e, (2021, 11, 5), 30);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 5), 31);
|
expr_ymd(&e, (2021, 12, 5), 31);
|
||||||
|
|
||||||
expr(&e, NaiveDate::from_ymd(2020, 2, 5), 29);
|
expr_ymd(&e, (2020, 2, 5), 29);
|
||||||
expr(&e, NaiveDate::from_ymd(2019, 2, 5), 28);
|
expr_ymd(&e, (2019, 2, 5), 28);
|
||||||
expr(&e, NaiveDate::from_ymd(2000, 2, 5), 29);
|
expr_ymd(&e, (2000, 2, 5), 29);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn month_week() {
|
fn month_week() {
|
||||||
let e = Expr::Var(Var::MonthWeek);
|
let e = Expr::Var(Var::MonthWeek);
|
||||||
|
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 1), 1);
|
expr_ymd(&e, (2021, 12, 1), 1);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 2), 1);
|
expr_ymd(&e, (2021, 12, 2), 1);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 3), 1);
|
expr_ymd(&e, (2021, 12, 3), 1);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 4), 1);
|
expr_ymd(&e, (2021, 12, 4), 1);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 5), 1);
|
expr_ymd(&e, (2021, 12, 5), 1);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 6), 1);
|
expr_ymd(&e, (2021, 12, 6), 1);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 7), 1);
|
expr_ymd(&e, (2021, 12, 7), 1);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 8), 2);
|
expr_ymd(&e, (2021, 12, 8), 2);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 9), 2);
|
expr_ymd(&e, (2021, 12, 9), 2);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 10), 2);
|
expr_ymd(&e, (2021, 12, 10), 2);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 11), 2);
|
expr_ymd(&e, (2021, 12, 11), 2);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 12), 2);
|
expr_ymd(&e, (2021, 12, 12), 2);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 13), 2);
|
expr_ymd(&e, (2021, 12, 13), 2);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 14), 2);
|
expr_ymd(&e, (2021, 12, 14), 2);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 15), 3);
|
expr_ymd(&e, (2021, 12, 15), 3);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 16), 3);
|
expr_ymd(&e, (2021, 12, 16), 3);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 17), 3);
|
expr_ymd(&e, (2021, 12, 17), 3);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 18), 3);
|
expr_ymd(&e, (2021, 12, 18), 3);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 19), 3);
|
expr_ymd(&e, (2021, 12, 19), 3);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 20), 3);
|
expr_ymd(&e, (2021, 12, 20), 3);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 21), 3);
|
expr_ymd(&e, (2021, 12, 21), 3);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 22), 4);
|
expr_ymd(&e, (2021, 12, 22), 4);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 23), 4);
|
expr_ymd(&e, (2021, 12, 23), 4);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 24), 4);
|
expr_ymd(&e, (2021, 12, 24), 4);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 25), 4);
|
expr_ymd(&e, (2021, 12, 25), 4);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 26), 4);
|
expr_ymd(&e, (2021, 12, 26), 4);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 27), 4);
|
expr_ymd(&e, (2021, 12, 27), 4);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 28), 4);
|
expr_ymd(&e, (2021, 12, 28), 4);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 29), 5);
|
expr_ymd(&e, (2021, 12, 29), 5);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 30), 5);
|
expr_ymd(&e, (2021, 12, 30), 5);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 31), 5);
|
expr_ymd(&e, (2021, 12, 31), 5);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn month_week_reverse() {
|
fn month_week_reverse() {
|
||||||
let e = Expr::Var(Var::MonthWeekReverse);
|
let e = Expr::Var(Var::MonthWeekReverse);
|
||||||
|
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 1), 5);
|
expr_ymd(&e, (2021, 12, 1), 5);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 2), 5);
|
expr_ymd(&e, (2021, 12, 2), 5);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 3), 5);
|
expr_ymd(&e, (2021, 12, 3), 5);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 4), 4);
|
expr_ymd(&e, (2021, 12, 4), 4);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 5), 4);
|
expr_ymd(&e, (2021, 12, 5), 4);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 6), 4);
|
expr_ymd(&e, (2021, 12, 6), 4);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 7), 4);
|
expr_ymd(&e, (2021, 12, 7), 4);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 8), 4);
|
expr_ymd(&e, (2021, 12, 8), 4);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 9), 4);
|
expr_ymd(&e, (2021, 12, 9), 4);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 10), 4);
|
expr_ymd(&e, (2021, 12, 10), 4);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 11), 3);
|
expr_ymd(&e, (2021, 12, 11), 3);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 12), 3);
|
expr_ymd(&e, (2021, 12, 12), 3);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 13), 3);
|
expr_ymd(&e, (2021, 12, 13), 3);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 14), 3);
|
expr_ymd(&e, (2021, 12, 14), 3);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 15), 3);
|
expr_ymd(&e, (2021, 12, 15), 3);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 16), 3);
|
expr_ymd(&e, (2021, 12, 16), 3);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 17), 3);
|
expr_ymd(&e, (2021, 12, 17), 3);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 18), 2);
|
expr_ymd(&e, (2021, 12, 18), 2);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 19), 2);
|
expr_ymd(&e, (2021, 12, 19), 2);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 20), 2);
|
expr_ymd(&e, (2021, 12, 20), 2);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 21), 2);
|
expr_ymd(&e, (2021, 12, 21), 2);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 22), 2);
|
expr_ymd(&e, (2021, 12, 22), 2);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 23), 2);
|
expr_ymd(&e, (2021, 12, 23), 2);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 24), 2);
|
expr_ymd(&e, (2021, 12, 24), 2);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 25), 1);
|
expr_ymd(&e, (2021, 12, 25), 1);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 26), 1);
|
expr_ymd(&e, (2021, 12, 26), 1);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 27), 1);
|
expr_ymd(&e, (2021, 12, 27), 1);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 28), 1);
|
expr_ymd(&e, (2021, 12, 28), 1);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 29), 1);
|
expr_ymd(&e, (2021, 12, 29), 1);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 30), 1);
|
expr_ymd(&e, (2021, 12, 30), 1);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 31), 1);
|
expr_ymd(&e, (2021, 12, 31), 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
|
@ -632,78 +645,78 @@ mod tests {
|
||||||
let e = Expr::Var(Var::Day);
|
let e = Expr::Var(Var::Day);
|
||||||
|
|
||||||
for d in 1..=31 {
|
for d in 1..=31 {
|
||||||
expr(&e, NaiveDate::from_ymd(2020, 1, d), d.into());
|
expr_ymd(&e, (2020, 1, d), d.into());
|
||||||
expr(&e, NaiveDate::from_ymd(2020, 3, d), d.into());
|
expr_ymd(&e, (2020, 3, d), d.into());
|
||||||
expr(&e, NaiveDate::from_ymd(2020, 5, d), d.into());
|
expr_ymd(&e, (2020, 5, d), d.into());
|
||||||
expr(&e, NaiveDate::from_ymd(2020, 7, d), d.into());
|
expr_ymd(&e, (2020, 7, d), d.into());
|
||||||
expr(&e, NaiveDate::from_ymd(2020, 8, d), d.into());
|
expr_ymd(&e, (2020, 8, d), d.into());
|
||||||
expr(&e, NaiveDate::from_ymd(2020, 10, d), d.into());
|
expr_ymd(&e, (2020, 10, d), d.into());
|
||||||
expr(&e, NaiveDate::from_ymd(2020, 12, d), d.into());
|
expr_ymd(&e, (2020, 12, d), d.into());
|
||||||
|
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 1, d), d.into());
|
expr_ymd(&e, (2021, 1, d), d.into());
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 3, d), d.into());
|
expr_ymd(&e, (2021, 3, d), d.into());
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 5, d), d.into());
|
expr_ymd(&e, (2021, 5, d), d.into());
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 7, d), d.into());
|
expr_ymd(&e, (2021, 7, d), d.into());
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 8, d), d.into());
|
expr_ymd(&e, (2021, 8, d), d.into());
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 10, d), d.into());
|
expr_ymd(&e, (2021, 10, d), d.into());
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, d), d.into());
|
expr_ymd(&e, (2021, 12, d), d.into());
|
||||||
}
|
}
|
||||||
|
|
||||||
for d in 1..=30 {
|
for d in 1..=30 {
|
||||||
expr(&e, NaiveDate::from_ymd(2020, 4, d), d.into());
|
expr_ymd(&e, (2020, 4, d), d.into());
|
||||||
expr(&e, NaiveDate::from_ymd(2020, 6, d), d.into());
|
expr_ymd(&e, (2020, 6, d), d.into());
|
||||||
expr(&e, NaiveDate::from_ymd(2020, 9, d), d.into());
|
expr_ymd(&e, (2020, 9, d), d.into());
|
||||||
expr(&e, NaiveDate::from_ymd(2020, 11, d), d.into());
|
expr_ymd(&e, (2020, 11, d), d.into());
|
||||||
|
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 4, d), d.into());
|
expr_ymd(&e, (2021, 4, d), d.into());
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 6, d), d.into());
|
expr_ymd(&e, (2021, 6, d), d.into());
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 9, d), d.into());
|
expr_ymd(&e, (2021, 9, d), d.into());
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 11, d), d.into());
|
expr_ymd(&e, (2021, 11, d), d.into());
|
||||||
}
|
}
|
||||||
|
|
||||||
for d in 1..=28 {
|
for d in 1..=28 {
|
||||||
expr(&e, NaiveDate::from_ymd(2020, 2, d), d.into());
|
expr_ymd(&e, (2020, 2, d), d.into());
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 2, d), d.into());
|
expr_ymd(&e, (2021, 2, d), d.into());
|
||||||
}
|
}
|
||||||
|
|
||||||
expr(&e, NaiveDate::from_ymd(2020, 2, 29), 29);
|
expr_ymd(&e, (2020, 2, 29), 29);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn day_reverse() {
|
fn day_reverse() {
|
||||||
let e = Expr::Var(Var::DayReverse);
|
let e = Expr::Var(Var::DayReverse);
|
||||||
|
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 1), 31);
|
expr_ymd(&e, (2021, 12, 1), 31);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 2), 30);
|
expr_ymd(&e, (2021, 12, 2), 30);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 3), 29);
|
expr_ymd(&e, (2021, 12, 3), 29);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 4), 28);
|
expr_ymd(&e, (2021, 12, 4), 28);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 5), 27);
|
expr_ymd(&e, (2021, 12, 5), 27);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 6), 26);
|
expr_ymd(&e, (2021, 12, 6), 26);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 7), 25);
|
expr_ymd(&e, (2021, 12, 7), 25);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 8), 24);
|
expr_ymd(&e, (2021, 12, 8), 24);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 9), 23);
|
expr_ymd(&e, (2021, 12, 9), 23);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 10), 22);
|
expr_ymd(&e, (2021, 12, 10), 22);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 11), 21);
|
expr_ymd(&e, (2021, 12, 11), 21);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 12), 20);
|
expr_ymd(&e, (2021, 12, 12), 20);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 13), 19);
|
expr_ymd(&e, (2021, 12, 13), 19);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 14), 18);
|
expr_ymd(&e, (2021, 12, 14), 18);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 15), 17);
|
expr_ymd(&e, (2021, 12, 15), 17);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 16), 16);
|
expr_ymd(&e, (2021, 12, 16), 16);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 17), 15);
|
expr_ymd(&e, (2021, 12, 17), 15);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 18), 14);
|
expr_ymd(&e, (2021, 12, 18), 14);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 19), 13);
|
expr_ymd(&e, (2021, 12, 19), 13);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 20), 12);
|
expr_ymd(&e, (2021, 12, 20), 12);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 21), 11);
|
expr_ymd(&e, (2021, 12, 21), 11);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 22), 10);
|
expr_ymd(&e, (2021, 12, 22), 10);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 23), 9);
|
expr_ymd(&e, (2021, 12, 23), 9);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 24), 8);
|
expr_ymd(&e, (2021, 12, 24), 8);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 25), 7);
|
expr_ymd(&e, (2021, 12, 25), 7);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 26), 6);
|
expr_ymd(&e, (2021, 12, 26), 6);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 27), 5);
|
expr_ymd(&e, (2021, 12, 27), 5);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 28), 4);
|
expr_ymd(&e, (2021, 12, 28), 4);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 29), 3);
|
expr_ymd(&e, (2021, 12, 29), 3);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 30), 2);
|
expr_ymd(&e, (2021, 12, 30), 2);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 31), 1);
|
expr_ymd(&e, (2021, 12, 31), 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
|
@ -712,32 +725,32 @@ mod tests {
|
||||||
|
|
||||||
// From https://en.wikipedia.org/wiki/ISO_week_date
|
// From https://en.wikipedia.org/wiki/ISO_week_date
|
||||||
|
|
||||||
expr(&e, NaiveDate::from_ymd(1977, 1, 1), 1976);
|
expr_ymd(&e, (1977, 1, 1), 1976);
|
||||||
expr(&e, NaiveDate::from_ymd(1977, 1, 2), 1976);
|
expr_ymd(&e, (1977, 1, 2), 1976);
|
||||||
expr(&e, NaiveDate::from_ymd(1977, 1, 3), 1977);
|
expr_ymd(&e, (1977, 1, 3), 1977);
|
||||||
|
|
||||||
expr(&e, NaiveDate::from_ymd(1977, 12, 31), 1977);
|
expr_ymd(&e, (1977, 12, 31), 1977);
|
||||||
expr(&e, NaiveDate::from_ymd(1978, 1, 1), 1977);
|
expr_ymd(&e, (1978, 1, 1), 1977);
|
||||||
expr(&e, NaiveDate::from_ymd(1978, 1, 2), 1978);
|
expr_ymd(&e, (1978, 1, 2), 1978);
|
||||||
|
|
||||||
expr(&e, NaiveDate::from_ymd(1978, 12, 31), 1978);
|
expr_ymd(&e, (1978, 12, 31), 1978);
|
||||||
expr(&e, NaiveDate::from_ymd(1979, 1, 1), 1979);
|
expr_ymd(&e, (1979, 1, 1), 1979);
|
||||||
|
|
||||||
expr(&e, NaiveDate::from_ymd(1979, 12, 30), 1979);
|
expr_ymd(&e, (1979, 12, 30), 1979);
|
||||||
expr(&e, NaiveDate::from_ymd(1979, 12, 31), 1980);
|
expr_ymd(&e, (1979, 12, 31), 1980);
|
||||||
expr(&e, NaiveDate::from_ymd(1980, 1, 1), 1980);
|
expr_ymd(&e, (1980, 1, 1), 1980);
|
||||||
|
|
||||||
expr(&e, NaiveDate::from_ymd(1980, 12, 28), 1980);
|
expr_ymd(&e, (1980, 12, 28), 1980);
|
||||||
expr(&e, NaiveDate::from_ymd(1980, 12, 29), 1981);
|
expr_ymd(&e, (1980, 12, 29), 1981);
|
||||||
expr(&e, NaiveDate::from_ymd(1980, 12, 30), 1981);
|
expr_ymd(&e, (1980, 12, 30), 1981);
|
||||||
expr(&e, NaiveDate::from_ymd(1980, 12, 31), 1981);
|
expr_ymd(&e, (1980, 12, 31), 1981);
|
||||||
expr(&e, NaiveDate::from_ymd(1981, 1, 1), 1981);
|
expr_ymd(&e, (1981, 1, 1), 1981);
|
||||||
|
|
||||||
expr(&e, NaiveDate::from_ymd(1981, 12, 31), 1981);
|
expr_ymd(&e, (1981, 12, 31), 1981);
|
||||||
expr(&e, NaiveDate::from_ymd(1982, 1, 1), 1981);
|
expr_ymd(&e, (1982, 1, 1), 1981);
|
||||||
expr(&e, NaiveDate::from_ymd(1982, 1, 2), 1981);
|
expr_ymd(&e, (1982, 1, 2), 1981);
|
||||||
expr(&e, NaiveDate::from_ymd(1982, 1, 3), 1981);
|
expr_ymd(&e, (1982, 1, 3), 1981);
|
||||||
expr(&e, NaiveDate::from_ymd(1982, 1, 4), 1982);
|
expr_ymd(&e, (1982, 1, 4), 1982);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
|
@ -745,37 +758,37 @@ mod tests {
|
||||||
let e = Expr::Var(Var::IsoYearLength);
|
let e = Expr::Var(Var::IsoYearLength);
|
||||||
|
|
||||||
// August 1st is definitely in the same year in both systems
|
// August 1st is definitely in the same year in both systems
|
||||||
expr(&e, NaiveDate::from_ymd(2000, 8, 1), 52 * 7);
|
expr_ymd(&e, (2000, 8, 1), 52 * 7);
|
||||||
expr(&e, NaiveDate::from_ymd(2001, 8, 1), 52 * 7);
|
expr_ymd(&e, (2001, 8, 1), 52 * 7);
|
||||||
expr(&e, NaiveDate::from_ymd(2002, 8, 1), 52 * 7);
|
expr_ymd(&e, (2002, 8, 1), 52 * 7);
|
||||||
expr(&e, NaiveDate::from_ymd(2003, 8, 1), 52 * 7);
|
expr_ymd(&e, (2003, 8, 1), 52 * 7);
|
||||||
expr(&e, NaiveDate::from_ymd(2004, 8, 1), 52 * 7 + 7);
|
expr_ymd(&e, (2004, 8, 1), 52 * 7 + 7);
|
||||||
expr(&e, NaiveDate::from_ymd(2005, 8, 1), 52 * 7);
|
expr_ymd(&e, (2005, 8, 1), 52 * 7);
|
||||||
expr(&e, NaiveDate::from_ymd(2006, 8, 1), 52 * 7);
|
expr_ymd(&e, (2006, 8, 1), 52 * 7);
|
||||||
expr(&e, NaiveDate::from_ymd(2007, 8, 1), 52 * 7);
|
expr_ymd(&e, (2007, 8, 1), 52 * 7);
|
||||||
expr(&e, NaiveDate::from_ymd(2008, 8, 1), 52 * 7);
|
expr_ymd(&e, (2008, 8, 1), 52 * 7);
|
||||||
expr(&e, NaiveDate::from_ymd(2009, 8, 1), 52 * 7 + 7);
|
expr_ymd(&e, (2009, 8, 1), 52 * 7 + 7);
|
||||||
expr(&e, NaiveDate::from_ymd(2010, 8, 1), 52 * 7);
|
expr_ymd(&e, (2010, 8, 1), 52 * 7);
|
||||||
expr(&e, NaiveDate::from_ymd(2011, 8, 1), 52 * 7);
|
expr_ymd(&e, (2011, 8, 1), 52 * 7);
|
||||||
expr(&e, NaiveDate::from_ymd(2012, 8, 1), 52 * 7);
|
expr_ymd(&e, (2012, 8, 1), 52 * 7);
|
||||||
expr(&e, NaiveDate::from_ymd(2013, 8, 1), 52 * 7);
|
expr_ymd(&e, (2013, 8, 1), 52 * 7);
|
||||||
expr(&e, NaiveDate::from_ymd(2014, 8, 1), 52 * 7);
|
expr_ymd(&e, (2014, 8, 1), 52 * 7);
|
||||||
expr(&e, NaiveDate::from_ymd(2015, 8, 1), 52 * 7 + 7);
|
expr_ymd(&e, (2015, 8, 1), 52 * 7 + 7);
|
||||||
expr(&e, NaiveDate::from_ymd(2016, 8, 1), 52 * 7);
|
expr_ymd(&e, (2016, 8, 1), 52 * 7);
|
||||||
expr(&e, NaiveDate::from_ymd(2017, 8, 1), 52 * 7);
|
expr_ymd(&e, (2017, 8, 1), 52 * 7);
|
||||||
expr(&e, NaiveDate::from_ymd(2018, 8, 1), 52 * 7);
|
expr_ymd(&e, (2018, 8, 1), 52 * 7);
|
||||||
expr(&e, NaiveDate::from_ymd(2019, 8, 1), 52 * 7);
|
expr_ymd(&e, (2019, 8, 1), 52 * 7);
|
||||||
expr(&e, NaiveDate::from_ymd(2020, 8, 1), 52 * 7 + 7);
|
expr_ymd(&e, (2020, 8, 1), 52 * 7 + 7);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 8, 1), 52 * 7);
|
expr_ymd(&e, (2021, 8, 1), 52 * 7);
|
||||||
expr(&e, NaiveDate::from_ymd(2022, 8, 1), 52 * 7);
|
expr_ymd(&e, (2022, 8, 1), 52 * 7);
|
||||||
expr(&e, NaiveDate::from_ymd(2023, 8, 1), 52 * 7);
|
expr_ymd(&e, (2023, 8, 1), 52 * 7);
|
||||||
expr(&e, NaiveDate::from_ymd(2024, 8, 1), 52 * 7);
|
expr_ymd(&e, (2024, 8, 1), 52 * 7);
|
||||||
expr(&e, NaiveDate::from_ymd(2025, 8, 1), 52 * 7);
|
expr_ymd(&e, (2025, 8, 1), 52 * 7);
|
||||||
expr(&e, NaiveDate::from_ymd(2026, 8, 1), 52 * 7 + 7);
|
expr_ymd(&e, (2026, 8, 1), 52 * 7 + 7);
|
||||||
expr(&e, NaiveDate::from_ymd(2027, 8, 1), 52 * 7);
|
expr_ymd(&e, (2027, 8, 1), 52 * 7);
|
||||||
expr(&e, NaiveDate::from_ymd(2028, 8, 1), 52 * 7);
|
expr_ymd(&e, (2028, 8, 1), 52 * 7);
|
||||||
expr(&e, NaiveDate::from_ymd(2029, 8, 1), 52 * 7);
|
expr_ymd(&e, (2029, 8, 1), 52 * 7);
|
||||||
expr(&e, NaiveDate::from_ymd(2030, 8, 1), 52 * 7);
|
expr_ymd(&e, (2030, 8, 1), 52 * 7);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
|
@ -784,52 +797,52 @@ mod tests {
|
||||||
|
|
||||||
// From https://en.wikipedia.org/wiki/ISO_week_date
|
// From https://en.wikipedia.org/wiki/ISO_week_date
|
||||||
|
|
||||||
expr(&e, NaiveDate::from_ymd(1977, 1, 1), 53);
|
expr_ymd(&e, (1977, 1, 1), 53);
|
||||||
expr(&e, NaiveDate::from_ymd(1977, 1, 2), 53);
|
expr_ymd(&e, (1977, 1, 2), 53);
|
||||||
expr(&e, NaiveDate::from_ymd(1977, 1, 3), 1);
|
expr_ymd(&e, (1977, 1, 3), 1);
|
||||||
|
|
||||||
expr(&e, NaiveDate::from_ymd(1977, 12, 31), 52);
|
expr_ymd(&e, (1977, 12, 31), 52);
|
||||||
expr(&e, NaiveDate::from_ymd(1978, 1, 1), 52);
|
expr_ymd(&e, (1978, 1, 1), 52);
|
||||||
expr(&e, NaiveDate::from_ymd(1978, 1, 2), 1);
|
expr_ymd(&e, (1978, 1, 2), 1);
|
||||||
|
|
||||||
expr(&e, NaiveDate::from_ymd(1978, 12, 31), 52);
|
expr_ymd(&e, (1978, 12, 31), 52);
|
||||||
expr(&e, NaiveDate::from_ymd(1979, 1, 1), 1);
|
expr_ymd(&e, (1979, 1, 1), 1);
|
||||||
|
|
||||||
expr(&e, NaiveDate::from_ymd(1979, 12, 30), 52);
|
expr_ymd(&e, (1979, 12, 30), 52);
|
||||||
expr(&e, NaiveDate::from_ymd(1979, 12, 31), 1);
|
expr_ymd(&e, (1979, 12, 31), 1);
|
||||||
expr(&e, NaiveDate::from_ymd(1980, 1, 1), 1);
|
expr_ymd(&e, (1980, 1, 1), 1);
|
||||||
|
|
||||||
expr(&e, NaiveDate::from_ymd(1980, 12, 28), 52);
|
expr_ymd(&e, (1980, 12, 28), 52);
|
||||||
expr(&e, NaiveDate::from_ymd(1980, 12, 29), 1);
|
expr_ymd(&e, (1980, 12, 29), 1);
|
||||||
expr(&e, NaiveDate::from_ymd(1980, 12, 30), 1);
|
expr_ymd(&e, (1980, 12, 30), 1);
|
||||||
expr(&e, NaiveDate::from_ymd(1980, 12, 31), 1);
|
expr_ymd(&e, (1980, 12, 31), 1);
|
||||||
expr(&e, NaiveDate::from_ymd(1981, 1, 1), 1);
|
expr_ymd(&e, (1981, 1, 1), 1);
|
||||||
|
|
||||||
expr(&e, NaiveDate::from_ymd(1981, 12, 31), 53);
|
expr_ymd(&e, (1981, 12, 31), 53);
|
||||||
expr(&e, NaiveDate::from_ymd(1982, 1, 1), 53);
|
expr_ymd(&e, (1982, 1, 1), 53);
|
||||||
expr(&e, NaiveDate::from_ymd(1982, 1, 2), 53);
|
expr_ymd(&e, (1982, 1, 2), 53);
|
||||||
expr(&e, NaiveDate::from_ymd(1982, 1, 3), 53);
|
expr_ymd(&e, (1982, 1, 3), 53);
|
||||||
expr(&e, NaiveDate::from_ymd(1982, 1, 4), 1);
|
expr_ymd(&e, (1982, 1, 4), 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn weekday() {
|
fn weekday() {
|
||||||
let e = Expr::Var(Var::Weekday);
|
let e = Expr::Var(Var::Weekday);
|
||||||
|
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 18), 6);
|
expr_ymd(&e, (2021, 12, 18), 6);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 19), 7);
|
expr_ymd(&e, (2021, 12, 19), 7);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 20), 1);
|
expr_ymd(&e, (2021, 12, 20), 1);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 21), 2);
|
expr_ymd(&e, (2021, 12, 21), 2);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 22), 3);
|
expr_ymd(&e, (2021, 12, 22), 3);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 23), 4);
|
expr_ymd(&e, (2021, 12, 23), 4);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 24), 5);
|
expr_ymd(&e, (2021, 12, 24), 5);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 25), 6);
|
expr_ymd(&e, (2021, 12, 25), 6);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 26), 7);
|
expr_ymd(&e, (2021, 12, 26), 7);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 27), 1);
|
expr_ymd(&e, (2021, 12, 27), 1);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 28), 2);
|
expr_ymd(&e, (2021, 12, 28), 2);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 29), 3);
|
expr_ymd(&e, (2021, 12, 29), 3);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 30), 4);
|
expr_ymd(&e, (2021, 12, 30), 4);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 31), 5);
|
expr_ymd(&e, (2021, 12, 31), 5);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
|
@ -889,10 +902,10 @@ mod tests {
|
||||||
];
|
];
|
||||||
|
|
||||||
for (y, m, d) in dates {
|
for (y, m, d) in dates {
|
||||||
expr(
|
expr_ymd(
|
||||||
&e,
|
&e,
|
||||||
NaiveDate::from_ymd(y, 1, 1),
|
(y, 1, 1),
|
||||||
NaiveDate::from_ymd(y, m, d).ordinal().into(),
|
NaiveDate::from_ymd_opt(y, m, d).unwrap().ordinal().into(),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -901,77 +914,77 @@ mod tests {
|
||||||
fn is_weekday() {
|
fn is_weekday() {
|
||||||
let e = Expr::Var(Var::IsWeekday);
|
let e = Expr::Var(Var::IsWeekday);
|
||||||
|
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 18), 0);
|
expr_ymd(&e, (2021, 12, 18), 0);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 19), 0);
|
expr_ymd(&e, (2021, 12, 19), 0);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 20), 1);
|
expr_ymd(&e, (2021, 12, 20), 1);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 21), 1);
|
expr_ymd(&e, (2021, 12, 21), 1);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 22), 1);
|
expr_ymd(&e, (2021, 12, 22), 1);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 23), 1);
|
expr_ymd(&e, (2021, 12, 23), 1);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 24), 1);
|
expr_ymd(&e, (2021, 12, 24), 1);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 25), 0);
|
expr_ymd(&e, (2021, 12, 25), 0);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 26), 0);
|
expr_ymd(&e, (2021, 12, 26), 0);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 27), 1);
|
expr_ymd(&e, (2021, 12, 27), 1);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 28), 1);
|
expr_ymd(&e, (2021, 12, 28), 1);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 29), 1);
|
expr_ymd(&e, (2021, 12, 29), 1);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 30), 1);
|
expr_ymd(&e, (2021, 12, 30), 1);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 31), 1);
|
expr_ymd(&e, (2021, 12, 31), 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn is_weekend() {
|
fn is_weekend() {
|
||||||
let e = Expr::Var(Var::IsWeekend);
|
let e = Expr::Var(Var::IsWeekend);
|
||||||
|
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 18), 1);
|
expr_ymd(&e, (2021, 12, 18), 1);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 19), 1);
|
expr_ymd(&e, (2021, 12, 19), 1);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 20), 0);
|
expr_ymd(&e, (2021, 12, 20), 0);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 21), 0);
|
expr_ymd(&e, (2021, 12, 21), 0);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 22), 0);
|
expr_ymd(&e, (2021, 12, 22), 0);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 23), 0);
|
expr_ymd(&e, (2021, 12, 23), 0);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 24), 0);
|
expr_ymd(&e, (2021, 12, 24), 0);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 25), 1);
|
expr_ymd(&e, (2021, 12, 25), 1);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 26), 1);
|
expr_ymd(&e, (2021, 12, 26), 1);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 27), 0);
|
expr_ymd(&e, (2021, 12, 27), 0);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 28), 0);
|
expr_ymd(&e, (2021, 12, 28), 0);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 29), 0);
|
expr_ymd(&e, (2021, 12, 29), 0);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 30), 0);
|
expr_ymd(&e, (2021, 12, 30), 0);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 12, 31), 0);
|
expr_ymd(&e, (2021, 12, 31), 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn is_leap_year() {
|
fn is_leap_year() {
|
||||||
let e = Expr::Var(Var::IsLeapYear);
|
let e = Expr::Var(Var::IsLeapYear);
|
||||||
|
|
||||||
expr(&e, NaiveDate::from_ymd(2000, 1, 1), 1);
|
expr_ymd(&e, (2000, 1, 1), 1);
|
||||||
expr(&e, NaiveDate::from_ymd(2001, 1, 1), 0);
|
expr_ymd(&e, (2001, 1, 1), 0);
|
||||||
expr(&e, NaiveDate::from_ymd(2002, 1, 1), 0);
|
expr_ymd(&e, (2002, 1, 1), 0);
|
||||||
expr(&e, NaiveDate::from_ymd(2003, 1, 1), 0);
|
expr_ymd(&e, (2003, 1, 1), 0);
|
||||||
expr(&e, NaiveDate::from_ymd(2004, 1, 1), 1);
|
expr_ymd(&e, (2004, 1, 1), 1);
|
||||||
expr(&e, NaiveDate::from_ymd(2005, 1, 1), 0);
|
expr_ymd(&e, (2005, 1, 1), 0);
|
||||||
expr(&e, NaiveDate::from_ymd(2006, 1, 1), 0);
|
expr_ymd(&e, (2006, 1, 1), 0);
|
||||||
expr(&e, NaiveDate::from_ymd(2007, 1, 1), 0);
|
expr_ymd(&e, (2007, 1, 1), 0);
|
||||||
expr(&e, NaiveDate::from_ymd(2008, 1, 1), 1);
|
expr_ymd(&e, (2008, 1, 1), 1);
|
||||||
expr(&e, NaiveDate::from_ymd(2009, 1, 1), 0);
|
expr_ymd(&e, (2009, 1, 1), 0);
|
||||||
expr(&e, NaiveDate::from_ymd(2010, 1, 1), 0);
|
expr_ymd(&e, (2010, 1, 1), 0);
|
||||||
expr(&e, NaiveDate::from_ymd(2011, 1, 1), 0);
|
expr_ymd(&e, (2011, 1, 1), 0);
|
||||||
expr(&e, NaiveDate::from_ymd(2012, 1, 1), 1);
|
expr_ymd(&e, (2012, 1, 1), 1);
|
||||||
expr(&e, NaiveDate::from_ymd(2013, 1, 1), 0);
|
expr_ymd(&e, (2013, 1, 1), 0);
|
||||||
expr(&e, NaiveDate::from_ymd(2014, 1, 1), 0);
|
expr_ymd(&e, (2014, 1, 1), 0);
|
||||||
expr(&e, NaiveDate::from_ymd(2015, 1, 1), 0);
|
expr_ymd(&e, (2015, 1, 1), 0);
|
||||||
expr(&e, NaiveDate::from_ymd(2016, 1, 1), 1);
|
expr_ymd(&e, (2016, 1, 1), 1);
|
||||||
expr(&e, NaiveDate::from_ymd(2017, 1, 1), 0);
|
expr_ymd(&e, (2017, 1, 1), 0);
|
||||||
expr(&e, NaiveDate::from_ymd(2018, 1, 1), 0);
|
expr_ymd(&e, (2018, 1, 1), 0);
|
||||||
expr(&e, NaiveDate::from_ymd(2019, 1, 1), 0);
|
expr_ymd(&e, (2019, 1, 1), 0);
|
||||||
expr(&e, NaiveDate::from_ymd(2020, 1, 1), 1);
|
expr_ymd(&e, (2020, 1, 1), 1);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 1, 1), 0);
|
expr_ymd(&e, (2021, 1, 1), 0);
|
||||||
expr(&e, NaiveDate::from_ymd(2022, 1, 1), 0);
|
expr_ymd(&e, (2022, 1, 1), 0);
|
||||||
expr(&e, NaiveDate::from_ymd(2023, 1, 1), 0);
|
expr_ymd(&e, (2023, 1, 1), 0);
|
||||||
expr(&e, NaiveDate::from_ymd(2024, 1, 1), 1);
|
expr_ymd(&e, (2024, 1, 1), 1);
|
||||||
expr(&e, NaiveDate::from_ymd(2025, 1, 1), 0);
|
expr_ymd(&e, (2025, 1, 1), 0);
|
||||||
expr(&e, NaiveDate::from_ymd(2026, 1, 1), 0);
|
expr_ymd(&e, (2026, 1, 1), 0);
|
||||||
expr(&e, NaiveDate::from_ymd(2027, 1, 1), 0);
|
expr_ymd(&e, (2027, 1, 1), 0);
|
||||||
expr(&e, NaiveDate::from_ymd(2028, 1, 1), 1);
|
expr_ymd(&e, (2028, 1, 1), 1);
|
||||||
expr(&e, NaiveDate::from_ymd(2029, 1, 1), 0);
|
expr_ymd(&e, (2029, 1, 1), 0);
|
||||||
expr(&e, NaiveDate::from_ymd(2030, 1, 1), 0);
|
expr_ymd(&e, (2030, 1, 1), 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
|
@ -979,36 +992,36 @@ mod tests {
|
||||||
let e = Expr::Var(Var::IsIsoLeapYear);
|
let e = Expr::Var(Var::IsIsoLeapYear);
|
||||||
|
|
||||||
// August 1st is definitely in the same year in both systems
|
// August 1st is definitely in the same year in both systems
|
||||||
expr(&e, NaiveDate::from_ymd(2000, 8, 1), 0);
|
expr_ymd(&e, (2000, 8, 1), 0);
|
||||||
expr(&e, NaiveDate::from_ymd(2001, 8, 1), 0);
|
expr_ymd(&e, (2001, 8, 1), 0);
|
||||||
expr(&e, NaiveDate::from_ymd(2002, 8, 1), 0);
|
expr_ymd(&e, (2002, 8, 1), 0);
|
||||||
expr(&e, NaiveDate::from_ymd(2003, 8, 1), 0);
|
expr_ymd(&e, (2003, 8, 1), 0);
|
||||||
expr(&e, NaiveDate::from_ymd(2004, 8, 1), 1);
|
expr_ymd(&e, (2004, 8, 1), 1);
|
||||||
expr(&e, NaiveDate::from_ymd(2005, 8, 1), 0);
|
expr_ymd(&e, (2005, 8, 1), 0);
|
||||||
expr(&e, NaiveDate::from_ymd(2006, 8, 1), 0);
|
expr_ymd(&e, (2006, 8, 1), 0);
|
||||||
expr(&e, NaiveDate::from_ymd(2007, 8, 1), 0);
|
expr_ymd(&e, (2007, 8, 1), 0);
|
||||||
expr(&e, NaiveDate::from_ymd(2008, 8, 1), 0);
|
expr_ymd(&e, (2008, 8, 1), 0);
|
||||||
expr(&e, NaiveDate::from_ymd(2009, 8, 1), 1);
|
expr_ymd(&e, (2009, 8, 1), 1);
|
||||||
expr(&e, NaiveDate::from_ymd(2010, 8, 1), 0);
|
expr_ymd(&e, (2010, 8, 1), 0);
|
||||||
expr(&e, NaiveDate::from_ymd(2011, 8, 1), 0);
|
expr_ymd(&e, (2011, 8, 1), 0);
|
||||||
expr(&e, NaiveDate::from_ymd(2012, 8, 1), 0);
|
expr_ymd(&e, (2012, 8, 1), 0);
|
||||||
expr(&e, NaiveDate::from_ymd(2013, 8, 1), 0);
|
expr_ymd(&e, (2013, 8, 1), 0);
|
||||||
expr(&e, NaiveDate::from_ymd(2014, 8, 1), 0);
|
expr_ymd(&e, (2014, 8, 1), 0);
|
||||||
expr(&e, NaiveDate::from_ymd(2015, 8, 1), 1);
|
expr_ymd(&e, (2015, 8, 1), 1);
|
||||||
expr(&e, NaiveDate::from_ymd(2016, 8, 1), 0);
|
expr_ymd(&e, (2016, 8, 1), 0);
|
||||||
expr(&e, NaiveDate::from_ymd(2017, 8, 1), 0);
|
expr_ymd(&e, (2017, 8, 1), 0);
|
||||||
expr(&e, NaiveDate::from_ymd(2018, 8, 1), 0);
|
expr_ymd(&e, (2018, 8, 1), 0);
|
||||||
expr(&e, NaiveDate::from_ymd(2019, 8, 1), 0);
|
expr_ymd(&e, (2019, 8, 1), 0);
|
||||||
expr(&e, NaiveDate::from_ymd(2020, 8, 1), 1);
|
expr_ymd(&e, (2020, 8, 1), 1);
|
||||||
expr(&e, NaiveDate::from_ymd(2021, 8, 1), 0);
|
expr_ymd(&e, (2021, 8, 1), 0);
|
||||||
expr(&e, NaiveDate::from_ymd(2022, 8, 1), 0);
|
expr_ymd(&e, (2022, 8, 1), 0);
|
||||||
expr(&e, NaiveDate::from_ymd(2023, 8, 1), 0);
|
expr_ymd(&e, (2023, 8, 1), 0);
|
||||||
expr(&e, NaiveDate::from_ymd(2024, 8, 1), 0);
|
expr_ymd(&e, (2024, 8, 1), 0);
|
||||||
expr(&e, NaiveDate::from_ymd(2025, 8, 1), 0);
|
expr_ymd(&e, (2025, 8, 1), 0);
|
||||||
expr(&e, NaiveDate::from_ymd(2026, 8, 1), 1);
|
expr_ymd(&e, (2026, 8, 1), 1);
|
||||||
expr(&e, NaiveDate::from_ymd(2027, 8, 1), 0);
|
expr_ymd(&e, (2027, 8, 1), 0);
|
||||||
expr(&e, NaiveDate::from_ymd(2028, 8, 1), 0);
|
expr_ymd(&e, (2028, 8, 1), 0);
|
||||||
expr(&e, NaiveDate::from_ymd(2029, 8, 1), 0);
|
expr_ymd(&e, (2029, 8, 1), 0);
|
||||||
expr(&e, NaiveDate::from_ymd(2030, 8, 1), 0);
|
expr_ymd(&e, (2030, 8, 1), 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -298,7 +298,7 @@ impl<S: Copy> DeltaEval<S> {
|
||||||
};
|
};
|
||||||
|
|
||||||
if time < curr_time {
|
if time < curr_time {
|
||||||
self.curr = self.curr.succ();
|
self.curr = self.curr.succ_opt().unwrap();
|
||||||
}
|
}
|
||||||
self.curr_time = Some(time);
|
self.curr_time = Some(time);
|
||||||
Ok(())
|
Ok(())
|
||||||
|
|
@ -359,13 +359,13 @@ mod tests {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn apply_d(step: Step, from: (i32, u32, u32)) -> Result<NaiveDate, Error<()>> {
|
fn apply_d(step: Step, from: (i32, u32, u32)) -> Result<NaiveDate, Error<()>> {
|
||||||
delta(step).apply_date((), NaiveDate::from_ymd(from.0, from.1, from.2))
|
delta(step).apply_date((), NaiveDate::from_ymd_opt(from.0, from.1, from.2).unwrap())
|
||||||
}
|
}
|
||||||
|
|
||||||
fn test_d(step: Step, from: (i32, u32, u32), expected: (i32, u32, u32)) {
|
fn test_d(step: Step, from: (i32, u32, u32), expected: (i32, u32, u32)) {
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
apply_d(step, from).unwrap(),
|
apply_d(step, from).unwrap(),
|
||||||
NaiveDate::from_ymd(expected.0, expected.1, expected.2)
|
NaiveDate::from_ymd_opt(expected.0, expected.1, expected.2).unwrap()
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -375,7 +375,7 @@ mod tests {
|
||||||
) -> Result<(NaiveDate, Time), Error<()>> {
|
) -> Result<(NaiveDate, Time), Error<()>> {
|
||||||
delta(step).apply_date_time(
|
delta(step).apply_date_time(
|
||||||
(),
|
(),
|
||||||
NaiveDate::from_ymd(from.0, from.1, from.2),
|
NaiveDate::from_ymd_opt(from.0, from.1, from.2).unwrap(),
|
||||||
Time::new(from.3, from.4),
|
Time::new(from.3, from.4),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
@ -385,7 +385,7 @@ mod tests {
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
apply_dt(step, from).unwrap(),
|
apply_dt(step, from).unwrap(),
|
||||||
(
|
(
|
||||||
NaiveDate::from_ymd(expected.0, expected.1, expected.2),
|
NaiveDate::from_ymd_opt(expected.0, expected.1, expected.2).unwrap(),
|
||||||
Time::new(expected.3, expected.4)
|
Time::new(expected.3, expected.4)
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
|
||||||
|
|
@ -75,7 +75,7 @@ impl DateRange {
|
||||||
|
|
||||||
pub fn days(&self) -> impl Iterator<Item = NaiveDate> {
|
pub fn days(&self) -> impl Iterator<Item = NaiveDate> {
|
||||||
(self.from.num_days_from_ce()..=self.until.num_days_from_ce())
|
(self.from.num_days_from_ce()..=self.until.num_days_from_ce())
|
||||||
.map(NaiveDate::from_num_days_from_ce)
|
.map(|days| NaiveDate::from_num_days_from_ce_opt(days).unwrap())
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn years(&self) -> RangeInclusive<i32> {
|
pub fn years(&self) -> RangeInclusive<i32> {
|
||||||
|
|
|
||||||
|
|
@ -9,13 +9,14 @@ pub fn is_iso_leap_year(year: i32) -> bool {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn year_length(year: i32) -> u32 {
|
pub fn year_length(year: i32) -> u32 {
|
||||||
NaiveDate::from_ymd(year, 12, 31).ordinal()
|
NaiveDate::from_ymd_opt(year, 12, 31).unwrap().ordinal()
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn month_length(year: i32, month: u32) -> u32 {
|
pub fn month_length(year: i32, month: u32) -> u32 {
|
||||||
NaiveDate::from_ymd_opt(year, month + 1, 1)
|
NaiveDate::from_ymd_opt(year, month + 1, 1)
|
||||||
.unwrap_or_else(|| NaiveDate::from_ymd(year + 1, 1, 1))
|
.unwrap_or_else(|| NaiveDate::from_ymd_opt(year + 1, 1, 1).unwrap())
|
||||||
.pred()
|
.pred_opt()
|
||||||
|
.unwrap()
|
||||||
.day()
|
.day()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -293,7 +293,7 @@ fn parse_date_fixed(p: Pair<'_, Rule>) -> Result<DateSpec> {
|
||||||
assert_eq!(p.as_rule(), Rule::date_fixed);
|
assert_eq!(p.as_rule(), Rule::date_fixed);
|
||||||
|
|
||||||
let mut spec = DateSpec {
|
let mut spec = DateSpec {
|
||||||
start: NaiveDate::from_ymd(0, 1, 1),
|
start: NaiveDate::from_ymd_opt(0, 1, 1).unwrap(),
|
||||||
start_delta: None,
|
start_delta: None,
|
||||||
start_time: None,
|
start_time: None,
|
||||||
end: None,
|
end: None,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue