tests/testthat/test_parallel.R

context("Compboost parallel")

test_that("If parallel execution speeds up the algorithm", {
  if (FALSE) {
    if ((parallel::detectCores() >= 2) && (Sys.info()["sysname"] != "Darwin")) {

      feats = 40
      n = 10000
      mstop = 500
      mydata = as.data.frame(do.call(cbind, lapply(seq_len(feats + 1), function(x) { rnorm(n) })))
      names(mydata) = c("target", paste0("feat", seq_len(feats)))

      optimizer = expect_silent(OptimizerCoordinateDescent$new())

      time1 = proc.time()

      cboost1 = expect_silent(Compboost$new(data = mydata, target = "target", optimizer = optimizer,
          loss = LossQuadratic$new(), learning_rate = 0.01))
      nuisance = lapply(names(mydata)[-1], function(feat) cboost1$addBaselearner(feat, "spline", BaselearnerPSpline))
      cboost1$addLogger(logger = LoggerTime, use_as_stopper = FALSE, logger_id = "time",
        max_time = 0, time_unit = "seconds")

      expect_output(cboost1$train(mstop))

      time1 = (proc.time() - time1)[3]

      optimizer = expect_silent(OptimizerCoordinateDescent$new(2))

      time2 = proc.time()

      cboost2 = expect_silent(Compboost$new(data = mydata, target = "target", optimizer = optimizer,
          loss = LossQuadratic$new(), learning_rate = 0.01))
      nuisance = lapply(names(mydata)[-1], function (feat) cboost2$addBaselearner(feat, "spline", BaselearnerPSpline))
      cboost2$addLogger(logger = LoggerTime, use_as_stopper = FALSE, logger_id = "time",
        max_time = 0, time_unit = "seconds")

      expect_output(cboost2$train(mstop))

      cboost2$train(mstop)
      time2 = (proc.time() - time2)[3]

      expect_true(time1 > time2)
      expect_true(tail(cboost1$getLoggerData()$time, n = 1) > tail(cboost2$getLoggerData()$time, n = 1))
      expect_equal(cboost1$getSelectedBaselearner(), cboost2$getSelectedBaselearner())
      expect_equal(cboost1$predict(), cboost2$predict())
      expect_equal(cboost1$getCoef(), cboost2$getCoef())
    }
  }
})
schalkdaniel/compboost documentation built on April 15, 2023, 9:03 p.m.