context("CSTools::CST_CategoricalEnsCombination tests")

##############################################
# dat1
exp_obs <- lonlat_temp
exp <- exp_obs[[1]]
obs <- exp_obs[[2]]
exp$data <- ClimProjDiags::Subset(exp_obs[[1]]$data, c('member', 'lon', 'lat'), list(1:4, 1:4, 1:4))
obs$data <- ClimProjDiags::Subset(exp_obs[[2]]$data, c('lon', 'lat'), list(1:4, 1:4))
exp$lon <- exp$lon[1:4]
exp$lat <- exp$lat[1:4]
obs$lon <- obs$lon[1:4]
obs$lat <- obs$lat[1:4]

# dat2
exp2 <- exp
exp2$data[1, 2, 1, 1, 1, 1] <- NA
obs2 <- obs
obs2$data[1, 1, 2, 1, 1, 1] <- NA

##############################################

test_that("Sanity checks", {
  expect_error(
    CST_CategoricalEnsCombination(exp = 1),
    "Parameter 'exp' and 'obs' must be of the class 's2dv_cube', "
  )
  expect_error(
    CST_CategoricalEnsCombination(obs = 1),
    c("argument \"exp\" is missing, with no default")
  )
  cal <- CST_CategoricalEnsCombination(exp = exp, obs = obs)
  expect_equal(
    length(cal),
    9
  )
  expect_equal(
    as.numeric(dim(cal$data)[c(1, 2)]),
    c(1, 1)
  )
  expect_equal(
    as.numeric(dim(cal$data)[c(-1, -2, -3)]),
    as.numeric(dim(exp$data)[c(-1, -2)])
  )
  expect_equal(
    names(dim(cal$data))[c(-1, -2, -3)],
    names(dim(exp$data))[c(-1, -2)]
  )
  expect_equal(
    names(dim(cal$data))[c(1, 2, 3)],
    c("dataset", "member", "category")
  )
  expect_equal(
    cal$lat, 
    exp$lat
  )
  expect_equal(
    cal$lat, 
    obs$lat
  )
  expect_equal(
    cal$lon, 
    exp$lon
  )
  expect_equal(
    cal$lon, 
    obs$lon
  )
  expect_error(
    CST_CategoricalEnsCombination(exp = exp, obs = exp),
    "The length of the dimension 'member' in the component 'data' "
  )
  expect_warning(
    CST_CategoricalEnsCombination(exp = exp2, obs = obs),
    "Parameter 'exp' contains NA values."
  )
  expect_warning(
    CST_CategoricalEnsCombination(exp = exp, obs = obs2),
    "Parameter 'obs' contains NA values."
  )
  expect_warning(
    CST_CategoricalEnsCombination(exp = exp2, obs = obs2),
    "Parameter 'obs' contains NA values", "Parameter 'exp' contains NA values."
  )
})  
