test_that("clean_wd()", { skip_on_cran() expect_true(file.create(f <- tempfile())) expect_true({clean_wd(f); file.exists(f)}) unlink(f) expect_true(file.create(f <- tempfile(fileext = ".idf"))) expect_silent({clean_wd(f); file.exists(f)}) unlink(f) expect_true(file.create(f <- file.path(tempdir(), "in.idf"))) expect_true({clean_wd(f); file.exists(f)}) expect_true(file.create(fidf <- file.path(tempdir(), "test.idf"))) expect_true(file.create(fcsv <- file.path(tempdir(), "test.csv"))) expect_true({.clean_wd(fidf, "D", basename(fcsv)); file.exists(fcsv)}) unlink(c(fidf, fcsv)) }) test_that("path_eplus()", { skip_on_cran() expect_equal(basename(path_eplus(LATEST_EPLUS_VER, "a", "b")), "b") expect_error(basename(path_eplus(LATEST_EPLUS_VER, "a", "b", strict = TRUE))) expect_true(is.character(path_eplus_processor(LATEST_EPLUS_VER, "EPMacro", strict = TRUE))) expect_true(is.character(path_eplus_processor(LATEST_EPLUS_VER, "PreProcess", "GrndTempCalc", "Slab", strict = TRUE))) expect_true(is.character(path_eplus_example(LATEST_EPLUS_VER, "1ZoneUncontrolled.idf"))) expect_true(is.character(path_eplus_example(LATEST_EPLUS_VER, "BasicFiles/Exercise1A.idf"))) expect_true(is.character(path_eplus_weather(LATEST_EPLUS_VER, "USA_CA_San.Francisco.Intl.AP.724940_TMY3.ddy"))) expect_true(is.character(path_eplus_dataset(LATEST_EPLUS_VER, "Boilers.idf"))) expect_true(is.character(path_eplus_dataset(LATEST_EPLUS_VER, "FMUs/MoistAir.fmu"))) }) test_that("copy_energyplus_idd()", { skip_on_cran() expect_silent(res <- copy_energyplus_idd(path_eplus(LATEST_EPLUS_VER, "energyplus"), tempdir())) expect_true(file.exists(file.path(tempdir(), "Energy+.idd"))) expect_true(attr(res, "copied")) expect_silent(res <- copy_energyplus_idd(NULL, tempdir(), res)) expect_true(file.exists(file.path(tempdir(), "Energy+.idd"))) expect_false(attr(res, "copied")) unlink(file.path(tempdir(), "Energy+.idd")) expect_silent(res <- copy_energyplus_idd(NULL, tempdir(), path_eplus(LATEST_EPLUS_VER, "Energy+.idd"))) expect_true(file.exists(file.path(tempdir(), "Energy+.idd"))) unlink(file.path(tempdir(), "Energy+.idd")) }) test_that("EPMacro()", { skip_on_cran() out_dir <- file.path(tempdir(), "EPMacro") if (!dir.exists(out_dir)) dir.create(out_dir) main <- file.path(out_dir, "macro.imf") part <- file.path(out_dir, "part.idf") write_lines(sprintf("##include part.idf\nVersion,%s;", LATEST_EPLUS_VER), main) write_lines("Building,\nBldg;", part) res <- EPMacro(part, echo = FALSE, eplus = LATEST_EPLUS_VER) expect_equal(names(res), c("file", "run")) expect_equal(res$file, NULL) expect_equal(res$run, NULL) res <- EPMacro(main, echo = FALSE, eplus = LATEST_EPLUS_VER) expect_equal(names(res), c("file", "run")) expect_true(file.exists(res$file$imf)) expect_true(file.exists(res$file$epmidf)) expect_true(file.exists(res$file$epmdet)) expect_equal(names(res$file), c("imf", "epmidf", "epmdet")) expect_equal(names(res$run), c("process", "exit_status", "stdout", "stderr", "start_time", "end_time")) expect_equal(res$run$stdout, NULL) expect_equal(res$run$stderr, NULL) unlink(c(res$file$epmidf, res$file$epmdet)) res <- EPMacro(main, tempdir()) expect_equal(dirname(res$file$imf), normalizePath(tempdir(), "/")) expect_equal(dirname(res$file$epmidf), normalizePath(tempdir(), "/")) expect_equal(dirname(res$file$epmdet), normalizePath(tempdir(), "/")) unlink(unlist(res$file)) res <- EPMacro(main, output_prefix = "test") expect_equal(basename(res$file$epmidf), "test.epmidf") expect_equal(basename(res$file$epmdet), "test.epmdet") unlink(c(res$file$epmidf, res$file$epmdet)) res <- EPMacro(main, wait = FALSE, echo = FALSE) expect_equal(res$file, NULL) expect_equal(res$run$exit_status, NULL) expect_equal(res$run$stdout, NULL) expect_equal(res$run$stderr, NULL) expect_equal(res$run$end_time, NULL) while(res$run$process$is_alive()) Sys.sleep(0.1) post <- res$run$process$get_result() expect_equal(names(post), c("file", "run")) res <- modifyList(res, post) expect_equal(basename(res$file$imf), "macro.imf") expect_equal(basename(res$file$epmidf), "macro.epmidf") expect_equal(basename(res$file$epmdet), "macro.epmdet") expect_null(res$run$stdout) expect_null(res$run$stderr) expect_equal(res$run$process$get_exit_status(), 0L) unlink(unlist(res$file)) unlink(out_dir, recursive = TRUE) unlink(c(main, part)) }) test_that("ExpandObjects()", { skip_on_cran() out_dir <- file.path(tempdir(), "ExpandObjects") if (!dir.exists(out_dir)) dir.create(out_dir) path <- file.path(out_dir, "expandobj.idf") write_lines(sprintf( "Version, %s; HVACTemplate:Thermostat, All Zones, , 20, , 26; ", LATEST_EPLUS_VER), path ) res <- ExpandObjects(path, echo = FALSE, idd = path_eplus(LATEST_EPLUS_VER, "Energy+.idd")) expect_equal(names(res), c("file", "run")) expect_equal(names(res$file), c("idf", "expidf", "basement", "slab", "experr")) expect_true(file.exists(res$file$idf)) expect_true(file.exists(res$file$expidf)) expect_equal(res$file$basement, NA_character_) expect_equal(res$file$slab, NA_character_) expect_equal(res$file$experr, NA_character_) expect_equal(names(res$run), c("process", "exit_status", "stdout", "stderr", "start_time", "end_time")) expect_false(is.null(res$run$stdout)) expect_null(res$run$stderr) unlink(res$file$expidf) res <- ExpandObjects(path, tempdir(), echo = FALSE) expect_equal(dirname(res$file$idf), normalizePath(tempdir(), "/")) expect_equal(dirname(res$file$expidf), normalizePath(tempdir(), "/")) expect_equal(res$file$basement, NA_character_) expect_equal(res$file$slab, NA_character_) expect_equal(res$file$experr, NA_character_) unlink(c(res$file$idf, res$file$expidf)) res <- ExpandObjects(path, output_prefix = "test", echo = FALSE) expect_equal(basename(res$file$expidf), "test.expidf") expect_equal(res$file$basement, NA_character_) expect_equal(res$file$slab, NA_character_) expect_equal(res$file$experr, NA_character_) unlink(res$file$expidf) res <- ExpandObjects(path, wait = FALSE, echo = FALSE) expect_equal(res$file, NULL) expect_equal(res$run$exit_status, NULL) expect_equal(res$run$stdout, NULL) expect_equal(res$run$stderr, NULL) expect_equal(res$run$end_time, NULL) while(res$run$process$is_alive()) Sys.sleep(0.1) post <- res$run$process$get_result() expect_equal(names(post), c("file", "run")) res <- modifyList(res, post) expect_equal(basename(res$file$expidf), "expandobj.expidf") expect_false(is.null(res$run$stdout)) expect_null(res$run$stderr) expect_equal(res$file$experr, NA_character_) expect_equal(res$run$process$get_exit_status(), 0L) unlink(res$file$expidf) unlink(out_dir, recursive = TRUE) unlink(path) }) test_that("Basement()", { skip_on_cran() skip_if(Sys.getenv("_EPLUSR_SKIP_TESTS_BASEMENT_") != "") out_dir <- file.path(tempdir(), "Basement") if (!dir.exists(out_dir)) dir.create(out_dir) path <- file.path(out_dir, "basement.idf") write_lines( "SimParameters, 0.1, 1; MatlProps, 1, 2242.6, 2242.6, 311.66, 1500.0, 2000.0, 448.5, 880.0, 880.0, 1513.0, 840.0, 720.0, 1630.0, 1.402, 1.402, 0.093, 0.5, 1.9, 0.119; Insulation, 5.0, TRUE; SurfaceProps, 0.16, 0.40, 0.94, 0.86, 6.0, 0.25, TRUE; BldgData, 0.2, 0.1, 0.3, 0.2, 0.1; Interior, TRUE, 0.92, 4.04, 3.08, 6.13, 9.26, 8.29; ComBldg, 20., 20., 20., 20., 20., 20., 20., 20., 20., 20., 20., 20., 0.0; EquivSlab, 15.0, TRUE; EquivAutoGrid, 1, 0.1, 0.5; ", path ) weather <- path_eplus_weather(LATEST_EPLUS_VER, "USA_CO_Golden-NREL.724666_TMY3.epw") res <- Basement(path, weather, echo = FALSE, eplus = LATEST_EPLUS_VER, idd = path_eplus(LATEST_EPLUS_VER, "PreProcess", "GrndTempCalc", "BasementGHT.idd") ) expect_equal(names(res), c("file", "run")) expect_equal(names(res$file), c("idf", "epw", "bsmt_idf", "bsmt_csv", "bsmt_out", "bsmt_audit")) expect_true(file.exists(res$file$idf)) expect_true(file.exists(res$file$epw)) expect_equal(basename(res$file$bsmt_idf), "basement_bsmt.idf") expect_equal(basename(res$file$bsmt_csv), "basement_bsmt.csv") expect_equal(basename(res$file$bsmt_out), "basement_bsmt.out") expect_equal(basename(res$file$bsmt_audit), "basement_bsmt.audit") expect_equal(names(res$run), c("process", "exit_status", "stdout", "stderr", "start_time", "end_time")) expect_false(is.null(res$run$stdout)) expect_false(is.null(res$run$stderr)) unlink(unlist(res$file)) unlink(out_dir, recursive = TRUE) unlink(path) }) test_that("Slab()", { skip_on_cran() skip_if(Sys.getenv("_EPLUSR_SKIP_TESTS_BASEMENT_") != "") out_dir <- file.path(tempdir(), "Basement") if (!dir.exists(out_dir)) dir.create(out_dir) path <- file.path(out_dir, "slab.idf") write_lines( "Materials, 1, 0.158, 0.379, 0.9, 0.9, 0.75, 0.03, 6.13, 9.26; MatlProps, 2300, 1200, 653, 1200, 0.93, 1; BoundConds, TRUE, TRUE, 10, False, ; BldgProps, 1, 0, 4, 18, 18, 18, 20, 20, 20, 22, 22, 22, 22, 20, 20, 0, 0.10; Insulation, 0., 0., 2.0, 2.0, 1; EquivalentSlab, 10, 0.1, 15, 10.; ", path ) weather <- path_eplus_weather(LATEST_EPLUS_VER, "USA_CO_Golden-NREL.724666_TMY3.epw") res <- Slab(path, weather, eplus = LATEST_EPLUS_VER, echo = FALSE, idd = path_eplus(LATEST_EPLUS_VER, "PreProcess", "GrndTempCalc", "SlabGHT.idd") ) expect_equal(names(res), c("file", "run")) expect_equal(names(res$file), c("idf", "epw", "slab_gtp", "slab_out", "slab_ger")) expect_true(file.exists(res$file$idf)) expect_true(file.exists(res$file$epw)) expect_equal(basename(res$file$slab_gtp), "slab_slab.gtp") expect_equal(basename(res$file$slab_out), "slab_slab.out") expect_equal(basename(res$file$slab_ger), "slab_slab.ger") expect_equal(names(res$run), c("process", "exit_status", "stdout", "stderr", "start_time", "end_time")) expect_false(is.null(res$run$stdout)) expect_false(is.null(res$run$stderr)) unlink(unlist(res$file)) unlink(out_dir, recursive = TRUE) unlink(path) }) test_that("EnergyPlus()", { skip_on_cran() out_dir <- file.path(tempdir(), "Energyplus") if (!dir.exists(out_dir)) dir.create(out_dir) path <- copy_eplus_example(LATEST_EPLUS_VER, "1ZoneUncontrolled.idf") weather <- path_eplus_weather(LATEST_EPLUS_VER, "USA_CO_Golden-NREL.724666_TMY3.epw") res <- EnergyPlus(path, weather, out_dir, eplus = LATEST_EPLUS_VER, echo = FALSE) expect_equal(names(res), c("file", "run")) expect_equal(length(res$file), 51L) expect_equal( sort(names(which(vapply(res$file, function(x) !anyNA(x), logical(1))))), c("audit", "bnd", "dxf", "eio", "end", "epw", "err", "eso", "idf", # NOTE: From EnergyPlus v22.1.0, Sqlite.err is only generated if there is # a SQLite output "mdd", "mtd", "mtr", "rdd", "shd", "table") ) expect_equal(names(res$run), c("process", "exit_status", "stdout", "stderr", "start_time", "end_time")) expect_false(is.null(res$run$stdout)) # can use legacy output name style res_legacy <- EnergyPlus(path, weather, out_dir, output_suffix = "L", eplus = LATEST_EPLUS_VER, echo = FALSE) files <- basename(unlist(res_legacy$file, FALSE, FALSE)) files <- files[!is.na(files)] expect_equal(setdiff( names(tbl <- table(tools::file_path_sans_ext(files))), c("1ZoneUncontrolled", "eplusout", "eplustbl", "sqlite", "USA_CO_Golden-NREL.724666_TMY3") ), character()) # NOTE: From EnergyPlus v22.1.0, Sqlite.err is only generated if there is # a SQLite output expect_equal(sort(as.integer(tbl)), c(1L, 1L, 5L, 12L)) # can run annual simulation with custom IDD expect_silent( EnergyPlus(path, weather, out_dir, annual = TRUE, eplus = LATEST_EPLUS_VER, echo = FALSE, idd = path_eplus(LATEST_EPLUS_VER, "Energy+.idd") ) ) unlink(out_dir, recursive = TRUE) unlink(path) }) test_that("convertESOMTR()", { skip_on_cran() out_dir <- file.path(tempdir(), "convertESOMTR") if (!dir.exists(out_dir)) dir.create(out_dir) path <- copy_eplus_example(LATEST_EPLUS_VER, "1ZoneUncontrolled.idf") weather <- path_eplus_weather(LATEST_EPLUS_VER, "USA_CO_Golden-NREL.724666_TMY3.epw") res <- EnergyPlus(path, weather, out_dir, eplus = LATEST_EPLUS_VER, echo = FALSE) eso <- convertESOMTR(res$file$eso, eplus = LATEST_EPLUS_VER, echo = FALSE, rules = path_eplus(LATEST_EPLUS_VER, "PostProcess", "convertESOMTRpgm", "convert.txt") ) expect_equal(names(eso), c("file", "run")) expect_equal(names(eso$file), c("eso", "mtr", "ipeso", "ipmtr", "iperr")) expect_true(file.exists(eso$file$eso)) expect_true(file.exists(eso$file$ipeso)) expect_true(is.na(eso$file$mtr)) expect_true(is.na(eso$file$ipmtr)) expect_true(is.na(eso$file$iperr)) expect_equal(names(eso$run), c("process", "exit_status", "stdout", "stderr", "start_time", "end_time")) expect_false(is.null(eso$run$stdout)) expect_true(is.null(eso$run$stderr)) unlink(unlist(eso$file)) mtr <- convertESOMTR(res$file$mtr, eplus = LATEST_EPLUS_VER, echo = FALSE) expect_equal(names(mtr), c("file", "run")) expect_equal(names(mtr$file), c("eso", "mtr", "ipeso", "ipmtr", "iperr")) expect_true(file.exists(mtr$file$mtr)) expect_true(file.exists(mtr$file$ipmtr)) expect_true(is.na(mtr$file$eso)) expect_true(is.na(mtr$file$ipeso)) expect_true(is.na(mtr$file$iperr)) expect_equal(names(mtr$run), c("process", "exit_status", "stdout", "stderr", "start_time", "end_time")) expect_false(is.null(mtr$run$stdout)) expect_true(is.null(mtr$run$stderr)) unlink(unlist(mtr$file)) unlink(unlist(res$file)) unlink(out_dir, recursive = TRUE) unlink(path) }) test_that("ReadVarsESO()", { skip_on_cran() out_dir <- file.path(tempdir(), "ReadVarsESO") if (!dir.exists(out_dir)) dir.create(out_dir) path <- copy_eplus_example(LATEST_EPLUS_VER, "1ZoneUncontrolled.idf") weather <- path_eplus_weather(LATEST_EPLUS_VER, "USA_CO_Golden-NREL.724666_TMY3.epw") res <- EnergyPlus(path, weather, out_dir, eplus = LATEST_EPLUS_VER, echo = FALSE) eso <- ReadVarsESO(res$file$eso, eplus = LATEST_EPLUS_VER, echo = FALSE) expect_equal(names(eso), c("file", "run")) expect_equal(names(eso$file), c("eso", "mtr", "variable", "meter", "rvaudit")) expect_true(file.exists(eso$file$eso)) expect_true(file.exists(eso$file$variable)) expect_true(file.exists(eso$file$rvaudit)) expect_true(is.na(eso$file$mtr)) expect_true(is.na(eso$file$meter)) expect_equal(names(eso$run), c("process", "exit_status", "stdout", "stderr", "start_time", "end_time")) expect_true(!is.na(eso$file$variable)) expect_true(is.na(eso$file$meter)) expect_true(!is.na(eso$file$rvaudit)) unlink(unlist(eso$file)) mtr <- ReadVarsESO(res$file$mtr, eplus = LATEST_EPLUS_VER, echo = FALSE) expect_equal(names(mtr$file), c("eso", "mtr", "variable", "meter", "rvaudit")) expect_true(file.exists(mtr$file$mtr)) expect_true(file.exists(mtr$file$meter)) expect_true(file.exists(mtr$file$rvaudit)) expect_true(is.na(mtr$file$eso)) expect_true(is.na(mtr$file$variable)) expect_equal(names(mtr$run), c("process", "exit_status", "stdout", "stderr", "start_time", "end_time")) expect_true(is.na(mtr$file$variable)) expect_true(!is.na(mtr$file$meter)) expect_true(!is.na(mtr$file$rvaudit)) unlink(unlist(mtr$file)) unlink(unlist(res$file)) unlink(out_dir, recursive = TRUE) unlink(path) }) test_that("HVAC_Diagram()", { skip_on_cran() out_dir <- file.path(tempdir(), "HVAC_Diagram") if (!dir.exists(out_dir)) dir.create(out_dir) model <- copy_eplus_example(LATEST_EPLUS_VER, "1ZoneUncontrolled.idf") weather <- path_eplus_weather(LATEST_EPLUS_VER, "USA_CO_Golden-NREL.724666_TMY3.epw") res <- EnergyPlus(model, weather, out_dir, eplus = LATEST_EPLUS_VER, echo = FALSE) svg <- HVAC_Diagram(res$file$bnd, echo = FALSE) expect_equal(names(svg), c("file", "run")) expect_equal(names(svg$file), c("bnd", "svg")) expect_true(file.exists(svg$file$bnd)) expect_true(file.exists(svg$file$bnd)) expect_equal(names(svg$run), c("process", "exit_status", "stdout", "stderr", "start_time", "end_time")) expect_true(!is.na(svg$file$svg)) unlink(unlist(svg$file)) unlink(unlist(res$file)) unlink(out_dir, recursive = TRUE) unlink(model) }) test_that("energyplus()", { skip_on_cran() out_dir <- file.path(tempdir(), "run-energyplus") if (!dir.exists(out_dir)) dir.create(out_dir) weather <- path_eplus_weather(LATEST_EPLUS_VER, "USA_CO_Golden-NREL.724666_TMY3.epw") # can run EPMacro path_imf <- copy_eplus_example(LATEST_EPLUS_VER, "AbsorptionChiller_Macro.imf") path_resources <- c( copy_eplus_example(LATEST_EPLUS_VER, "HVAC3ZoneChillerSpec.imf"), copy_eplus_example(LATEST_EPLUS_VER, "HVAC3ZoneGeometry.imf"), copy_eplus_example(LATEST_EPLUS_VER, "HVAC3Zone-IntGains-Def.imf"), copy_eplus_example(LATEST_EPLUS_VER, "HVAC3ZoneMat-Const.imf") ) res_imf <- energyplus(path_imf, weather, out_dir, echo = FALSE, resources = path_resources) expect_equal(names(res_imf), c("version", "energyplus", "start_time", "end_time", "exit_status", "output_dir", "file", "run")) expect_equal(as.character(res_imf$version), LATEST_EPLUS_VER) expect_equal(res_imf$energyplus, eplus_config(LATEST_EPLUS_VER)$dir) expect_s3_class(res_imf$start_time, "POSIXct") expect_s3_class(res_imf$end_time, "POSIXct") expect_equal(res_imf$output_dir, normalizePath(out_dir)) expect_equal(length(res_imf$file), 57L) # NOTE: From EnergyPlus v22.1.0, Sqlite.err is only generated if there is # a SQLite output expect_equal({files <- unlist(res_imf$file); files <- files[!is.na(files)]; length(files)}, 23L) expect_equal(sum(!file.exists(file.path(out_dir, files))), 0L) expect_equal(sort(unname(files[names(files) != "epw"])), sort(c(list.files(out_dir, "AbsorptionChiller_Macro"), basename(path_resources))) ) expect_s3_class(res_imf$run, "data.table") expect_equal(names(res_imf$run), c("program", "exit_status", "start_time", "end_time", "stdout", "stderr") ) expect_equal(res_imf$run$program, c("EPMacro", "ExpandObjects", "Basement", "Slab", "EnergyPlus", "convertESOMTR", "ReadVarsESO_MTR", "ReadVarsESO_ESO", "HVAC_Diagram") ) expect_equal(res_imf$run[program == "EPMacro", exit_status], list(0L)) expect_true(file.exists(file.path(out_dir, files["epmidf"]))) expect_true(file.exists(file.path(out_dir, files["epmdet"]))) expect_true(file.exists(file.path(out_dir, files["eso"]))) expect_true(file.exists(file.path(out_dir, files["mtr"]))) expect_true(file.exists(file.path(out_dir, files["bnd"]))) expect_true(file.exists(file.path(out_dir, files["svg"]))) unlink(c(path_imf, path_resources, out_dir), recursive = TRUE) # can run ExpandObjects path_exp <- copy_eplus_example(LATEST_EPLUS_VER, "HVACTemplate-5ZoneFanCoil.idf") res_exp <- energyplus(path_exp, weather, out_dir, echo = FALSE) expect_equal(length(res_exp$file), 57L) # NOTE: From EnergyPlus v22.1.0, Sqlite.err is only generated if there is # a SQLite output expect_equal({files <- unlist(res_exp$file); files <- files[!is.na(files)]; length(files)}, 22L) expect_equal(sum(!file.exists(file.path(out_dir, files))), 0L) expect_equal(sort(unname(files[names(files) != "epw"])), list.files(out_dir, "HVACTemplate-5ZoneFanCoil")) expect_equal(res_exp$run[program == "ExpandObjects", exit_status], list(0L)) expect_true(file.exists(file.path(out_dir, files["expidf"]))) expect_true(is.na(files["experr"])) unlink(c(path_exp, out_dir), recursive = TRUE) if(Sys.getenv("_EPLUSR_SKIP_TESTS_BASEMENT_") == "") { # NOTE: There is a bug in the basement preprocessor in EnergyPlus from v9.4 to v22.1 # Ref: https://github.com/NREL/EnergyPlus/pull/9356 if (numeric_version(LATEST_EPLUS_VER) > "22.1") { # can run Basement path_base <- copy_eplus_example(LATEST_EPLUS_VER, "LgOffVAVusingBasement.idf") expect_error(energyplus(path_base, NULL, out_dir, echo = FALSE)) # modify the input in order to reduce the simulation time l <- read_lines(path_base) l[grepl("IYRS: Maximum number of yearly iterations", string), string := "1;"] l[grepl("NMAT: Number of materials in this domain", string), string := "1,"] l[grepl("CLEARANCE: Distance from outside of wall", string), string := "1,"] l[grepl("BaseDepth: Depth of the basement wall", string), string := "0.5;"] write_lines(l, path_base) res_base <- energyplus(path_base, weather, out_dir, design_day = TRUE, echo = FALSE) expect_equal(length(res_base$file), 57L) # NOTE: From EnergyPlus v22.1.0, Sqlite.err is only generated if there is # a SQLite output expect_equal({files <- unlist(res_base$file); files <- files[!is.na(files)]; length(files)}, 26L) expect_equal(sum(!file.exists(file.path(out_dir, files))), 0L) expect_equal(sort(unname(files[names(files) != "epw"])), list.files(out_dir, "LgOffVAVusingBasement")) expect_equal(res_base$run[program == "Basement", exit_status], list(0L)) expect_true(file.exists(file.path(out_dir, files["expidf"]))) expect_true(file.exists(file.path(out_dir, files["bsmt_idf"]))) expect_true(file.exists(file.path(out_dir, files["bsmt_csv"]))) expect_true(file.exists(file.path(out_dir, files["bsmt_out"]))) expect_true(file.exists(file.path(out_dir, files["bsmt_audit"]))) unlink(c(path_base, out_dir), recursive = TRUE) } # can run Slab path_slab <- copy_eplus_example(LATEST_EPLUS_VER, "5ZoneAirCooledWithSlab.idf") expect_error(energyplus(path_slab, NULL, out_dir, echo = FALSE)) # modify the input in order to reduce the simulation time l <- read_lines(path_slab) l[grepl("IYRS: Number of years to iterate", string), string := "1,"] l[grepl("ConvTol: Convergence Tolerance", string), string := "1;"] write_lines(l, path_slab) res_slab <- energyplus(path_slab, weather, out_dir, echo = FALSE) expect_equal(length(res_slab$file), 57L) # NOTE: From EnergyPlus v22.1.0, Sqlite.err is only generated if there is # a SQLite output expect_equal({files <- unlist(res_slab$file); files <- files[!is.na(files)]; length(files)}, 25L) expect_equal(sum(!file.exists(file.path(out_dir, files))), 0L) expect_equal(sort(unname(files[names(files) != "epw"])), list.files(out_dir, "5ZoneAirCooledWithSlab")) expect_equal(res_slab$run[program == "Slab", exit_status], list(0L)) expect_true(file.exists(file.path(out_dir, files["slab_ger"]))) expect_true(file.exists(file.path(out_dir, files["slab_gtp"]))) expect_true(file.exists(file.path(out_dir, files["slab_out"]))) unlink(c(path_slab, out_dir), recursive = TRUE) } # can convert eso to IP path_ip <- copy_eplus_example(LATEST_EPLUS_VER, "1ZoneUncontrolled.idf") res_ip <- energyplus(path_ip, weather, out_dir, eso_to_ip = TRUE, echo = FALSE) expect_equal(length(res_ip$file), 57L) # NOTE: From EnergyPlus v22.1.0, Sqlite.err is only generated if there is # a SQLite output expect_equal({files <- unlist(res_ip$file); files <- files[!is.na(files)]; length(files)}, 25L) expect_equal(sum(!file.exists(file.path(out_dir, files))), 0L) expect_equal(sort(unname(files[names(files) != "epw"])), list.files(out_dir, "1ZoneUncontrolled")) expect_equal(res_ip$run[program == "convertESOMTR", exit_status], list(0L)) expect_true(file.exists(file.path(out_dir, files["ipeso"]))) expect_true(file.exists(file.path(out_dir, files["ipmtr"]))) expect_true(is.na(files["iperr"])) unlink(out_dir, recursive = TRUE) res_ip2 <- energyplus(path_ip, weather, out_dir, eso_to_ip = TRUE, readvars = FALSE, echo = FALSE) expect_equal(length(res_ip2$file), 57L) # NOTE: From EnergyPlus v22.1.0, Sqlite.err is only generated if there is # a SQLite output expect_equal({files2 <- unlist(res_ip2$file); files2 <- files2[!is.na(files2)]; length(files2)}, 22L) expect_equal(sum(!file.exists(file.path(out_dir, files2))), 0L) expect_true(file.exists(file.path(out_dir, files2["ipeso"]))) expect_true(file.exists(file.path(out_dir, files2["ipmtr"]))) expect_true(is.na(files2["iperr"])) unlink(out_dir, recursive = TRUE) # can run with EnergyPlus < 8.3 options("eplusr.eplus_legacy" = TRUE) path_legacy <- copy_eplus_example(LATEST_EPLUS_VER, "1ZoneUncontrolled.idf") expect_error(energyplus(path_legacy, weather, out_dir, design_day = TRUE, echo = FALSE)) res_legacy <- energyplus(path_legacy, weather, out_dir, echo = FALSE) expect_equal(length(res_legacy$file), 57L) # NOTE: From EnergyPlus v22.1.0, Sqlite.err is only generated if there is # a SQLite output expect_equal({files <- unlist(res_legacy$file); files <- files[!is.na(files)]; length(files)}, 23L) expect_equal(sum(!file.exists(file.path(out_dir, files))), 0L) expect_equal(sort(unname(files[names(files) != "epw"])), list.files(out_dir, "1ZoneUncontrolled")) unlink(out_dir, recursive = TRUE) options("eplusr.eplus_legacy" = NULL) expect_error(energyplus(path_legacy, weather, out_dir, design_day = TRUE, annual = TRUE, echo = FALSE)) res_norm <- energyplus(path_legacy, weather, out_dir, echo = FALSE) expect_equal(res_legacy$file, res_norm$file) unlink(out_dir, recursive = TRUE) }) test_that("run_idf()", { skip_on_cran() path_idf <- copy_eplus_example(LATEST_EPLUS_VER, "1ZoneUncontrolled.idf") path_epw <- path_eplus_weather(LATEST_EPLUS_VER, "USA_CO_Golden-NREL.724666_TMY3.epw") # can run ddy simulation expect_type(res <- run_idf(path_idf, NULL, output_dir = tempdir(), echo = FALSE), "list") # can specify EnergyPlus version expect_type(res <- run_idf(path_idf, NULL, output_dir = tempdir(), echo = FALSE, LATEST_EPLUS_VER), "list") expect_null(res$epw) # can stop if failed to find version expect_error({ f <- tempfile(fileext = ".idf") write_lines(read_lines(path_idf)[-91], f) run_idf(f, NULL, output_dir = tempdir(), echo = FALSE) }, "Missing version field") # can use input file directory expect_type({ f <- tempfile(fileext = ".idf") file.copy(path_idf, f, overwrite = TRUE) res <- run_idf(f, NULL, output_dir = NULL, echo = FALSE) }, "list") # can run simulation with weather expect_type(res <- run_idf(path_idf, path_epw, output_dir = tempdir(), echo = FALSE), "list") expect_equal(res$idf, normalizePath(path_idf)) expect_equal(res$epw, normalizePath(path_epw)) expect_equal(res$version, numeric_version(LATEST_EPLUS_VER)) expect_equal(res$exit_status, 0L) expect_s3_class(res$start_time, "POSIXct") expect_s3_class(res$end_time, "POSIXct") expect_equal(res$output_dir, normalizePath(tempdir(), mustWork = FALSE)) expect_equal(res$energyplus, eplus_exe(LATEST_EPLUS_VER)) expect_type(res$stdout, "character") expect_true("stderr" %in% names(res)) expect_s3_class(res$process, "process") expect_true(file.exists(res$idf)) expect_true(file.exists(res$epw)) # can run in the background expect_s3_class(proc <- run_idf(path_idf, NULL, output_dir = tempdir(), wait = FALSE), "r_process") expect_type({proc$wait(); res <- proc$get_result()}, "list") expect_equal(res$idf, normalizePath(path_idf)) expect_null(res$epw) expect_equal(res$version, numeric_version(LATEST_EPLUS_VER)) expect_equal(res$exit_status, 0L) expect_s3_class(res$start_time, "POSIXct") expect_s3_class(res$end_time, "POSIXct") expect_equal(res$output_dir, normalizePath(tempdir(), mustWork = FALSE)) expect_equal(res$energyplus, eplus_exe(LATEST_EPLUS_VER)) expect_type(res$stdout, "character") expect_null(res$process) }) test_that("run_multi()", { skip_on_cran() path_idf <- copy_eplus_example(LATEST_EPLUS_VER, c("1ZoneUncontrolled.idf", "5Zone_Transformer.idf")) path_epw <- path_eplus_weather(LATEST_EPLUS_VER, "USA_CA_San.Francisco.Intl.AP.724940_TMY3.epw") # can stop if idf and epw does not have the same length expect_error(run_multi(path_idf, rep(path_epw, 3), NULL), "Must have same length") # can stop if idf and eplus does not have the same length expect_error(run_multi(path_idf, NULL, NULL, eplus = rep(LATEST_EPLUS_VER, 3)), "Must have same length") # can stop if idf and design does not have the same length expect_error(run_multi(path_idf, NULL, NULL, design_day = rep(FALSE, 3)), "Must have same length") # can stop if idf and annual does not have the same length expect_error(run_multi(path_idf, NULL, NULL, annual = rep(FALSE, 3)), "Must have same length") # can stop if both design and annual is TRUE expect_error(run_multi(path_idf, NULL, NULL, annual = TRUE, design_day = TRUE), "both design-day-only", class = "eplusr_error_both_ddy_annual") # can stop if model does not exist expect_error(run_multi(tempfile(), NULL)) # can stop if model does not contain version expect_error({ f <- tempfile(fileext = ".idf") write_lines(read_lines(path_idf[1])[-91], f) run_multi(f, NULL, output_dir = tempdir()) }, "Failed to determine the version of EnergyPlus", class = "eplusr_error_miss_idf_ver") # can stop if target EnergyPlus is not found expect_error(run_multi(path_idf, NULL, NULL, eplus = 8.0), "Cannot locate EnergyPlus", class = "eplusr_error_locate_eplus") # can stop if input idf contain duplications expect_error(run_multi(rep(path_idf, 2), NULL, NULL), class = "eplusr_error_duplicated_sim") # can stop if idf and output directory does not have the same length expect_error(run_multi(path_idf, NULL, output_dir = tempdir()), "Must have same length") # can stop if idf and output directory combines same job expect_error(run_multi(rep(path_idf[1], 2), NULL, rep(tempdir(), 2L)), "Duplication found") expect_message( res <- run_multi(path_idf, NULL, file.path(tempdir(), c("a", "b"))), "FAILED" ) expect_s3_class(res, "data.table") expect_equal(names(res), c("index", "status", "idf", "epw", "version", "exit_status", "start_time", "end_time", "output_dir", "energyplus", "stdout", "stderr")) expect_equal(res$index, 1:2) expect_equal(res$status, rep("failed", 2)) expect_equal(res$idf, normalizePath(path_idf)) expect_equal(res$epw, rep(NA_character_, 2)) expect_equal(res$version, rep(LATEST_EPLUS_VER, 2)) expect_equal(res$exit_status > 0, rep(TRUE, 2)) expect_s3_class(res$start_time, "POSIXct") expect_s3_class(res$end_time, "POSIXct") expect_equal(res$energyplus, rep(eplus_exe(LATEST_EPLUS_VER), 2L)) checkmate::expect_list(res$stdout, "character") expect_silent(res <- run_multi(path_idf, NULL, file.path(tempdir(), c("a", "b")), wait = FALSE)) expect_s3_class(res, "r_process") expect_equal({res$wait(); res$get_exit_status()}, 0L) expect_silent(res <- res$get_result()) expect_s3_class(res, "data.table") expect_equal(names(res), c("index", "status", "idf", "epw", "version", "exit_status", "start_time", "end_time", "output_dir", "energyplus", "stdout", "stderr")) expect_equal(res$index, 1:2) expect_equal(res$status, rep("failed", 2)) expect_equal(res$idf, normalizePath(path_idf, mustWork = FALSE)) expect_equal(res$epw, rep(NA_character_, 2)) expect_equal(res$version, rep(LATEST_EPLUS_VER, 2)) expect_equal(res$exit_status > 0, rep(TRUE, 2)) expect_s3_class(res$start_time, "POSIXct") expect_s3_class(res$end_time, "POSIXct") expect_equal(res$output_dir, normalizePath(file.path(tempdir(), c("a", "b")), mustWork = FALSE)) expect_equal(res$energyplus, rep(eplus_exe(LATEST_EPLUS_VER), 2L)) checkmate::expect_list(res$stdout, "character") }) # vim: set fdm=marker: