tests/testthat/test-param.R

test_that("Parametric methods", {
    skip_on_cran()

    # can stop if idf is not saved
    expect_error(param_job(empty_idf(LATEST_EPLUS_VER), NULL), class = "eplusr_error_idf_not_local")

    path_idf <- copy_eplus_example(LATEST_EPLUS_VER, "5Zone_Transformer.idf")
    path_epw <- path_eplus_weather(LATEST_EPLUS_VER, "USA_CA_San.Francisco.Intl.AP.724940_TMY3.epw")

    param <- param_job(path_idf, path_epw)

    # $version()
    expect_equal(param$version(), numeric_version(LATEST_EPLUS_VER))

    # $seed()
    expect_s3_class(param$seed(), "Idf")

    # $weather()
    expect_s3_class(param$weather(), "Epw")
    expect_null(param_job(path_idf, NULL)$weather())
})

test_that("$apply_measure()", {
    skip_on_cran()

    path_idf <- copy_eplus_example(LATEST_EPLUS_VER, "5Zone_Transformer.idf")
    param <- param_job(path_idf, NULL)

    mea <- function(idf, num) idf

    expect_error(param$apply_measure(function(idf) idf))
    expect_error(param$apply_measure(function(idf, ...) 1, a = 1:5))
    expect_s3_class(param$apply_measure(mea, num = 1:2, .names = "case"), "ParametricJob")
    expect_equal(names(param$models()), c("case_1", "case_2"))
    expect_error(param$apply_measure(mea, num = 1:2, .names = c("a", "b", "c")))

    eplusr_option(verbose_info = FALSE)
    param <- param_job(path_idf, NULL)
    eplusr_option(verbose_info = TRUE)
    expect_message(param$apply_measure(function(idf, num) idf, num = 1:2), "function")
    expect_message(param$apply_measure(mea, num = 1:2), "mea")
})

test_that("$param()", {
    skip_on_cran()

    path <- copy_eplus_example(LATEST_EPLUS_VER, "5Zone_Transformer.idf")
    param <- param_job(path, NULL)

    expect_s3_class(class = "ParametricJob",
        param$param("Supply Fan 1" = list(fan_total_efficiency = c(0.1, 0.5, 0.8)), .cross = TRUE)
    )
    expect_equal(length(param$models()), 3L)

    expect_s3_class(class = "ParametricJob",
        param$param(
            Material := list(Thickness = seq(0.1, 1, length.out = 3), Conductivity = seq(0.1, 0.6, length.out = 3)),
            "Supply Fan 1" = list(fan_total_efficiency = c(0.1, 0.5, 0.8))
        )
    )
    expect_equal(length(param$models()), 3L)

    expect_s3_class(class = "ParametricJob",
        param$param(
            Material := list(Thickness = seq(0.1, 1, length.out = 3), Conductivity = seq(0.1, 0.6, length.out = 3)),
            "Supply Fan 1" = list(fan_total_efficiency = c(0.1, 0.5, 0.8)),
            .cross = TRUE
        )
    )
    expect_equal(length(param$models()), 27L)

    expect_error(
        param$param(
            "Supply Fan 1" = list(fan_total_efficiency = c(0.1, 0.5, 0.8)),
            .names = c("p1", "p2")
        )
    )
    expect_s3_class(class = "ParametricJob",
        param$param(
            "Supply Fan 1" = list(fan_total_efficiency = c(0.1, 0.5, 0.8)),
            .names = "fan_eff"
        )
    )
})

test_that("$models()", {
    skip_on_cran()

    eplusr_option(verbose_info = FALSE)
    path_idf <- copy_eplus_example(LATEST_EPLUS_VER, "5Zone_Transformer.idf")
    param <- param_job(path_idf, NULL)

    expect_null(param$models())
    expect_null(param$models("new name"))

    param$apply_measure(function(idf, num) idf, num = 1:2)

    expect_type(param$models(), "list")
    expect_equal(length(param$models()), 2)
    expect_equal(names(param$models()), c("case_1", "case_2"))

    expect_equal(names(param$models(names = "model")), c("model_1", "model_2"))
    expect_error(names(param$models(names = c("a", "b", "c"))), "names")
})

