Skip to content

Commit

Permalink
Fix bug with first_day / Increase test coverage
Browse files Browse the repository at this point in the history
  • Loading branch information
sestrella committed May 17, 2022
1 parent b274146 commit 0f9f5ba
Showing 1 changed file with 18 additions and 22 deletions.
40 changes: 18 additions & 22 deletions src/naive/date.rs
Expand Up @@ -65,7 +65,7 @@ impl Weeklike for NaiveWeek {
fn first_day(&self) -> Self::Day {
let start = self.start.num_days_from_monday();
let end = self.date.weekday().num_days_from_monday();
let days = if start > end { 7 - end } else { end - start };
let days = if start > end { 7 - start + end } else { end - start };
self.date - Duration::days(days.into())
}
}
Expand Down Expand Up @@ -2440,27 +2440,23 @@ mod tests {
}

#[test]
fn test_naiveweek_less_than_weekday() {
fn test_naiveweek_first_and_last_day() {
let date = NaiveDate::from_ymd(2022, 5, 18);
let week = date.week(Weekday::Mon);
assert_eq!(week.first_day(), NaiveDate::from_ymd(2022, 5, 16));
assert_eq!(week.last_day(), NaiveDate::from_ymd(2022, 5, 22));
}

#[test]
fn test_naiveweek_equal_to_weekday() {
let date = NaiveDate::from_ymd(2022, 5, 18);
let week = date.week(Weekday::Wed);
assert_eq!(week.first_day(), date);
assert_eq!(week.last_day(), NaiveDate::from_ymd(2022, 5, 24));
}

/// TODO: Fix this test
#[test]
fn test_naiveweek_greater_than_weekday() {
let date = NaiveDate::from_ymd(2022, 5, 18);
let week = date.week(Weekday::Fri);
assert_eq!(week.first_day(), NaiveDate::from_ymd(2022, 5, 13));
assert_eq!(week.last_day(), NaiveDate::from_ymd(2022, 5, 19));
let asserts = vec![
(Weekday::Mon, "2022-05-16", "2022-05-22"),
(Weekday::Tue, "2022-05-17", "2022-05-23"),
(Weekday::Wed, "2022-05-18", "2022-05-24"),
(Weekday::Thu, "2022-05-12", "2022-05-18"),
(Weekday::Fri, "2022-05-13", "2022-05-19"),
(Weekday::Sat, "2022-05-14", "2022-05-20"),
(Weekday::Sun, "2022-05-15", "2022-05-21"),
];
for (start, first_day, last_day) in asserts {
let week = date.week(start);
let days = week.days();
assert_eq!(Ok(week.first_day()), NaiveDate::parse_from_str(first_day, "%Y-%m-%d"));
assert_eq!(Ok(week.last_day()), NaiveDate::parse_from_str(last_day, "%Y-%m-%d"));
assert!(days.contains(&date));
}
}
}

0 comments on commit 0f9f5ba

Please sign in to comment.