tests/testthat/test-impl-idfobj.R

# VALUE {{{
test_that("get_idfobj_value()", {
    skip_on_cran()
    idf_env <- parse_idf_file(idftext("idf", LATEST_EPLUS_VER))
    idd_env <- get_priv_env(use_idd(LATEST_EPLUS_VER))$idd_env()

    expect_equal(
        ignore_attr = TRUE,
        get_idfobj_value(idd_env, idf_env, 1), tolerance = 1e-5,
        list(Name = "WD01",
             Roughness = "MediumSmooth",
             Thickness = 0.0191,
             Conductivity = 0.115,
             Density = 513,
             `Specific Heat` = 1381,
             `Thermal Absorptance` = 0.9,
             `Solar Absorptance` = 0.78,
             `Visible Absorptance` = 0.78
        )
    )

    expect_equal(
        ignore_attr = TRUE,
        get_idfobj_value(idd_env, idf_env, 1, unit = TRUE), tolerance = 1e-5,
        list(Name = "WD01",
             Roughness = "MediumSmooth",
             Thickness = units::set_units(0.0191, "m"),
             Conductivity = units::set_units(0.115, "W/K/m"),
             Density = units::set_units(513, "kg/m^3"),
             `Specific Heat` = units::set_units(1381, "J/K/kg"),
             `Thermal Absorptance` = 0.9,
             `Solar Absorptance` = 0.78,
             `Visible Absorptance` = 0.78
        )
    )

    expect_equal(get_idfobj_value(idd_env, idf_env, 1, simplify = TRUE),
        c("WD01", "MediumSmooth", "0.019099999", "0.115", "513", "1381", "0.9", "0.78", "0.78")
    )

    val <- get_idf_value(idd_env, idf_env, object = 1, property = "type_enum")
    expect_silent(with_option(list(view_in_ip = TRUE), get_value_list(val, TRUE)))

    idf_env <- parse_idf_file(path_eplus_example(LATEST_EPLUS_VER, "1ZoneUncontrolled.idf"))
    idd_env <- get_priv_env(use_idd(LATEST_EPLUS_VER))$idd_env()

    val <- get_idf_value(idd_env, idf_env, object = 8, property = "type_enum")
    val[2, `:=`(value_chr = "4.5", value_num = 4.5)]
    expect_warning(l <- get_value_list(val), "Truncated error")
    expect_equal(l[[2]], 4L)
})
# }}}

# VALUE_POSSIBLE {{{
test_that("get_idfobj_possible()", {
    skip_on_cran()
    idf_env <- parse_idf_file(idftext("idf", LATEST_EPLUS_VER))
    idd_env <- get_priv_env(use_idd(LATEST_EPLUS_VER))$idd_env()
    cls_id <- idd_env$class[class_name == "Construction", class_id]
    fld_id <- idd_env$field[class_id == cls_id, field_id][1:5]

    expect_equal(
        ignore_attr = TRUE,
        get_idfobj_possible(idd_env, idf_env, 2),
        data.table(class_id = cls_id, class_name = "Construction", object_id = 2L,
            object_name = "WALL-1", field_id = fld_id, field_index = 1:5,
            field_name = c("Name", "Outside Layer", paste("Layer", 2:4)),
            value_id = 10:14, value_chr = c("WALL-1", "WD01", "PW03", "IN02", "GP01"),
            value_num = rep(NA_real_, 5),
            auto = NA_character_, default = rep(list(NA_character_), 5),
            choice = list(), range = rep(list(ranger(NA_real_, FALSE, NA_real_, FALSE)), 5),
            source = c(list(NULL), rep(list(c("WD01", "WD02")), 4))
        )
    )

    expect_equal(
        ignore_attr = TRUE,
        get_idfobj_possible(idd_env, idf_env, 2, 2),
        data.table(class_id = cls_id, class_name = "Construction", object_id = 2L,
            object_name = "WALL-1", field_id = fld_id[2], field_index = 2,
            field_name = "Outside Layer",
            value_id = 11, value_chr = "WD01", value_num = NA_real_,
            auto = NA_character_, default = list(NA_character_),
            choice = list(), range = list(ranger(NA_real_, FALSE, NA_real_, FALSE)),
            source = list(c("WD01", "WD02"))
        )
    )

    skip_on_cran()

    idf_env <- parse_idf_file(path_eplus_example(LATEST_EPLUS_VER, "5Zone_Transformer.idf"))
    expect_equal(length(get_idfobj_possible(idd_env, idf_env, object = 278, 11)$source[[1]]), 88)
})
# }}}

