test_that("g_xgboost gives the same result as plain xgboost",{
  # data
  d <- sim_single_stage(1000, seed=1)
  x <- d[,c("Z", "L", "B")]
  y <- as.logical(d[["A"]])

  set.seed(1)
  bst <- xgboost::xgboost(x = x, y = y,
                 max_depth = 2, learning_rate = 1, nrounds = 2,
                 objective = "binary:logistic",
                 verbosity = 0)

  pred <- predict(bst, newdata = x)

  # policy data
  pd <- policy_data(d,
                    action = "A",
                    covariates = list("Z", "B", "L"),
                    utility = "U")

  set.seed(1)
  g_fun <- fit_g_functions(pd,
                           g_models = g_xgboost(max_depth = 2,
                                                learning_rate = 1,
                                                nrounds = 2))

  pred_polle <- predict(g_fun, pd)

  expect_equal(
    unname(pred),
    pred_polle[["g_1"]]
  )

})

## test_that("g_xgboost gives the same result as SL.xgboost", {
##   # policy data
##   d <- sim_single_stage(1000, seed=1)
##   pd <- policy_data(d,
##                     action="A",
##                     covariates = list("Z", "B", "L"),
##                     utility="U")

##   g_fun <- fit_g_functions(pd,
##                            g_models = g_xgboost(max_depth = 2,
##                                                 learning_rate = 1,
##                                                 nrounds = 1))
##   pred_1 <- predict(g_fun, pd)

##   xgboost_tune <- list(max_depth = 2,
##                        shrinkage = 1, # eta
##                        ntrees  = 1) # nrounds
##   sl_learner <- create.Learner("SL.xgboost",tune = xgboost_tune)
##   g_fun_sl <- fit_g_functions(pd,
##                               g_models = g_sl(SL.library = sl_learner$names, env = environment()))
##   pred_2 <- predict(g_fun_sl, pd)

##   expect_equal(
##     pred_1,
##     pred_2
##   )

## })

test_that("g_xgboost tunes parameters",{
  # data
  d <- sim_single_stage(1000, seed=1)
  # policy data
  pd <- policy_data(d,
                    action="A",
                    covariates = list("Z", "B", "L"),
                    utility="U")

  set.seed(1)
  g_fun <- fit_g_functions(pd,
                           g_models = g_xgboost(max_depth = 2,
                                                learning_rate = c(0.3,1),
                                                nrounds = c(2,4)))

  expect_equal(
    length(g_fun$all_stages$g_model$cv_res$cv),
    3 * 2 * 2 * 2
  )

})
