rxTest({
  test_that("Test ui solve", {

    # Step 1 - Create a model specification
    f <- function() {
      ini({
        KA <- .291
        CL <- 18.6
        V2 <- 40.2
        Q <- 10.5
        V3 <- 297.0
        Kin <- 1.0
        Kout <- 1.0
        EC50 <- 200.0
      })
      model({
        # A 4-compartment model, 3 PK and a PD (effect) compartment
        # (notice state variable names 'depot', 'centr', 'peri', 'eff')
        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
      })
    }

    u <- f()

    # this pre-compiles and displays the simulation model
    u$simulationModel

    # Step 2 - Create the model input as an EventTable,
    # including dosing and observation (sampling) events

    # QD (once daily) dosing for 5 days.

    qd <- eventTable(amount.units = "ug", time.units = "hours")
    qd$add.dosing(dose = 10000, nbr.doses = 5, dosing.interval = 24)

    # Sample the system hourly during the first day, every 8 hours
    # then after

    qd$add.sampling(0:24)
    qd$add.sampling(seq(from = 24 + 8, to = 5 * 24, by = 8))

    # Step 3 - set starting parameter estimates and initial
    # values of the state


    # Step 4 - Fit the model to the data
    expect_error(solve(u, qd), NA)

    u1 <- u$simulationModel

    expect_error(solve(u1, qd), NA)

    u2 <- u$simulationIniModel

    expect_error(solve(u2, qd), NA)

  })

  test_that("grouped rxEt ui data source stays compressed", {
    ev <- eventTable()
    ev$add.dosing(dose = 100, nbr.doses = 2, dosing.interval = 12)
    ev$add.sampling(c(0, 1, 2, 12, 13, 24))
    ev <- et(ev, id = 1:5000)

    uiData <- .rxSolveUiEventData(ev)
    full <- as.data.frame(ev)
    grp <- .etGetGroups(.rxEtEnv(ev))

    expect_true(is.data.frame(uiData))
    expect_equal(nrow(uiData), nrow(grp[[1]]$data))
    expect_lt(nrow(uiData), nrow(full))
    expect_equal(unique(uiData$id), 1L)
  })
})
