context("Generic tests")
test_that("Sanity checks", {
  expect_error(
    CST_MergeDims(data = 1),
    paste0("Parameter 'data' must be of the class 's2dv_cube', ",
           "as output by CSTools::CST_Load."))
data <- list(data = 1:10)
class(data) <- 's2dv_cube'
  expect_error(
    CST_MergeDims(data = data),
    paste0("Parameter 'data' must have dimensions."))

  data <- 1 : 20
  dim(data) <- c(time = 20)
  data <- list(data = data)
  class(data) <- 's2dv_cube'
  expect_error(
    CST_MergeDims(data = data),
    "Parameter 'merge_dims' must match with dimension names in parameter 'data'.")
  expect_error(
    CST_MergeDims(data = data, merge_dims = 1),
    paste0("Parameter 'merge_dims' must be a character vector indicating the names",
           " of the dimensions to be merged."))
  expect_error(
    CST_MergeDims(data = data, merge_dims = 'time'),
    "Parameter 'merge_dims' must be of length two.")
  expect_error(
    CST_MergeDims(data = data, merge_dims = c('time', 'sdates')),
    paste0("Parameter 'merge_dims' must match with dimension ",
             "names in parameter 'data'."))

  exp <- 1 : 20
  dim(exp) <- c(time = 10, lat = 2)
  exp <- list(data = exp)
  class(exp) <- 's2dv_cube'
  expect_equal(
    CST_MergeDims(data = exp, merge_dims = c('time', 'lat')), data)
 
  expect_warning(
    CST_MergeDims(data = exp, merge_dims = c('time', 'lat', 'lon')),
    paste0("Only two dimensions can be merge, only the first two dimension",
           " will be used. To merge further dimensions consider to use this ",
           "function multiple times."))
  expect_warning(
    CST_MergeDims(data = exp, merge_dims = c('time', 'lat'), rename_dim = c('lat', 'lon')),
    paste0("Parameter 'rename_dim' has length greater than 1 and only the ",
           "first element will be used."))
  names(dim(data$data)) <- 'Dim1'
  expect_equal(
    CST_MergeDims(data = exp, merge_dims = c('time', 'lat'), rename_dim = 'Dim1'), 
    data)

  expect_equal(
    CST_MergeDims(data = exp, merge_dims = c('time', 'lat'),
                  rename_dim = 'Dim1', na.rm = TRUE), data)

  exp$data[1,] <- NA
  data <- c(2 : 10, 12 : 20)
  dim(data) <- c(Dim1 = 18)
  data <- list(data = data)
  class(data) <- 's2dv_cube'
  expect_equal(
    CST_MergeDims(data = exp, merge_dims = c('time', 'lat'),
                  rename_dim = 'Dim1', na.rm = TRUE), data)
})
