diff options
Diffstat (limited to 'tests')
-rw-r--r-- | tests/testthat/test_PELMO.R | 142 | ||||
-rw-r--r-- | tests/testthat/test_TOXSWA.R (renamed from tests/testthat/test_TOXSWA_cwa.R) | 0 |
2 files changed, 142 insertions, 0 deletions
diff --git a/tests/testthat/test_PELMO.R b/tests/testthat/test_PELMO.R new file mode 100644 index 0000000..ab0e37a --- /dev/null +++ b/tests/testthat/test_PELMO.R @@ -0,0 +1,142 @@ +library(testthat) +library(pfm) +context("Create PELMO runs from psm files and execute them") +PELMO_base <- system.file("FOCUSPELMO.553", package = "PELMO.installeR") + +test_archive <- system.file("testdata/FOCUS_PELMO.tar.bz2", package = "pfm") +test_dir <- tempdir() +untar(test_archive, exdir = test_dir, compressed = "bzip2") + +runs <- list( + list( + psm = "Pesticide_D", + fbe = c("Por"), + vbe = c("Por")), + list( + psm = "Pesticide_D_1_day_pre_em_every_third_year", + pot = c("Cha", "Ham")), + list( + psm = "Pesticide_D_1_May_every_other_year_mets", + win = names(FOCUS_GW_scenarios_2012$names))) + +test_that("PELMO paths are correctly created", { + psm_paths = c( + PELMO_path(runs[[1]]$psm, "fbe", "Por"), + PELMO_path(runs[[2]]$psm, "pot", "Ham"), + PELMO_path(runs[[3]]$psm, "win", "Cha")) + + for (i in seq_along(psm_paths)) { + psm_file <- file.path(test_dir, psm_paths[i], paste0(runs[[i]]$psm, ".psm")) + expect_true(file.exists(psm_file)) + psm_new_location <- file.path(PELMO_base, basename(psm_file)) + file.copy(psm_file, psm_new_location, overwrite = TRUE) + } +}) + +test_that("PELMO runs are correctly set up", { + + # Prepare runs in analogy to the test archive + PELMO_runs(runs, psm_dir = PELMO_base, execute = FALSE, evaluate = FALSE, overwrite = TRUE) + + # Check that input files are correctly generated in the right location + for (run in runs) { + psm <- run$psm + crops <- setdiff(names(run), "psm") + for (crop in crops) { + for (scenario in run[[crop]]) { + pp <- PELMO_path(psm, crop, scenario) + + input_new <- readLines(file.path(PELMO_base, "FOCUS", pp, "pelmo.inp")) + input_test <- readLines(file.path(test_dir, pp, "pelmo.inp")) + + # Check if the input files are correctly reproduced + expect_identical(input_new, input_test) + } + } + } +}) + +test_that("PELMO runs can be run and give the expected result files", { + run_PELMO(runs, cores = 7) + + plm_files <- c("CHEM.PLM", "ECHO.PLM", + "KONZCHEM.PLM", "KONZC_A1", "KONZC_B1", + "PLNTPEST.plm", "PLOT.PLM", "WASSER.PLM") + + # Check that if output is the same as in the test archive + for (run in runs) { + psm <- run$psm + crops <- setdiff(names(run), "psm") + for (crop in crops) { + for (scenario in run[[crop]]) { + pp <- PELMO_path(psm, crop, scenario) + + for (plm in plm_files) { + if (file.exists(file.path(test_dir, pp, plm))) { + new <- readLines(file.path(PELMO_base, "FOCUS", pp, plm)) + test <- readLines(file.path(test_dir, pp, plm)) + + # Check if the ouput files are correctly reproduced + expect_identical(new, test) + } + } + } + } + } +}) + +test_that("PELMO runs are correctly evaluated", { + results <- evaluate_PELMO(runs) + + # Check that if output is the same as in the test archive + for (run in runs) { + psm <- run$psm + crops <- setdiff(names(run), "psm") + for (crop in crops) { + for (scenario in run[[crop]]) { + pp <- PELMO_path(psm, crop, scenario) + + period_file <- readLines(file.path(test_dir, pp, "period.plm"), encoding = "latin1") + + result_lines <- grep("^\tResults for.*in the percolate at 1 m soil depth$", period_file) + acronyms <- gsub(".*\\((.*)\\).*", "\\1", period_file[result_lines]) + names(result_lines) <- acronyms + + results <- list() + for (acronym in acronyms) { + results[[acronym]] <- list() + conc_lines <- result_lines[acronym] + 5:24 + tmp <- read.table(text = period_file[conc_lines], sep = "\t") + results[[acronym]]$periods <- data.frame( + period = as.integer(tmp$V2), + flux = tmp$V3, + percolate = tmp$V4, + conc = tmp$V5) + tmp80 <- read.table(text = period_file[result_lines[acronym] + 27], sep = "\t") + results[[acronym]]$focus <- tmp80[[1, "V5"]] + } + + period_pfm_file <- file.path(PELMO_base, "FOCUS", pp, "period_pfm.rda") + load(period_pfm_file) + + # Test for equality of all the components separately, + # as we need to adapt the tolerance + for (acronym in acronyms) { + p_pelmo <- results[[acronym]]$periods + p_test <- results_pfm[[acronym]]$periods + expect_equal(p_test$flux, p_pelmo$flux, tol = 1e-6, scale = 1) + expect_equal(p_test$percolate, p_pelmo$percolate) + # PELMO sets the concentration to 0 when the percolate is zero. + # We get NaN, which is more reasonable, but we need to + # take this into account for testing + p_test$conc <- ifelse(is.na(p_test$conc), 0, p_test$conc) + expect_equal(p_test$conc, p_pelmo$conc, tol = 1e-3, scale = 1) + + # FOCUS PEC + expect_equal(results_pfm[[acronym]]$focus, results[[acronym]]$focus, + tol = 1e-3, scale = 1) + } + } + } + } +}) diff --git a/tests/testthat/test_TOXSWA_cwa.R b/tests/testthat/test_TOXSWA.R index 7c9a73c..7c9a73c 100644 --- a/tests/testthat/test_TOXSWA_cwa.R +++ b/tests/testthat/test_TOXSWA.R |