test_that("$cases()", {
    skip_on_cran()

    path <- copy_eplus_example(LATEST_EPLUS_VER, "5Zone_Transformer.idf")

    param <- param_job(path, NULL)

    expect_null(param$cases())

    param$param(
        "Supply Fan 1" = list(
            fan_total_efficiency = c(0.1, 0.2),
            availability_schedule_name = c("FanAvailSched", "Always On")
        ),
        c("GP01", "GP02") := .(thickness = c(0.01, 0.02))
    )
    expect_equal(
        ignore_attr = TRUE,
        param$cases(),
        data.table(
            index = 1:2, case = c("case_1", "case_2"),
            param_1 = c(0.1, 0.2),
            param_2 = c("FanAvailSched", "Always On"),
            param_3 = c(0.01, 0.02)
        )
    )

    param$apply_measure(
        function(idf, eff, sch) {
            idf$set("Supply Fan 1" = list(fan_total_efficiency = eff, availability_schedule_name = sch))
            idf
        },
        c("FanAvailSched", "Always On"),
        eff = c(0.1, 0.2)
    )
    expect_equal(
        ignore_attr = TRUE,
        param$cases(),
        data.table(index = 1:2, case = c("case_1", "case_2"),
            eff = c(0.1, 0.2), sch = c("FanAvailSched", "Always On")
        )
    )
})

test_that("$run()", {
    skip_on_cran()

    path <- copy_eplus_example(LATEST_EPLUS_VER, "5Zone_Transformer.idf")
    param <- param_job(path, NULL)

    expect_error(param$run(), "No measure")

    param$apply_measure(function(idf, num) idf, num = 1:2)
    param$models()[[1L]]$set(Material := list(thickness = 0.05))
    expect_warning(param$run())

    path_epw <- path_eplus_weather(LATEST_EPLUS_VER, "USA_CA_San.Francisco.Intl.AP.724940_TMY3.epw")
    param <- param_job(path, path_epw)
    param$apply_measure(function(idf, num) idf, num = 1:2)
    expect_s3_class(param$run(), "ParametricJob")
})

test_that("$save()", {
    skip_on_cran()

    path <- copy_eplus_example(LATEST_EPLUS_VER, "5Zone_Transformer.idf")
    param <- param_job(path, NULL)
    expect_error(param$save())

    param$apply_measure(function(idf, num) idf, num = 1:2)
    expect_equal(
        ignore_attr = TRUE,
        param$save(),
        data.table(
            model = normalizePath(file.path(tempdir(), c("case_1", "case_2"), c("case_1.idf", "case_2.idf"))),
            weather = NA_character_
        )
    )

    param <- param_job(path, path_eplus_weather(LATEST_EPLUS_VER, "USA_CA_San.Francisco.Intl.AP.724940_TMY3.epw"))
    param$apply_measure(function(idf, num) idf, num = 1:2)
    expect_equal(
        ignore_attr = TRUE,
        param$save(separate = FALSE),
        data.table(
            model = normalizePath(file.path(tempdir(), c("case_1.idf", "case_2.idf"))),
            weather = normalizePath(file.path(tempdir(), "USA_CA_San.Francisco.Intl.AP.724940_TMY3.epw"))
        )
    )
})

test_that("$print()", {
    skip_on_cran()

    path <- copy_eplus_example(LATEST_EPLUS_VER, "5Zone_Transformer.idf")
    param <- param_job(path, NULL)
    expect_output(param$print())

    mea <- function(idf, num) idf
    param$apply_measure(mea, num = 1:2)
    expect_output(param$print())
})

test_that("==.ParametricJob and !=.ParametricJob", {
    skip_on_cran()

    path <- copy_eplus_example(LATEST_EPLUS_VER, "5Zone_Transformer.idf")
    param <- param_job(path, NULL)

    expect_false(param == 1)
    expect_true(param == param)
    expect_false(param != param)
})

# vim: set fdm=marker:
hongyuanjia/eplusr documentation built on Feb. 14, 2024, 5:38 a.m.