--- a +++ b/tests/testthat/test_data.R @@ -0,0 +1,161 @@ +context("Test outbreaker data and settings") + + +## test data ## +test_that("test: data are processed fine", { + ## skip on CRAN + skip_on_cran() + + + ## get data + x <- fake_outbreak + out <- outbreaker_data(dates = x$onset, dna = x$dna, w_dens = x$w) + out_nodna <- outbreaker_data(dates = x$onset, w_dens = x$w) + + ## check output + expect_is(out, "list") + expect_is(out$D, "matrix") + expect_equal(out$max_range, 11) + expect_equal(out_nodna$L, 0) + expect_equal(out$L, 1e4) + expect_equal(out$w_dens, out$f_dens) + expect_equal(out$log_w_dens[1,], out$log_f_dens) + expect_error(outbreaker_data(dates = 1, w_dens = c(0,-1)), + "w_dens has negative entries") + + expect_error(outbreaker_data(dates = 1, w_dens = c(0,1), f_dens = c(0,-1)), + "f_dens has negative entries") + + wrong_lab_dna <- x$dna + rownames(wrong_lab_dna) <- paste0("host_", seq_len(nrow(wrong_lab_dna))) + expect_error(outbreaker_data(dates = x$onset, dna = wrong_lab_dna, w_dens = x$w), + "DNA sequence labels don't match case ids") + + +}) + + + + + + + +test_that("outbreaker_data accepts epicontacts and case labelling", { + + ## skip on CRAN + skip_on_cran() + + ## outbreaker time, ctd, no DNA ## + ## analysis + set.seed(1) + + ## get data + x <- fake_outbreak + + ids_char <- replicate(length(fake_outbreak$sample), + paste(sample(letters, 5, TRUE), collapse = "")) + + ids_num <- sample.int(1000, length(fake_outbreak$sample), FALSE) + + ## check for character and numeric ids + for(ids in list(ids_char, ids_num)) { + + ## make epi_contacts object + tTree <- data.frame(i = ids[x$ances], + j = ids[1:length(x$ances)]) + ctd <- sim_ctd(tTree, eps = 0.9, lambda = 0.1) + epi_c <- suppressWarnings(epicontacts::make_epicontacts(linelist = data.frame(id = ids), + contacts = ctd, + directed = TRUE)) + + data <- outbreaker_data(dates = x$onset, + dna = x$dna, + ctd = epi_c, + w_dens = x$w) + + ## test recursiveness + data <- outbreaker_data(data = data) + + ## check correct contacts are labelled as 1 in matrix + ctd_ind <- apply(ctd, 2, match, ids) + expect_equal(rep(1, nrow(ctd)), data$contacts[ctd_ind[,c(2, 1)]]) + expect_equal(rep(0, nrow(ctd)), data$contacts[ctd_ind]) + + ## check directionality is being passed + config <- create_config(data = data) + + ## check ids are carried through + expect_equal(data$ids, epi_c$linelist$id) + + ## make sure directionality is carried through + expect_true(config$ctd_directed) + + + ## case labelling via dates + dates <- x$onset + names(dates) <- ids + + data <- outbreaker_data(dates = dates, + dna = x$dna, + ctd = ctd, + w_dens = x$w) + + ## test recursiveness + data <- outbreaker_data(data = data) + + ## check direcionality working + config <- create_config(ctd_directed = TRUE, + data = data) + + ## check contact numbers are being updated + data <- add_convolutions(data, config) + + ## check ids are carried through + expect_equal(data$ids, as.character(ids)) + + ## make sure directionality is carried through + expect_true(config$ctd_directed) + + ## check the number of contacts are correct + expect_equal(nrow(ctd), sum(data$contacts)) + + ## toggle directionality + data <- outbreaker_data(dates = dates, + dna = x$dna, + ctd = ctd, + w_dens = x$w) + + data <- outbreaker_data(data = data) + + config <- create_config(ctd_directed = FALSE) + + data <- add_convolutions(data, config) + + ## check the number of contacts are correct + expect_equal(2*nrow(ctd), sum(data$contacts)) + + ## check correct contacts are labelled as 1 in matrix + ctd_ind <- apply(ctd, 2, match, ids) + ctd_ind <- rbind(ctd_ind, ctd_ind[,c(2, 1)]) + expect_equal(rep(1, 2*nrow(ctd)), data$contacts[ctd_ind]) + + ## make sure directionality is carried through + expect_false(config$ctd_directed) + + ## identify non-matching labels + wrong_dna <- x$dna + rownames(wrong_dna) <- 1:length(x$onset) + + expect_error(data <- outbreaker_data(dates = dates, + dna = wrong_dna, + ctd = ctd, + w_dens = x$w, + ctd_directed = TRUE), + "DNA sequence labels don't match case ids") + + } + +}) + + +