rxTest({
  test_that("Zero variances; RxODE#299", {

    mod <- rxode2({
      eff(0) <- 1
      C2 <- centr / V2
      C3 <- peri / V3
      CL <- TCl * exp(eta.Cl) ## This is coded as a variable in the model
      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
      e <- eff + eff.err
      cp <- centr * (1 + cp.err)
    })

    ev <- et(amount.units = "mg", time.units = "hours") |>
      et(amt = 10000, cmt = "centr") |>
      et(0, 48, length.out = 100)

    ## Variability
    theta <- c(
      KA = 2.94E-01, TCl = 1.86E+01, V2 = 4.02E+01, # central
      Q = 1.05E+01, V3 = 2.97E+02, # peripheral
      Kin = 1, Kout = 1, EC50 = 200
    ) # effects

    omega <- lotri(eta.Cl ~ 0.4^2)
    sigma <- lotri(eff.err ~ 0.1, cp.err ~ 0.1)
    tmp <- matrix(rnorm(8^2), 8, 8)
    tMat <- tcrossprod(tmp, tmp) / (8^2)
    dimnames(tMat) <- list(NULL, names(theta))

    sim <- rxSolve(mod, theta, ev,
                   omega = omega, nSub = 100, sigma = sigma, thetaMat = tMat, nStud = 10,
                   dfSub = 10, dfObs = 100
                   )


    omega <- lotri(eta.Cl ~ 0)
    sigma <- lotri(eff.err ~ 0, cp.err ~ 0)

    tMat <- matrix(0, 8, 8)
    dimnames(tMat) <- list(NULL, names(theta))

    suppressMessages(expect_error(
      x <-
        rxSolve(
          mod, theta, ev,
          omega = omega, nSub = 100, sigma = sigma, thetaMat = tMat, nStud = 10,
          dfSub = 10, dfObs = 100
        ),
      NA
    ))

    expect_true(isNullZero(x$thetaMat))
    expect_true(isNullZero(x$omegaList))
    expect_true(isNullZero(x$sigmaList))
    expect_true(isNullZero(NULL))
  })
})
