tests/testthat/test-edits.R

# Define files to be tested -----------------------------------------------
ctrl_tab_1 <- xpdb_ex_pk %>% 
  mutate.xpose_data(DV = log(DV), .problem = 1) %>% 
  distinct.xpose_data(DV, .problem = 1) %>% 
  select.xpose_data(ID:TAD, DV, EVID, .problem = 1) %>% 
  rename.xpose_data(TSLD = TAD, .problem = 1) %>% 
  get_data(.problem = 1)

ctrl_tab_2 <- xpdb_ex_pk %>% 
  group_by(ID, SEX, .problem = 1) %>% 
  summarize(CMAX = max(DV), .problem = 1) %>% 
  ungroup(.problem = 1) %>% 
  get_data(.problem = 1) %>% 
  ungroup()

test_xpdb_1 <- vpc_data(xpdb_ex_pk, opt = vpc_opt(n_bins = 2), quiet = TRUE)
ctrl_xpdb_1 <- test_xpdb_1
ctrl_xpdb_1$special$data[[1]]$vpc_dat <- dplyr::filter(.data = ctrl_xpdb_1$special$data[[1]]$vpc_dat, bin == 2)

ctrl_list_vars_1 <- '\nList of available variables for problem no. 1 \n - Subject identifier (id)               : ID\n - Dependent variable (dv)               : DV\n - Independent variable (idv)            : TIME\n - Dose amount (amt)                     : AMT\n - Event identifier (evid)               : EVID\n - Model typical predictions (pred)      : PRED\n - Model individual predictions (ipred)  : IPRED\n - Model parameter (param)               : KA, CL, V, ALAG1\n - Eta (eta)                             : ETA1, ETA2, ETA3\n - Residuals (res)                       : CWRES, IWRES, RES, WRES\n - Categorical covariates (catcov)       : SEX, MED1, MED2\n - Continuous covariates (contcov)       : CLCR, AGE, WT\n - Compartment amounts (a)               : A1, A2\n - Not attributed (na)                   : DOSE, SS, II, CPRED, DV2\n\nList of available variables for problem no. 2 \n - Subject identifier (id)               : ID\n - Dependent variable (dv)               : DV\n - Independent variable (idv)            : TIME\n - Dose amount (amt)                     : AMT\n - Event identifier (evid)               : EVID\n - Model individual predictions (ipred)  : IPRED\n - Not attributed (na)                   : DOSE, SEX, CLCR, AGE, WT, DV2'

# Tests start here --------------------------------------------------------

test_that('xpdb_edits checks error properly', {
  expect_error(filter.xpose_data(.data = '1', ID == 110), regexp = 'Bad input')
  expect_error(filter.xpose_data(.data = xpdb_ex_pk, ID == 110, .problem = 99), 
               regexp = 'not found')
  expect_error(filter.xpose_data(.data = xpdb_ex_pk, .source = 'fake', ID == 110), regexp = 'not found')
  expect_error(filter.xpose_data(.data = xpdb_ex_pk, .source = c('ext', 'phi'), ID == 110), regexp = 'length 1')
  expect_error(filter.xpose_data(.data = xpdb_ex_pk, .source = 'special'))
})

test_that('xpdb_edits works properly', {
  expect_equal(filter.xpose_data(.data = xpdb_ex_pk, ID == 110, TIME > 10, .problem = 1) %>% 
                 get_data(.problem = 1), 
               xpdb_ex_pk %>% get_data(.problem = 1) %>% filter(.$ID == 110, .$TIME > 10))
  expect_equal(filter.xpose_data(.data = xpdb_ex_pk, ID == 110, .problem = 1, .source = 'phi') %>% 
                 slice.xpose_data(1:3, .source = 'phi') %>% 
                 mutate.xpose_data(TEST = 'Ok', .source = 'phi') %>% 
                 get_file(ext = 'phi', quiet = TRUE), 
               xpdb_ex_pk %>% get_file(ext = 'phi', quiet = TRUE) %>% filter(.$ID == 110) %>% 
                 slice(1:3) %>% mutate(TEST = 'Ok'))
  expect_equal(ctrl_tab_1, xpdb_ex_pk %>% 
                 get_data(.problem = 1) %>% 
                 mutate(DV = log(DV)) %>% 
                 distinct(DV, .keep_all = TRUE) %>% 
                 select(ID:TAD, DV, EVID) %>% 
                 rename(TSLD = TAD))
  expect_equal(ctrl_tab_2, xpdb_ex_pk %>% 
                 get_data(.problem = 1) %>% 
                 group_by(ID, SEX) %>% 
                 summarize(CMAX = max(DV)) %>% 
                 ungroup())
  expect_warning(test_xpdb_2 <- filter.xpose_data(.data = test_xpdb_1, bin == 2, .source = 'special', 
                                                  .where = c('fake1', 'fake2', 'vpc_dat'))$special$data[[1]],
                 regexp = 'elements fake1, fake2 not found in vpc continuous')
  expect_equal(test_xpdb_2, ctrl_xpdb_1$special$data[[1]])
})

test_that('variable added with mutate is available in all problems', {
  xpdb_mod <- mutate.xpose_data(xpdb_ex_pk, VAR = 1)
  expect_true(exists('VAR', xpdb_mod$data$data[[1]]))
  expect_true(exists('VAR', xpdb_mod$data$data[[2]]))
})

test_that('index is properly updated', {
  xpdb_mod <- mutate.xpose_data(.data = xpdb_ex_pk, TAD = NULL, DV2 = DV * 2)
  expect_equal(capture_output(list_vars(xpdb_mod, .problem = 1:2)), ctrl_list_vars_1)
})

test_that('irep works properly', {
  expect_message(irep_out <- irep(rep(1:5, time = 3), quiet = FALSE),
                 regexp = '3 simulations found')
  expect_equal(irep_out, rep(1:3, each = 5))
})

test_that('n() works', {
  xpdb_sum <- xpdb_ex_pk %>% group_by(ID, .problem = 1) %>% summarise(n(), .problem = 1)
  expect_equal(xpdb_sum %>% get_data(.problem = 1), 
               xpdb_ex_pk %>% get_data(.problem = 1) %>% group_by(ID) %>% summarise(n()))
  expect_equal(xpdb_ex_pk %>% mutate(N = 1:n(), .source = 'ext') %>% get_file(ext = 'ext', quiet = TRUE),
               xpdb_ex_pk %>% get_file(ext = 'ext', quiet = TRUE) %>% mutate(N = 1:n()))
})
guiastrennec/xpose documentation built on Feb. 16, 2024, 8:14 p.m.