tests/testthat/test-evid3.R

rxodeTest(
  {
    context("evid=3 solves")

    test_that("evid=3 reset time", {
      mod1 <- RxODE({
        KA <- 2.94E-01
        CL <- 1.86E+01
        V2 <- 4.02E+01
        Q <- 1.05E+01
        V3 <- 2.97E+02
        Kin <- 1
        Kout <- 1
        EC50 <- 200
        C2 <- centr / V2
        C3 <- peri / V3
        d / dt(depot) <- -KA * depot
        d / dt(centr) <- KA * depot - CL * C2 - Q * C2 + Q * C3
        d / dt(peri) <- Q * C2 - Q * C3
        d / dt(eff) <- Kin - Kout * (1 - C2 / (EC50 + C2)) * eff
        eff(0) <- 1
        printf("%f\n", time)
      })

      et_1 <-
        et(dose = 10000, addl = 0, ii = 0) %>%
        et(0:8)

      et_reset <- et(evid = 3)

      et_2 <-
        et(dose = 20000, addl = 0, ii = 0) %>%
        et(0:8)

      et <- dplyr::bind_rows(et_1, et_reset, et_2)

      t <- tempfile("test-evid3", fileext = ".csv")

      .rxWithSink(t, {
        cat("t\n")
        x <- rxSolve(mod1, et)
      })

      d <- read.csv(t)
      unlink(t)

      expect_true(all(d$t < 9))
      expect_true(all(x$time < 9))
      expect_true(!all(x$C2[x$resetno == 1] == x$C2[x$resetno == 2]))
      expect_true(x$eff[1] == 1)
    })


    test_that("evid=3 reset time mixed", {
      mod1 <- RxODE({
        KA <- 2.94E-01
        CL <- 1.86E+01
        V2 <- 4.02E+01
        Q <- 1.05E+01
        V3 <- 2.97E+02
        Kin <- 1
        Kout <- 1
        EC50 <- 200
        C2 <- linCmt()
        d / dt(eff) <- Kin - Kout * (1 - C2 / (EC50 + C2)) * eff
        eff(0) <- 1
        printf("%f\n", time)
      })

      et_1 <-
        et(dose = 10000, addl = 0, ii = 0) %>%
        et(0:8)

      et_reset <- et(evid = 3)

      et_2 <-
        et(dose = 20000, addl = 0, ii = 0) %>%
        et(0:8)

      et <- dplyr::bind_rows(et_1, et_reset, et_2)
      et

      t <- tempfile("test-evid3", fileext = ".csv")

      .rxWithSink(t, {
        cat("t\n")
        x <- rxSolve(mod1, et)
      })

      d <- read.csv(t)
      unlink(t)

      expect_true(all(d$t < 9))
      expect_true(all(x$time < 9))
      expect_true(!all(x$C2[x$resetno == 1] == x$C2[x$resetno == 2]))
      expect_true(x$eff[1] == 1)
    })



    test_that("evid=3 reset time linCmt", {
      mod1 <- RxODE({
        KA <- 2.94E-01
        CL <- 1.86E+01
        V2 <- 4.02E+01
        Q <- 1.05E+01
        V3 <- 2.97E+02
        Kin <- 1
        Kout <- 1
        EC50 <- 200
        C2 <- linCmt()
        printf("%f\n", time)
      })

      et1 <-
        # et(amount.units='mg', time.units='hours') %>%
        et(dose = 10000, addl = 0, ii = 0) %>%
        # et(amt=20000, nbr.doses=5, start.time=120, dosing.interval=24) %>%
        et(0:8)

      et_reset <- et(evid = 3)

      et_2 <-
        # et(amount.units='mg', time.units='hours') %>%
        et(dose = 20000, addl = 0, ii = 0) %>%
        # et(amt=20000, nbr.doses=5, start.time=120, dosing.interval=24) %>%
        et(0:8)

      et <- dplyr::bind_rows(et1, et_reset, et_2)

      t <- tempfile("test-evid3", fileext = ".csv")

      .rxWithSink(t, {
        cat("t\n")
        x <- rxSolve(mod1, et)
      })

      d <- read.csv(t)
      unlink(t)

      expect_true(all(d$t < 9))
      expect_true(all(x$time < 9))
      expect_true(!all(x$C2[x$resetno == 1] == x$C2[x$resetno == 2]))
    })

    test_that("warning for unsorted data with evid=3", {
      mod1 <- RxODE({
        KA <- 2.94E-01
        CL <- 1.86E+01
        V2 <- 4.02E+01
        Q <- 1.05E+01
        V3 <- 2.97E+02
        Kin <- 1
        Kout <- 1
        EC50 <- 200
        C2 <- linCmt()
      })

      et1 <-
        et(dose = 10000, addl = 0, ii = 0) %>%
        et(0:8)

      etReset <- et(evid = 3)

      et2 <-
        et(dose = 20000, addl = 0, ii = 0) %>%
        et(0:8)

      et <- dplyr::bind_rows(et1, etReset, et2)

      et$time[5] <- 9

      x <- expect_warning(rxSolve(mod1, et))

      expect_false(any(names(x) == "resetno"))
    })
  },
  test = "lvl2"
)

Try the RxODE package in your browser

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

RxODE documentation built on March 23, 2022, 9:06 a.m.