context("Generic tests")
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")
  )
  library(zeallot)
  c(exp, obs) %<-% lonlat_data
  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' "
  )

  exp2 <- exp
  exp2$data[1, 2, 1, 1, 1, 1] <- NA
  expect_warning(
    CST_CategoricalEnsCombination(exp = exp2, obs = obs),
    "Parameter 'exp' contains NA values."
  )

  obs2 <- obs
  obs2$data[1, 1, 2, 1, 1, 1] <- NA
  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."
  )
})  
