test_that("seconds accessor extracts correct second", { poslt <- as.POSIXlt("2010-02-03 13:45:59", tz = "UTC", format = "%Y-%m-%d %H:%M:%S" ) posct <- as.POSIXct(poslt) date <- as.Date(poslt) expect_equal(second(poslt), 59) expect_equal(second(posct), 59) expect_equal(second(date), 0) }) test_that("minutes accessor extracts correct minute", { poslt <- as.POSIXlt("2010-02-03 13:45:59", tz = "UTC", format = "%Y-%m-%d %H:%M:%S" ) posct <- as.POSIXct(poslt) date <- as.Date(poslt) expect_equal(minute(poslt), 45) expect_equal(minute(posct), 45) expect_equal(minute(date), 0) }) test_that("hours accessor extracts correct hour", { poslt <- as.POSIXlt("2010-02-03 13:45:59", tz = "UTC", format = "%Y-%m-%d %H:%M:%S" ) posct <- as.POSIXct(poslt) date <- as.Date(poslt) expect_equal(hour(poslt), 13) expect_equal(hour(posct), 13) expect_equal(hour(date), 0) }) test_that("days accessors extract correct days", { poslt <- as.POSIXlt("2010-02-03 13:45:59", tz = "UTC", format = "%Y-%m-%d %H:%M:%S") posct <- as.POSIXct(poslt) date <- as.Date(poslt) expect_equal(day(poslt), 3) expect_equal(day(posct), 3) expect_equal(day(date), 3) expect_equal(mday(poslt), 3) expect_equal(mday(posct), 3) expect_equal(mday(date), 3) expect_equal(yday(poslt), 34) expect_equal(yday(posct), 34) expect_equal(yday(date), 34) expect_equal(wday(poslt), 4) expect_equal(wday(posct), 4) expect_equal(wday(date), 4) expect_equal(qday(poslt), 34) expect_equal(qday(poslt), 34) expect_equal(qday(poslt), 34) }) test_that("empty argument date() works", { expect_silent(date()) }) test_that("day accessors work on character inputs", { x <- "2017-05-07 GMT" d <- ymd(x) expect_equal(wday(x), wday(d)) expect_equal(mday(x), mday(d)) expect_equal(qday(x), qday(d)) expect_equal(yday(x), yday(d)) }) test_that("wday works with various start values", { days <- days2 <- ymd(c( "2005-01-01", "2005-01-02", "2005-12-31", "2007-01-01", "2007-12-30", "2007-12-31", "2008-01-01", "2008-12-28", "2008-12-29", "2008-12-30", "2008-12-31", "2009-01-01", "2009-12-31", "2010-01-01", "2010-01-02" )) expect_equal( as.character(wday(days, label = T, week_start = 1)), as.character(wday(days, label = T, week_start = 3)) ) expect_equal( as.character(wday(days, label = T, week_start = 1)), as.character(wday(days, label = T, week_start = 7)) ) expect_equal(as.character(wday(days, label = T, locale = "C"))[1], "Sat") expect_equal(as.character(wday(days, label = T, abbr = FALSE, locale = "C"))[1], "Saturday") expect_equal( wday(days, label = F, week_start = 1), c(6, 7, 6, 1, 7, 1, 2, 7, 1, 2, 3, 4, 4, 5, 6) ) expect_equal( wday(days, label = F, week_start = 7), c(7, 1, 7, 2, 1, 2, 3, 1, 2, 3, 4, 5, 5, 6, 7) ) set.seed(1000) days2 <- days new_days <- sample(1:7, length(days2), replace = T) wday(days2, week_start = 1) <- new_days expect_equal(wday(days2, week_start = 1), new_days) wday(days2, week_start = 7) <- new_days expect_equal(wday(days2, week_start = 7), new_days) wday(days2, week_start = 3) <- new_days expect_equal(wday(days2, week_start = 3), new_days) }) test_that("weeks accessor extracts correct week", { poslt <- as.POSIXlt("2010-02-03 13:45:59", tz = "UTC", format = "%Y-%m-%d %H:%M:%S" ) posct <- as.POSIXct(poslt) date <- as.Date(poslt) expect_equal(week(poslt), 5) expect_equal(week(posct), 5) expect_equal(week(date), 5) }) test_that("isoweek accessor extracts correct ISO8601 week", { poslt <- as.POSIXlt("2010-01-01 13:45:59", tz = "UTC", format = "%Y-%m-%d %H:%M:%S") posct <- as.POSIXct(poslt) date <- as.Date(poslt) expect_equal(isoweek(poslt), 53) expect_equal(isoweek(posct), 53) expect_equal(isoweek(date), 53) df <- read.table(textConnection( "Sat 1 Jan 2005 2005-01-01 2004-W53-6 Sun 2 Jan 2005 2005-01-02 2004-W53-7 Sat 31 Dec 2005 2005-12-31 2005-W52-6 Mon 1 Jan 2007 2007-01-01 2007-W01-1 Both years 2007 start with the same day. Sun 30 Dec 2007 2007-12-30 2007-W52-7 Mon 31 Dec 2007 2007-12-31 2008-W01-1 Tue 1 Jan 2008 2008-01-01 2008-W01-2 Gregorian year 2008 is a leap year. ISO year 2008 is 2 days shorter: 1 day longer at the start, 3 days shorter at the end. Sun 28 Dec 2008 2008-12-28 2008-W52-7 ISO year 2009 begins three days before the end of Gregorian 2008. Mon 29 Dec 2008 2008-12-29 2009-W01-1 Tue 30 Dec 2008 2008-12-30 2009-W01-2 Wed 31 Dec 2008 2008-12-31 2009-W01-3 Thu 1 Jan 2009 2009-01-01 2009-W01-4 Thu 31 Dec 2009 2009-12-31 2009-W53-4 ISO year 2009 has 53 weeks and ends three days into Gregorian year 2010. Fri 1 Jan 2010 2010-01-01 2009-W53-5 Sat 2 Jan 2010 2010-01-02 2009-W53-6 Sun 3 Jan 2010 2010-01-03 2009-W53-7" ), sep = "\t", fill = T, stringsAsFactors = F, header = F ) names(df) <- c("Gregorian", "ymd", "iso", "note") df <- within(df, { ymd <- ymd(ymd) isoweek <- as.numeric(gsub(".*W([0-9]+).*", "\\1", iso)) isoyear <- as.numeric(gsub("^([0-9]+).*", "\\1", iso)) }) expect_equal(isoweek(df$ymd), df$isoweek) expect_equal(isoyear(df$ymd), df$isoyear) }) test_that("epiweek computes dates correctly", { df <- read.table(textConnection( "ew date year 1 12/30/07 8 2 01/06/08 8 3 01/13/08 8 52 01/02/10 9 1 01/03/10 10 2 01/10/10 10 3 01/17/10 10 4 01/24/10 10 5 01/31/10 10 1 01/04/09 9 2 01/11/09 9 3 01/18/09 9 50 12/13/09 9 51 12/20/09 9 52 12/27/09 9 50 12/12/10 10 51 12/19/10 10 52 12/26/10 10 50 12/07/08 8 51 12/14/08 8 52 12/21/08 8" ), header = T, sep = "\t", stringsAsFactors = F ) date <- mdy(df$date) expect_equal(epiweek(date), df$ew) expect_equal(epiyear(date), df$year + 2000) }) test_that("isoweek returns correct value for non-UTC time zone (#311)", { cest <- ymd_hms("2015-04-14 16:45:00", tz = "Europe/Copenhagen") utc <- ymd_hms("2015-04-14 16:45:00", tz = "UTC") expect_equal(isoweek(cest), 16L) expect_equal(isoweek(utc), 16L) }) test_that("months accessor extracts correct month", { poslt <- as.POSIXlt("2010-02-03 13:45:59", tz = "UTC", format = "%Y-%m-%d %H:%M:%S" ) posct <- as.POSIXct(poslt) date <- as.Date(poslt) expect_equal(month(poslt), 2) expect_equal(month(posct), 2) expect_equal(month(date), 2) expect_equal(as.character(month(date, label = TRUE, locale = "C")), "Feb") expect_equal( as.character(month(date, label = TRUE, abbr = FALSE, locale = "C")), "February" ) }) test_that("month() on numeric input doesn't accept invalid values", { expect_error(month(0:13)) expect_error(month(c(0:13, NA))) expect_error(month(0)) expect_error(month(0), label = TRUE) expect_equal(month(1:12), 1:12) expect_equal(month(c(1:12, NA)), c(1:12, NA)) expect_equal(month(as.double(1:12)), 1:12) }) test_that("quarters accessor extracts correct quarter", { posct <- ymd_hms("2010-11-03 13:45:59") poslt <- as.POSIXlt(posct) date <- as.Date(poslt) expect_equal(quarter(posct), 4) expect_equal(quarter(posct, type = "quarter"), 4) expect_equal(quarter(posct, type = "year.quarter"), 2010.4) expect_equal(quarter(posct, type = "date_first"), ymd("2010-10-01")) expect_equal(quarter(posct, type = "date_last"), ymd("2010-12-31")) expect_equal(quarter(posct, type = "year_start/end"), "2009/10 Q4") expect_equal(quarter(posct, with_year = TRUE), 2010.4) expect_equal(quarter(posct, fiscal_start = 11), 1) expect_equal(quarter(posct, fiscal_start = -2), 1) expect_equal(quarter(posct, type = "year.quarter", fiscal_start = -2), 2011.1) expect_equal(quarter(posct, type = "year.quarter", fiscal_start = 11), 2011.1) expect_equal(quarter(posct, type = "date_first", fiscal_start = 11), ymd("2010-11-01")) expect_equal(quarter(posct, type = "date_last", fiscal_start = 11), ymd("2011-01-31")) expect_equal(quarter(poslt), 4) expect_equal(quarter(poslt, type = "quarter"), 4) expect_equal(quarter(poslt, type = "year.quarter"), 2010.4) expect_equal(quarter(poslt, type = "date_first"), ymd("2010-10-01")) expect_equal(quarter(poslt, type = "date_last"), ymd("2010-12-31")) expect_equal(quarter(poslt, type = "year_start/end"), "2009/10 Q4") expect_equal(quarter(poslt, with_year = TRUE), 2010.4) expect_equal(quarter(poslt, fiscal_start = 11), 1) expect_equal(quarter(poslt, fiscal_start = -2), 1) expect_equal(quarter(poslt, type = "year.quarter", fiscal_start = -2), 2011.1) expect_equal(quarter(poslt, type = "year.quarter", fiscal_start = 11), 2011.1) expect_equal(quarter(poslt, type = "date_first", fiscal_start = 11), ymd("2010-11-01")) expect_equal(quarter(poslt, type = "date_last", fiscal_start = 11), ymd("2011-01-31")) expect_equal(quarter(date), 4) expect_equal(quarter(date, type = "quarter"), 4) expect_equal(quarter(date, type = "year.quarter"), 2010.4) expect_equal(quarter(date, type = "date_first"), ymd("2010-10-01")) expect_equal(quarter(date, type = "date_last"), ymd("2010-12-31")) expect_equal(quarter(date, type = "year_start/end"), "2009/10 Q4") expect_equal(quarter(date, with_year = TRUE), 2010.4) expect_equal(quarter(date, fiscal_start = 11), 1) expect_equal(quarter(date, fiscal_start = -2), 1) expect_equal(quarter(date, type = "year.quarter", fiscal_start = -2), 2011.1) expect_equal(quarter(date, type = "year.quarter", fiscal_start = 11), 2011.1) expect_equal(quarter(date, type = "date_first", fiscal_start = 11), ymd("2010-11-01")) expect_equal(quarter(date, type = "date_last", fiscal_start = 11), ymd("2011-01-31")) x <- ymd(c("2012-03-01", "2012-03-26", "2012-05-04", "2012-09-23", "2012-12-31")) expect_equal(quarter(x, FALSE, fiscal_start = 11), c(2, 2, 3, 4, 1)) expect_equal(quarter(x, fiscal_start = 11, FALSE), c(2, 2, 3, 4, 1)) expect_equal(quarter(x, TRUE, fiscal_start = 9), c(2012.3, 2012.3, 2012.3, 2013.1, 2013.2)) expect_equal(quarter(x, TRUE, fiscal_start = 9), c(2012.3, 2012.3, 2012.3, 2013.1, 2013.2)) expect_equal( quarter(x, type = "quarter", fiscal_start = 4), c(4, 4, 1, 2, 3) ) expect_equal( quarter(x, type = "year.quarter", fiscal_start = 4), c(2012.4, 2012.4, 2013.1, 2013.2, 2013.3) ) expect_equal( quarter(x, type = "year.quarter", fiscal_start = 11), c(2012.2, 2012.2, 2012.3, 2012.4, 2013.1) ) expect_equal( quarter(x, type = "year.quarter", fiscal_start = 11), c(2012.2, 2012.2, 2012.3, 2012.4, 2013.1) ) expect_equal( quarter(x, type = "year_start/end", fiscal_start = 11), c("2011/12 Q2", "2011/12 Q2", "2011/12 Q3", "2011/12 Q4", "2012/13 Q1") ) expect_equal( quarter(x, type = "year.quarter", fiscal_start = 4), c(2012.4, 2012.4, 2013.1, 2013.2, 2013.3) ) expect_equal( quarter(x, type = "year_start/end", fiscal_start = 4), c("2011/12 Q4", "2011/12 Q4", "2012/13 Q1", "2012/13 Q2", "2012/13 Q3") ) expect_equal( quarter(x, type = "date_first", fiscal_start = 11), ymd(c("2012-02-01", "2012-02-01", "2012-05-01", "2012-08-01", "2012-11-01")) ) expect_equal( quarter(x, type = "date_last", fiscal_start = 4), ymd(c("2012-03-31", "2012-03-31", "2012-06-30", "2012-09-30", "2012-12-31")) ) expect_equal( quarter(x, type = "date_last", fiscal_start = 11), ymd(c("2012-04-30", "2012-04-30", "2012-07-31", "2012-10-31", "2013-01-31")) ) x <- ymd("2010-01-01") + months(0:11) expect_equal( quarter(x, type = "year.quarter", fiscal_start = 6), c( 2010.3, 2010.3, 2010.4, 2010.4, 2010.4, 2011.1, 2011.1, 2011.1, 2011.2, 2011.2, 2011.2, 2011.3 ) ) expect_equal( quarter(x, type = "year.quarter", fiscal_start = 6), quarter(x, type = "year.quarter", fiscal_start = -6) ) expect_equal( quarter(x, type = "date_first", fiscal_start = 6), ymd(c( "2009-12-01", "2009-12-01", "2010-03-01", "2010-03-01", "2010-03-01", "2010-06-01", "2010-06-01", "2010-06-01", "2010-09-01", "2010-09-01", "2010-09-01", "2010-12-01" )) ) expect_equal( quarter(x, type = "date_first", fiscal_start = 6), quarter(x, type = "date_first", fiscal_start = -6) ) expect_equal( quarter(x, type = "date_last", fiscal_start = 6), ymd(c( "2010-02-28", "2010-02-28", "2010-05-31", "2010-05-31", "2010-05-31", "2010-08-31", "2010-08-31", "2010-08-31", "2010-11-30", "2010-11-30", "2010-11-30", "2011-02-28" )) ) expect_equal( quarter(x, type = "date_last", fiscal_start = 6), quarter(x, type = "date_last", fiscal_start = -6) ) x <- ymd("2010-01-01") + months(seq(0, 23, by = 3)) expect_equal( quarter(x, type = "year.quarter", fiscal_start = 10), c(2010.2, 2010.3, 2010.4, 2011.1, 2011.2, 2011.3, 2011.4, 2012.1) ) expect_equal( quarter(x, type = "year.quarter", fiscal_start = -2), quarter(x, type = "year.quarter", fiscal_start = 10) ) expect_equal( quarter(x, type = "date_first", fiscal_start = 10), ymd(c( "2010-01-01", "2010-04-01", "2010-07-01", "2010-10-01", "2011-01-01", "2011-04-01", "2011-07-01", "2011-10-01" )) ) expect_equal( quarter(x, type = "date_first", fiscal_start = -2), quarter(x, type = "date_first", fiscal_start = 10) ) expect_equal( quarter(x, type = "date_last", fiscal_start = 10), ymd(c( "2010-03-31", "2010-06-30", "2010-09-30", "2010-12-31", "2011-03-31", "2011-06-30", "2011-09-30", "2011-12-31" )) ) expect_equal( quarter(x, type = "date_last", fiscal_start = -2), quarter(x, type = "date_last", fiscal_start = 10) ) x <- ymd(c( "2018-07-15", "2018-12-27", "2019-01-01", "2019-06-01", "2019-07-01", "2019-10-16", "2019-12-31", "2020-01-01", "2020-06-30", "2020-07-01", "2020-11-09", "2021-01-19", "2021-06-30", "2021-07-01" )) expect_equal( quarter(x, type = "year.quarter", fiscal_start = 7), c( 2019.1, 2019.2, 2019.3, 2019.4, 2020.1, 2020.2, 2020.2, 2020.3, 2020.4, 2021.1, 2021.2, 2021.3, 2021.4, 2022.1 ) ) out <- quarter(x, type = "date_first", fiscal_start = 7) expect_s3_class(out, "Date") expect_equal( out, ymd(c( "2018-07-01", "2018-10-01", "2019-01-01", "2019-04-01", "2019-07-01", "2019-10-01", "2019-10-01", "2020-01-01", "2020-04-01", "2020-07-01", "2020-10-01", "2021-01-01", "2021-04-01", "2021-07-01" )) ) expect_equal( quarter(x, type = "date_last", fiscal_start = 7), ymd(c( "2018-09-30", "2018-12-31", "2019-03-31", "2019-06-30", "2019-09-30", "2019-12-31", "2019-12-31", "2020-03-31", "2020-06-30", "2020-09-30", "2020-12-31", "2021-03-31", "2021-06-30", "2021-09-30" )) ) }) test_that("years accessor extracts correct year", { poslt <- as.POSIXlt("2010-02-03 13:45:59", tz = "UTC", format = "%Y-%m-%d %H:%M:%S" ) posct <- as.POSIXct(poslt) date <- as.Date(poslt) expect_equal(year(poslt), 2010) expect_equal(year(posct), 2010) expect_equal(year(date), 2010) }) test_that("isoyear accessor extracts correct ISO8601 year", { poslt <- c( as.POSIXlt("2014-12-28 13:45:59", tz = "UTC", format = "%Y-%m-%d %H:%M:%S"), as.POSIXlt("2014-12-29 01:12:08", tz = "UTC", format = "%Y-%m-%d %H:%M:%S") ) posct <- as.POSIXct(poslt) date <- as.Date(poslt) expect_equal(isoyear(poslt), c(2014, 2015)) expect_equal(isoyear(posct), c(2014, 2015)) expect_equal(isoyear(date), c(2014, 2015)) }) test_that("date accessor extracts correct date", { poslt <- as.POSIXlt("2010-02-03 23:45:59", tz = "Etc/GMT+8", format = "%Y-%m-%d %H:%M:%S" ) posct <- as.POSIXct(poslt) date <- as.Date(poslt) expect_equal(date(poslt), as.Date("2010-02-03")) expect_equal(date(posct), as.Date("2010-02-03")) expect_equal(date(date), as.Date("2010-02-03")) }) test_that("timezone accessor extracts correct timezone", { poslt <- as.POSIXlt("2010-02-03 13:45:59", tz = "UTC", format = "%Y-%m-%d %H:%M:%S" ) posct <- as.POSIXct(poslt) date <- as.Date(poslt) expect_match(tz(poslt), "UTC") expect_match(tz(posct), "UTC") expect_match(tz(date), "UTC") }) test_that("accessors handle vectors", { poslt <- as.POSIXlt(c( "2001-01-01 01:01:01", "2002-02-02 02:02:02", "2003-03-03 03:03:03" ), tz = "UTC", format = "%Y-%m-%d %H:%M:%S" ) posct <- as.POSIXct(poslt) date <- as.Date(poslt) expect_equal(second(poslt), c(1, 2, 3)) expect_equal(second(posct), c(1, 2, 3)) expect_equal(second(date), c(0, 0, 0)) expect_equal(minute(poslt), c(1, 2, 3)) expect_equal(minute(posct), c(1, 2, 3)) expect_equal(minute(date), c(0, 0, 0)) expect_equal(hour(poslt), c(1, 2, 3)) expect_equal(hour(posct), c(1, 2, 3)) expect_equal(hour(date), c(0, 0, 0)) expect_equal(mday(poslt), c(1, 2, 3)) expect_equal(mday(posct), c(1, 2, 3)) expect_equal(mday(date), c(1, 2, 3)) expect_equal(wday(poslt), c(2, 7, 2)) expect_equal(wday(posct), c(2, 7, 2)) expect_equal(wday(date), c(2, 7, 2)) expect_equal(yday(poslt), c(1, 33, 62)) expect_equal(yday(posct), c(1, 33, 62)) expect_equal(yday(date), c(1, 33, 62)) expect_equal(week(poslt), c(1, 5, 9)) expect_equal(week(posct), c(1, 5, 9)) expect_equal(week(date), c(1, 5, 9)) expect_equal(isoweek(poslt), c(1, 5, 10)) expect_equal(isoweek(posct), c(1, 5, 10)) expect_equal(isoweek(date), c(1, 5, 10)) expect_equal(month(poslt), c(1, 2, 3)) expect_equal(month(posct), c(1, 2, 3)) expect_equal(month(date), c(1, 2, 3)) expect_equal(year(poslt), c(2001, 2002, 2003)) expect_equal(year(posct), c(2001, 2002, 2003)) expect_equal(year(date), c(2001, 2002, 2003)) expect_equal(date(poslt), as.Date(c("2001-01-01", "2002-02-02", "2003-03-03"))) expect_equal(date(posct), as.Date(c("2001-01-01", "2002-02-02", "2003-03-03"))) expect_equal(date(date), as.Date(c("2001-01-01", "2002-02-02", "2003-03-03"))) expect_match(tz(poslt), "UTC") expect_match(tz(posct), "UTC") expect_match(tz(date), "UTC") }) test_that("accessors<- handle vectors", { poslt <- as.POSIXlt(c( "1999-01-01 00:00:00", "1999-01-01 00:00:00", "1999-01-01 00:00:00" ), tz = "UTC", format = "%Y-%m-%d %H:%M:%S") posct <- as.POSIXct(poslt) date <- as.Date(poslt) wday(poslt) <- c(2, 7, 2) wday(posct) <- c(2, 7, 2) wday(date) <- c(2, 7, 2) expect_equal(wday(poslt), c(2, 7, 2)) expect_equal(wday(posct), c(2, 7, 2)) expect_equal(wday(date), c(2, 7, 2)) second(poslt) <- 1:3 second(posct) <- 1:3 second(date) <- 1:3 expect_equal(second(poslt), c(1, 2, 3)) expect_equal(second(posct), c(1, 2, 3)) expect_equal(second(date), c(1, 2, 3)) minute(poslt) <- 1:3 minute(posct) <- 1:3 minute(date) <- 1:3 expect_equal(minute(poslt), c(1, 2, 3)) expect_equal(minute(posct), c(1, 2, 3)) expect_equal(minute(date), c(1, 2, 3)) hour(poslt) <- 1:3 hour(posct) <- 1:3 hour(date) <- 1:3 expect_equal(hour(poslt), c(1, 2, 3)) expect_equal(hour(posct), c(1, 2, 3)) expect_equal(hour(date), c(1, 2, 3)) mday(poslt) <- 1:3 mday(posct) <- 1:3 mday(date) <- 1:3 expect_equal(mday(poslt), c(1, 2, 3)) expect_equal(mday(posct), c(1, 2, 3)) expect_equal(mday(date), c(1, 2, 3)) wday(poslt) <- c(2, 7, 2) wday(posct) <- c(2, 7, 2) wday(date) <- c(2, 7, 2) expect_equal(wday(poslt), c(2, 7, 2)) expect_equal(wday(posct), c(2, 7, 2)) expect_equal(wday(date), c(2, 7, 2)) yday(poslt) <- c(1, 33, 62) yday(posct) <- c(1, 33, 62) yday(date) <- c(1, 33, 62) expect_equal(yday(poslt), c(1, 33, 62)) expect_equal(yday(posct), c(1, 33, 62)) expect_equal(yday(date), c(1, 33, 62)) week(poslt) <- c(1, 5, 9) week(posct) <- c(1, 5, 9) week(date) <- c(1, 5, 9) expect_equal(week(poslt), c(1, 5, 9)) expect_equal(week(posct), c(1, 5, 9)) expect_equal(week(date), c(1, 5, 9)) month(poslt) <- c(1, 2, 3) month(posct) <- c(1, 2, 3) month(date) <- c(1, 2, 3) expect_equal(month(poslt), c(1, 2, 3)) expect_equal(month(posct), c(1, 2, 3)) expect_equal(month(date), c(1, 2, 3)) year(poslt) <- c(2001, 2002, 2003) year(posct) <- c(2001, 2002, 2003) year(date) <- c(2001, 2002, 2003) expect_equal(year(poslt), c(2001, 2002, 2003)) expect_equal(year(posct), c(2001, 2002, 2003)) expect_equal(year(date), c(2001, 2002, 2003)) }) test_that("accessors handle Period objects", { per <- period(seconds = 1, minutes = 2, hours = 3, days = 4, months = 5, years = 6) pers <- c(per, per) expect_equal(second(per), 1) expect_equal(minute(per), 2) expect_equal(hour(per), 3) expect_equal(day(per), 4) expect_equal(month(per), 5) expect_equal(year(per), 6) expect_error(date(per), "date is undefined for Period objects") expect_equal(second(pers), c(1, 1)) expect_equal(minute(pers), c(2, 2)) expect_equal(hour(pers), c(3, 3)) expect_equal(day(pers), c(4, 4)) expect_equal(month(pers), c(5, 5)) expect_equal(year(pers), c(6, 6)) expect_error(date(pers), "date is undefined for Period objects") second(per) <- 2 minute(per) <- 3 hour(per) <- 4 day(per) <- 5 month(per) <- 6 year(per) <- 7 expect_equal(per@.Data, 2) expect_equal(per@minute, 3) expect_equal(per@hour, 4) expect_equal(per@day, 5) expect_equal(per@month, 6) expect_equal(per@year, 7) second(pers) <- c(2, 3) minute(pers) <- c(3, 4) hour(pers) <- c(4, 5) day(pers) <- c(5, 6) month(pers) <- c(6, 7) year(pers) <- c(7, 8) expect_equal(pers@.Data, c(2, 3)) expect_equal(pers@minute, c(3, 4)) expect_equal(pers@hour, c(4, 5)) expect_equal(pers@day, c(5, 6)) expect_equal(pers@month, c(6, 7)) expect_equal(pers@year, c(7, 8)) }) test_that( "days in month works for non leap years", { x <- seq(ymd("2011-01-01"), ymd("2011-12-01"), "1 month") expected <- c( Jan = 31L, Feb = 28L, Mar = 31L, Apr = 30L, May = 31L, Jun = 30L, Jul = 31L, Aug = 31L, Sep = 30L, Oct = 31L, Nov = 30L, Dec = 31L ) expect_equal(days_in_month(x), expected) } ) test_that( "days in month works for leap years", { x <- seq(ymd("2012-01-01"), ymd("2012-12-01"), "1 month") expected <- c( Jan = 31L, Feb = 29L, Mar = 31L, Apr = 30L, May = 31L, Jun = 30L, Jul = 31L, Aug = 31L, Sep = 30L, Oct = 31L, Nov = 30L, Dec = 31L ) expect_equal(days_in_month(x), expected) } )