# VALUE_RELATION {{{
test_that("get_idfobj_relation()", {
    skip_on_cran()
    idf_env <- parse_idf_file(idftext("idf", LATEST_EPLUS_VER))
    idd_env <- get_priv_env(use_idd(LATEST_EPLUS_VER))$idd_env()
    src_cls_id <- idd_env$class[class_name == "Construction", class_id]
    src_fld_id <- idd_env$field[class_id == src_cls_id, field_id][1]
    cls_id <- idd_env$class[class_name == "BuildingSurface:Detailed", class_id]
    fld_id <- idd_env$field[class_id == cls_id, field_id][3]

    expect_equal(
        ignore_attr = TRUE,
        get_idfobj_relation(idd_env, idf_env, 2, 10),
        list(
            ref_to = data.table(
                class_id = integer(), class_name = character(),
                object_id = integer(), object_name = character(),
                field_id = integer(), field_index = integer(), field_name = character(),
                value_id = integer(), value_chr = character(), value_num = double(), type_enum = integer(),
                src_class_id = integer(), src_class_name = character(),
                src_object_id = integer(), src_object_name = character(),
                src_field_id = integer(), src_field_index = integer(), src_field_name = character(),
                src_value_id = integer(), src_value_chr = character(), src_value_num = double(), src_type_enum = integer(),
                src_enum = integer(), dep = integer()
            ),
            ref_by = data.table(
                class_id = cls_id, class_name = "BuildingSurface:Detailed",
                object_id = 3L, object_name = "WALL-1PF",
                field_id = fld_id, field_index = 3L, field_name = "Construction Name",
                value_id = 17L, value_chr = "WALL-1", value_num = NA_integer_, type_enum = 5L,
                src_class_id = src_cls_id, src_class_name = "Construction",
                src_object_id = 2L, src_object_name = "WALL-1",
                src_field_id = src_fld_id, src_field_index = 1L, src_field_name = "Name",
                src_value_id = 10L, src_value_chr = "WALL-1", src_value_num = NA_integer_, src_type_enum = 4L,
                src_enum = 2L, dep = 0L
            ),
            node = data.table(
                class_id = integer(), class_name = character(),
                object_id = integer(), object_name = character(),
                field_id = integer(), field_index = integer(), field_name = character(),
                value_id = integer(), value_chr = character(), value_num = double(), type_enum = integer(),
                src_class_id = integer(), src_class_name = character(),
                src_object_id = integer(), src_object_name = character(),
                src_field_id = integer(), src_field_index = integer(), src_field_name = character(),
                src_value_id = integer(), src_value_chr = character(), src_value_num = double(), src_type_enum = integer(),
                src_enum = integer(), dep = integer()
            )
        )
    )
})
# }}}

# TABLE {{{
test_that("get_idfobj_table()", {
    skip_on_cran()
    idf_env <- parse_idf_file(idftext("idf", LATEST_EPLUS_VER))
    idd_env <- get_priv_env(use_idd(LATEST_EPLUS_VER))$idd_env()

    expect_equal(
        get_idfobj_table(idd_env, idf_env, 2),
        data.table(id = 2L, name = "WALL-1", class = "Construction", index = 1:5,
            field = c("Name", "Outside Layer", paste("Layer", 2:4)),
            value = c("WALL-1", "WD01", "PW03", "IN02", "GP01")
        )
    )
})
# }}}

# STRING {{{
test_that("get_idfobj_string()", {
    skip_on_cran()
    idf_env <- parse_idf_file(idftext("idf", LATEST_EPLUS_VER))
    idd_env <- get_priv_env(use_idd(LATEST_EPLUS_VER))$idd_env()

    expect_equal(get_idfobj_string(idd_env, idf_env, 2, leading = 0, sep_at = 10, comment = FALSE),
        c("Construction,",
          "WALL-1,   !- Name",
          "WD01,     !- Outside Layer",
          "PW03,     !- Layer 2",
          "IN02,     !- Layer 3",
          "GP01;     !- Layer 4")
    )

    expect_equal(get_idfobj_string(idd_env, idf_env, 1, leading = 0, sep_at = 10),
        c("! this is a test comment for WD01",
          "",
          "Material,",
          "WD01,     !- Name",
          "MediumSmooth,  !- Roughness",
          "0.019099999,  !- Thickness {m}",
          "0.115,    !- Conductivity {W/m-K}",
          "513,      !- Density {kg/m3}",
          "1381,     !- Specific Heat {J/kg-K}",
          "0.9,      !- Thermal Absorptance",
          "0.78,     !- Solar Absorptance",
          "0.78;     !- Visible Absorptance")
    )
})
# }}}

# COMMENT {{{
test_that("set_idfobj_comment", {
    skip_on_cran()
    idf_env <- parse_idf_file(idftext("idf", LATEST_EPLUS_VER))
    idd_env <- get_priv_env(use_idd(LATEST_EPLUS_VER))$idd_env()

    # can delete comments
    expect_equal(set_idfobj_comment(idd_env, idf_env, 1, comment = NULL)$comment, list(NULL))

    # can append comments
    expect_equal(set_idfobj_comment(idd_env, idf_env, 1, comment = "a")$comment[[1]][2], "a")

    # can prepend comments
    expect_equal(set_idfobj_comment(idd_env, idf_env, 1, comment = "a", append = FALSE)$comment[[1]][1], "a")

    # can reset comments
    expect_equal(set_idfobj_comment(idd_env, idf_env, 1, comment = "a", append = NULL)$comment, list("a"))

    # can detect invalid `append` value
    expect_error(set_idfobj_comment(idd_env, idf_env, 1, comment = "a", append = 1:2)$comment, class = "eplusr_error")

    # can wrap comment at specified `width`
    expect_equal(set_idfobj_comment(idd_env, idf_env, 1, comment = c("a", "bb ccc"), append = NULL, width = 1L)$comment[[1]], c("a", "bb", "ccc"))
})
# }}}

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