tests/testthat/test-date-bugfixes.R

test_that("floordate/ceilingdate/rounddate actually round instead of no-op", {
  d <- as.Date(c("2024-03-15", "2024-01-31"))

  expect_equal(floordate(d, "month"), as.Date(c("2024-03-01", "2024-01-01")))
  expect_equal(floordate(d, "year"), as.Date(c("2024-01-01", "2024-01-01")))
  expect_equal(floordate(as.Date("2024-03-15"), "week"), as.Date("2024-03-11"))

  expect_equal(ceilingdate(d, "month"), as.Date(c("2024-04-01", "2024-02-01")))
  expect_equal(ceilingdate(as.Date("2024-03-15"), "year"), as.Date("2025-01-01"))

  expect_equal(rounddate(as.Date("2024-03-20"), "month"), as.Date("2024-04-01"))
  expect_equal(rounddate(as.Date("2024-03-10"), "month"), as.Date("2024-03-01"))
})

test_that("addmonths/addyears are vectorized and honor invalid=", {
  out <- addmonths(as.Date(c("2024-01-15", "2024-02-15")), 1)
  expect_equal(out, as.Date(c("2024-02-15", "2024-03-15")))

  expect_equal(addmonths(as.Date("2024-01-31"), 1, invalid = "previous"), as.Date("2024-02-29"))
  expect_equal(addmonths(as.Date("2024-01-31"), 1, invalid = "next"), as.Date("2024-03-02"))
  expect_equal(addmonths(as.Date("2024-01-31"), 1, invalid = "missing"), as.Date(NA))
  expect_error(addmonths(as.Date("2024-01-31"), 1, invalid = "error"), "invalid date")

  expect_equal(addyears(as.Date("2024-02-29"), 1, invalid = "previous"), as.Date("2025-02-28"))
})

test_that("datediff honors the units argument", {
  x <- as.Date("2024-01-03")
  y <- as.Date("2024-01-01")

  expect_equal(datediff(x, y, units = "days"), 2)
  expect_equal(datediff(x, y, units = "weeks"), 2 / 7)
})

Try the basetable package in your browser

Any scripts or data that you put into this service are public.

basetable documentation built on Sept. 18, 2026, 9:13 a.m.