tests/testthat/test-simulate_bolus.R

library(testthat)

context("Test the simulate method with boluses")

seed <- 1
source(file.path(getwd(), test_path(), "test-utils.R"))

test_that("Simulate a bolus", {
  model <- model_suite$testing$nonmem$advan4_trans4
  regFilename <- "simple_bolus"

  dataset <- Dataset(1) %>%
    add(Bolus(time = 0, amount = 1000, compartment = 1)) %>%
    add(Observations(times = seq(0, 24, by = 0.5)))

  dataset_regression_test(dataset, model, seed = seed, filename = regFilename)

  simulation <- expression(simulate(model = model, dataset = dataset, dest = destEngine, seed = seed))
  test <- expression(
    expect_equal(nrow(results), 49),
    output_regression_test(results, output = "CP", filename = regFilename),
    expect_true(all(c("std_campsis_tbl", "campsis_tbl") %in% class(results)))
  )
  campsis_test(simulation, test, env = environment())
})

test_that("Simulate a bolus, single-labelled arm", {
  model <- model_suite$testing$nonmem$advan4_trans4
  regFilename <- "simple_bolus"

  dataset <- Dataset(1, label = "My Arm") %>%
    add(Bolus(time = 0, amount = 1000, compartment = "DEPOT")) %>%
    add(Observations(times = seq(0, 24, by = 0.5)))

  simulation <- expression(simulate(model = model, dataset = dataset, dest = destEngine, seed = seed))
  test <- expression(
    expect_equal(nrow(results), 49),
    output_regression_test(results, output = "CP", filename = regFilename),
    expect_equal(unique(results$ARM), "My Arm") # Check that the arm label is present
  )
  campsis_test(simulation, test, env = environment())
})

test_that("Simulate a bolus, 2 arms", {
  model <- model_suite$testing$nonmem$advan4_trans4
  regFilename <- "bolus_2arms"

  arm1 <- Arm(1, subjects = 10) %>%
    add(Bolus(time = 0, amount = 1000, compartment = "DEPOT")) %>%
    add(Observations(times = seq(0, 24, by = 0.5)))

  arm2 <- Arm(2, subjects = 10) %>%
    add(Bolus(time = 0, amount = 2000, compartment = "DEPOT")) %>%
    add(Observations(times = seq(0, 24, by = 0.5)))

  dataset <- Dataset() %>%
    add(arm1) %>%
    add(arm2)

  dataset_regression_test(dataset, model, seed = seed, filename = regFilename)

  simulation <- expression(model %>% simulate(dataset, dest = destEngine, seed = seed))
  test <- expression(
    expect_equal(nrow(results), dataset %>% length() * 49),
    output_regression_test(results, output = "CP", filename = regFilename)
  )
  campsis_test(simulation, test, env = environment())
})

test_that("Simulate a bolus, 2 labelled arms", {
  model <- model_suite$testing$nonmem$advan4_trans4
  regFilename <- "bolus_2arms"

  arm1 <- Arm(1, subjects = 10, label = "TRT 1") %>%
    add(Bolus(time = 0, amount = 1000, compartment = 1)) %>%
    add(Observations(times = seq(0, 24, by = 0.5)))

  arm2 <- Arm(2, subjects = 10, label = "TRT 2") %>%
    add(Bolus(time = 0, amount = 2000, compartment = 1)) %>%
    add(Observations(times = seq(0, 24, by = 0.5)))

  dataset <- Dataset() %>%
    add(c(arm1, arm2))

  simulation <- expression(model %>% simulate(dataset, dest = destEngine, seed = seed))
  test <- expression(
    expect_equal(nrow(results), dataset %>% length() * 49),
    output_regression_test(results, output = c("CP", "ARM"), filename = regFilename)
  )
  campsis_test(simulation, test, env = environment())
})

test_that("Simulate multiple doses, with and without the repeat option", {
  # We disable IIV since this is not the topic of this test
  model <- model_suite$testing$nonmem$advan4_trans4 %>%
    disable("IIV")
  regFilename <- "multiple_doses_repeat_option"

  # 4 days ON / 3 days OFF for 3 weeks
  schedule1 <- CyclicSchedule(duration = weeks(1), repetitions = 2)
  schedule2 <- RepeatAtSchedule(times = c(weeks(1), weeks(2)))
  expectedTimes <- c(c(0, 24, 48, 72), c(0, 24, 48, 72) + weeks(1), c(0, 24, 48, 72) + weeks(2))

  arm1 <- Arm(1, subjects = 1, label = "TRT 1") %>%
    add(Bolus(time = 0, amount = 1000, compartment = "DEPOT", ii = 24, addl = 3, rep = schedule1))

  arm2 <- Arm(2, subjects = 1, label = "TRT 2") %>%
    add(Bolus(time = 0, amount = 1000, compartment = "DEPOT", ii = 24, addl = 3, rep = schedule2))

  arm3 <- Arm(3, subjects = 1, label = "TRT 3") %>%
    add(Bolus(time = expectedTimes, amount = 1000, compartment = "DEPOT"))

  dataset <- Dataset() %>%
    add(c(arm1, arm2, arm3)) %>%
    add(Observations(times = seq(0, weeks(3), by = 1)))

  # results <- simulate(model=model, dataset=dataset, dest="mrgsolve", seed=1)
  # spaghettiPlot(results, "CP", "ARM") +
  #   ggplot2::facet_wrap(~ARM, ncol=1)

  simulation <- expression(simulate(model = model, dataset = dataset, dest = destEngine, seed = seed))
  test <- expression(
    resultsArm1 <- results %>% dplyr::filter(.data$ARM == "TRT 1") %>% dplyr::mutate(ID = 0),
    resultsArm2 <- results %>% dplyr::filter(.data$ARM == "TRT 2") %>% dplyr::mutate(ID = 0),
    resultsArm3 <- results %>% dplyr::filter(.data$ARM == "TRT 3") %>% dplyr::mutate(ID = 0),
    output_regression_test(resultsArm1, output = c("CP"), filename = regFilename),
    output_regression_test(resultsArm2, output = c("CP"), filename = regFilename),
    output_regression_test(resultsArm3, output = c("CP"), filename = regFilename)
  )
  campsis_test(simulation, test, env = environment())
})

Try the campsis package in your browser

Any scripts or data that you put into this service are public.

campsis documentation built on Aug. 5, 2026, 9:07 a.m.