tests/testthat/test-lhs-ifelse.R

if (!.Call(`_rxode2_isIntel`)) {
  # lhs for different compartments make sense

  et <- et() %>%
    et(amt = 3, addl = 5, ii = 8, cmt = "depot") %>%
    et(seq(0, 48, length.out = 200), cmt = "depot") %>%
    et(seq(0, 48, length.out = 200), cmt = "centr") %>%
    et(seq(0, 48, length.out = 200), cmt = "peri")

  ode.2c.ka <- rxode2({
    C2 <- centr / V
    C3 <- peri / V2
    d / dt(depot) <- -KA * depot
    d / dt(centr) <- KA * depot - CL * C2 - Q * C2 + Q * C3
    d / dt(peri) <- Q * C2 - Q * C3
    C4 <- CMT
    if (CMT == 1) {
      prd <- depot
    }
    if (CMT == 2) {
      prd <- centr
    }
    if (CMT == 3) {
      prd <- peri
    }
  })

  tmp <- etTrans(et, ode.2c.ka)

  test_that("multi-compartment solves", {
    s <- rxSolve(ode.2c.ka, params = c(V = 40, CL = 18, V2 = 297, Q = 10, KA = 0.3), et)
    expect_equal(sort(unique(s$C4)), c(1, 2, 3))
    expect_equal(s[s$C4 == 1, "prd"], s[s$C4 == 1, "depot"])
    expect_equal(s[s$C4 == 2, "prd"], s[s$C4 == 2, "centr"])
    expect_equal(s[s$C4 == 3, "prd"], s[s$C4 == 3, "peri"])
  })

  ## Now change cmt to an un-ordered factor.
  et <- as.data.frame(et)
  et$cmt <- factor(et$cmt, c("peri", "depot", "centr"), c("peri", "depot", "centr"))

  tmp <- etTrans(et, ode.2c.ka)

  test_that("multi-compartment solves", {
    s <- rxSolve(ode.2c.ka, params = c(V = 40, CL = 18, V2 = 297, Q = 10, KA = 0.3), et)
    expect_equal(sort(unique(s$C4)), c(1, 2, 3))
    expect_equal(s[s$C4 == 1, "prd"], s[s$C4 == 1, "depot"])
    expect_equal(s[s$C4 == 2, "prd"], s[s$C4 == 2, "centr"])
    expect_equal(s[s$C4 == 3, "prd"], s[s$C4 == 3, "peri"])
  })
}
nlmixr2/rxode2 documentation built on Jan. 11, 2025, 8:48 a.m.