context("Start() metadata reshaping") # When data is reshaping (e.g., time_across = 'sdate'), the corresponding attribute should be reshaped too. test_that("1. time across fyear, fyear depends on sdate", { suppressWarnings( data <- Start(dat = '/esarchive/exp/ecearth/a3w5/original_files/cmorfiles/DCPP/EC-Earth-Consortium/EC-Earth3/dcppA-hindcast/$member$/day/$var$/gr/v20210910/$var$_day_EC-Earth3_dcppA-hindcast_s$sdate$-$member$_gr_$fyear$.nc', var = 'tasmin', lat = indices(1), lon = indices(1), sdate = paste0(1960:1961), time = 62:426, ## Jan to Dec (initialised in Nov) time_across = 'fyear', merge_across_dims = TRUE, fyear = 'all', fyear_depends = 'sdate', member = 'r1i4p1f1', synonims = list(lat = c('lat','latitude'), lon = c('lon','longitude')), return_vars = list(lat = NULL, lon = NULL, time = c('sdate', 'fyear')), retrieve = TRUE) ) dates <- attr(data,'Variables')$common[['time']] expect_equal( dim(dates), c(sdate = 2, time = 365) ) expect_equal( dim(drop(data)), dim(dates) ) expect_equal( names(attributes(dates)), c('variables', 'dim', 'class', 'tzone') ) expect_equal( class(dates), c("POSIXct", "POSIXt") ) expect_equal( as.vector(dates[1, ]), as.vector(seq(as.POSIXct('1961-01-01 12:00:00', tz = 'UTC'), as.POSIXct('1961-12-31 12:00:00', tz = 'UTC'), by = 'day')) ) expect_equal( as.vector(dates[2, ]), as.vector(seq(as.POSIXct('1962-01-01 12:00:00', tz = 'UTC'), as.POSIXct('1962-12-31 12:00:00', tz = 'UTC'), by = 'day')) ) }) test_that("2. time across fyear, only one sdate", { suppressWarnings( data <- Start(dat = '/esarchive/exp/ecearth/a3w5/original_files/cmorfiles/DCPP/EC-Earth-Consortium/EC-Earth3/dcppA-hindcast/$member$/day/$var$/gr/v20210910/$var$_day_EC-Earth3_dcppA-hindcast_s$sdate$-$member$_gr_$fyear$.nc', var = 'tasmin', lat = indices(1), lon = indices(1), sdate = paste0(1960), time = 62:426, ## Jan to Dec (initialised in Nov) time_across = 'fyear', merge_across_dims = TRUE, fyear = 'all', # fyear_depends = 'sdate', member = 'r1i4p1f1', synonims = list(lat = c('lat','latitude'), lon = c('lon','longitude')), return_vars = list(lat = NULL, lon = NULL, time = c('fyear')), retrieve = TRUE) ) dates <- attr(data,'Variables')$common[['time']] expect_equal( dim(dates), c(time = 365) ) expect_equal( length(data), length(dates) ) expect_equal( as.vector(dates), as.vector(seq(as.POSIXct('1961-01-01 12:00:00', tz = 'UTC'), as.POSIXct('1961-12-31 12:00:00', tz = 'UTC'), by = 'day')) ) }) test_that("3. time across fyear, fyear depends on sdate, 1st fyear is empty, 3rd fyear has more indices than 2nd one, 1964 is leap year", { suppressWarnings( data <- Start(dat = '/esarchive/exp/ecearth/a3w5/original_files/cmorfiles/DCPP/EC-Earth-Consortium/EC-Earth3/dcppA-hindcast/$member$/day/$var$/gr/v20210910/$var$_day_EC-Earth3_dcppA-hindcast_s$sdate$-$member$_gr_$fyear$.nc', var = 'tasmin', lat = indices(1), lon = indices(1), sdate = paste0(1960:1961), time = 700:860, ## initialised in Nov time_across = 'fyear', merge_across_dims = TRUE, fyear = 'all', fyear_depends = 'sdate', member = 'r1i4p1f1', synonims = list(lat = c('lat','latitude'), lon = c('lon','longitude')), return_vars = list(lat = NULL, lon = NULL, time = c('sdate', 'fyear')), retrieve = TRUE) ) dates <- attr(data,'Variables')$common[['time']] expect_equal( dim(dates), c(sdate = 2, time = 161) ) expect_equal( names(attributes(dates)), c('variables', 'dim', 'class', 'tzone') ) expect_equal( class(dates), c("POSIXct", "POSIXt") ) expect_equal( as.vector(dates[1, ]), as.vector(seq(as.POSIXct('1962-10-01 12:00:00', tz = 'UTC'), as.POSIXct('1963-03-10 12:00:00', tz = 'UTC'), by = 'day')) ) expect_equal( as.vector(dates[2, ]), as.vector(seq(as.POSIXct('1963-10-01 12:00:00', tz = 'UTC'), as.POSIXct('1964-03-09 12:00:00', tz = 'UTC'), by = 'day')) ) })