tests/testthat/test-rdist_trng.R

KIND <- "yarn4"
KIND_CLASS <- getFromNamespace(KIND, "rTRNG")
SEED <- 117L
SAMPLES <- 15L
SAMPLES_PAR <- 1000L


test_rdist <- function(rdist, ...) {

  rdist_trng <- sprintf("%s_trng", rdist)
  context(rdist_trng)
  rdist_fun <- getFromNamespace(rdist_trng, "rTRNG")

  test_that(paste(rdist_trng, "returns the correct number of samples"), {
    TRNGkind(KIND)
    TRNGseed(SEED)
    expect_identical(
      length(rdist_fun(SAMPLES, ...)),
      SAMPLES
    )
  })

  test_that(paste(rdist_trng, "works with explicit 'engine' argument"), {
    TRNGkind(KIND)
    TRNGseed(SEED)
    e <- KIND_CLASS$new(SEED)
    expect_identical(
      rdist_fun(SAMPLES, ...),
      rdist_fun(SAMPLES, ..., engine = e)
    )
  })

  test_that(paste(rdist_trng, "parallel genration via 'parallelGrain' works"), {
    # CRAN policies: If running a package uses multiple threads/cores it must
    # never use more than two simultaneously
    RcppParallel::setThreadOptions(numThreads = 2)
    TRNGkind(KIND)
    TRNGseed(SEED)
    x_serial <- rdist_fun(SAMPLES_PAR, ...)
    TRNGseed(SEED)
    x_parallel <- rdist_fun(SAMPLES_PAR, ..., parallelGrain = 50L)
    expect_identical(
      x_serial, x_parallel,
      info = "TRNG.Random current engine"
    )
    e <- KIND_CLASS$new(SEED)
    x_serial <- rdist_fun(SAMPLES_PAR, ..., engine = e)
    e$seed(SEED)
    x_parallel <- rdist_fun(SAMPLES_PAR, ..., engine = e, parallelGrain = 50L)
    expect_identical(
      x_serial, x_parallel,
      info = "explicit engine"
    )
  })

}


test_rdist("runif", min = 0, max = 1)
test_rdist("rnorm", mean = 0, sd = 1)
test_rdist("rlnorm", meanlog = 0, sdlog = 1)
test_rdist("rbinom", size = 1L, prob = 0.5)
test_rdist("rpois", lambda = 4)
miraisolutions/rTRNG documentation built on Feb. 4, 2024, 7:35 p.m.