# VALIDTATE {{{
test_that("Validate method", {
skip_on_cran()
idf <- read_idf(path_eplus_example(LATEST_EPLUS_VER, "1ZoneUncontrolled.idf"))
idf_env <- get_priv_env(idf)$m_idf_env
idd_env <- get_priv_env(idf)$idd_env()
expect_s3_class(empty_validity(), "IdfValidity")
expect_equal(names(empty_validity()),
c("missing_object",
"duplicate_object",
"conflict_name",
"incomplete_extensible",
"missing_value",
"invalid_autosize",
"invalid_autocalculate",
"invalid_character",
"invalid_numeric",
"invalid_integer",
"invalid_choice",
"invalid_range",
"invalid_reference"
)
)
expect_error(level_checks(1))
expect_type(format_validity(empty_validity()), "character")
expect_output(print.IdfValidity(empty_validity()))
expect_output(print.EpwValidity(empty_validity()))
# MISSING OBJECT {{{
env_in <- parse_idf_file(idftext("idf"))
expect_equal(
check_missing_object(idd_env, idf_env, env_in)$validity$missing_object,
c("Building", "GlobalGeometryRules")
)
ids <- get_idd_class(idd_env, c("Building", "GlobalGeometryRules"))$class_id
expect_equal(
check_missing_object(idd_env, idf_env, list(object = list(class_id = ids)))$validity$missing_object,
character(0)
)
# }}}
# DUPLICATE OBJECT {{{
env_in <- list2env(parse_idf_file(idftext("idf")))
env_in$validity <- empty_validity()
expect_equal(nrow(check_duplicate_object(idd_env, idf_env, env_in)$validity$duplicate_object), 0L)
env_in$object <- rbindlist(list(
env_in$object,
data.table(
object_id = 6:7, object_name = c("Bld", "Bld"),
object_name_lower = c("bld", "bld"),
class_id = get_idd_class(idd_env, "Building")$class_id,
comment = list(NULL, NULL)
)
), use.names = TRUE)
env_in$value <- rbindlist(list(
env_in$value,
data.table(
object_id = 6:7,
object_name = "Bld",
class_id = get_idd_class(idd_env, "Building")$class_id,
class_name = "Building",
field_id = get_idd_field(idd_env, "Building", "Name")$field_id,
field_index = 1L,
field_name = "Name",
units = NA_character_,
ip_units = NA_character_,
type_enum = IDDFIELD_TYPE$alpha,
value_id = 45:46,
value_chr = "Bld",
value_num = NA_real_
)
), fill = TRUE)
expect_equal(check_duplicate_object(idd_env, idf_env, env_in)$validity$duplicate_object$object_id,
c(6L, 7L)
)
# }}}
# CONFLICT NAME {{{
env_in <- list2env(parse_idf_file(idftext("idf")))
env_in$validity <- empty_validity()
env_in$check_whole <- TRUE
expect_equal(nrow(check_conflict_name(idd_env, idf_env, env_in)$validity$conflict_name), 0L)
env_in$object <- rbindlist(list(
env_in$object,
data.table(
object_id = 6:7, object_name = "Bld",
object_name_lower = "bld",
class_id = get_idd_class(idd_env, "Building")$class_id,
comment = list(NULL, NULL)
)
), use.names = TRUE)
env_in$value <- rbindlist(list(
env_in$value,
data.table(
object_id = 6:7,
object_name = c("Bld", "Bld"),
class_id = rep(get_idd_class(idd_env, "Building")$class_id, 2),
class_name = rep("Building", 2),
field_id = rep(get_idd_field(idd_env, "Building", "Name")$field_id, 2),
field_index = rep(1L, 2),
field_name = rep("Name", 2),
units = rep(NA_character_, 2),
ip_units = rep(NA_character_, 2),
type_enum = rep(IDDFIELD_TYPE$alpha, 2),
value_id = 45:46,
value_chr = c("Bld", "Bld"),
value_num = rep(NA_real_, 2)
)
), fill = TRUE)
expect_equal(check_conflict_name(idd_env, idf_env, env_in)$validity$conflict_name$object_id,
c(6L, 7L)
)
# }}}
# INCOMPLETE EXTENSIBLE {{{
env_in <- list2env(parse_idf_file(idftext("idf")))
env_in$validity <- empty_validity()
add_joined_cols(env_in$object, env_in$value, "object_id", c("class_id", "object_name"))
add_class_property(idd_env, env_in$value, c("class_id", "class_name"))
add_field_property(idd_env, env_in$value, c("extensible_group", "field_index", "field_name", "units", "ip_units", "type_enum"))
expect_equal(nrow(check_incomplete_extensible(idd_env, idf_env, env_in)$validity$incomplete_extensible), 0L)
invisible(env_in$value[extensible_group == 3L, value_chr := NA_character_])
expect_silent({err <- check_incomplete_extensible(idd_env, idf_env, env_in)$validity$incomplete_extensible})
expect_equal(err$object_id, rep(3L, 3))
expect_equal(err$field_index, 18:20)
expect_equal(err$value_id, 32:34)
# }}}
# MISSING VALUE {{{
env_in <- list2env(parse_idf_file(idftext("idf")))
env_in$validity <- empty_validity()
add_joined_cols(env_in$object, env_in$value, "object_id", c("class_id", "object_name"))
add_class_property(idd_env, env_in$value, c("class_id", "class_name"))
add_field_property(idd_env, env_in$value, c("required_field", "field_index", "field_name", "units", "ip_units", "type_enum"))
invisible(env_in$value[J(c(1L, 10L, 15L)), on = "value_id", value_chr := NA_character_])
expect_silent({mis <- check_missing_value(idd_env, idf_env, env_in)$validity$missing_value})
expect_equal(mis$object_id, c(1:3, 4, 4))
expect_equal(mis$value_id, c(1L, 10L, 15L, 46L, 47L))
# }}}
# INVALID AUTOSIZE {{{
env_in <- list2env(parse_idf_file(idftext("idf")))
env_in$validity <- empty_validity()
add_joined_cols(env_in$object, env_in$value, "object_id", c("class_id", "object_name"))
add_class_property(idd_env, env_in$value, c("class_id", "class_name"))
add_field_property(idd_env, env_in$value, c("autosizable", "field_index", "field_name", "units", "ip_units", "type_enum"))
invisible(env_in$value[field_name == "Name", value_chr := "autosize"])
set(env_in$value, NULL, "value_lower", stri_trans_tolower(env_in$value$value_chr))
expect_silent({autosize <- check_invalid_autosize(idd_env, idf_env, env_in)$validity$invalid_autosize})
expect_equal(autosize$object_id, 1:4)
expect_equal(autosize$field_index, rep(1L, 4L))
expect_equal(autosize$value_id, c(1L, 10L, 15L, 41L))
# }}}
# INVALID AUTOCALCULATE {{{
env_in <- list2env(parse_idf_file(idftext("idf")))
env_in$validity <- empty_validity()
add_joined_cols(env_in$object, env_in$value, "object_id", c("class_id", "object_name"))
add_class_property(idd_env, env_in$value, c("class_id", "class_name"))
add_field_property(idd_env, env_in$value, c("autocalculatable", "field_index", "field_name", "units", "ip_units", "type_enum"))
invisible(env_in$value[field_name == "Name", value_chr := "autocalculate"])
set(env_in$value, NULL, "value_lower", stri_trans_tolower(env_in$value$value_chr))
expect_silent({autocal <- check_invalid_autocalculate(idd_env, idf_env, env_in)$validity$invalid_autocalculate})
expect_equal(autocal$object_id, 1:4)
expect_equal(autocal$field_index, rep(1L, 4L))
expect_equal(autocal$value_id, c(1L, 10L, 15L, 41L))
# }}}
# INVALID CHARACTER {{{
env_in <- list2env(parse_idf_file(idftext("idf")))
env_in$validity <- empty_validity()
add_joined_cols(env_in$object, env_in$value, "object_id", c("class_id", "object_name"))
add_class_property(idd_env, env_in$value, c("class_id", "class_name"))
add_field_property(idd_env, env_in$value, c("field_index", "field_name", "units", "ip_units", "type_enum"))
invisible(env_in$value[field_name == "Name", `:=`(value_chr = "1", value_num = 1L)])
expect_silent({chr <- check_invalid_character(idd_env, idf_env, env_in)$validity$invalid_character})
expect_equal(chr$object_id, 1:4)
expect_equal(chr$field_index, rep(1L, 4L))
expect_equal(chr$value_id, c(1L, 10L, 15L, 41L))
# }}}
# INVALID NUMERIC {{{
env_in <- list2env(parse_idf_file(idftext("idf")))
env_in$validity <- empty_validity()
add_joined_cols(env_in$object, env_in$value, "object_id", c("class_id", "object_name"))
add_class_property(idd_env, env_in$value, c("class_id", "class_name"))
add_field_property(idd_env, env_in$value, c("field_index", "field_name", "units", "ip_units", "type_enum"))
invisible(env_in$value[object_id == 1L & type_enum <= IDDFIELD_TYPE$real, `:=`(value_num = NA_real_)])
expect_silent({num <- check_invalid_numeric(idd_env, idf_env, env_in)$validity$invalid_numeric})
expect_equal(num$object_id, c(rep(1L, 7), rep(3L, 3), rep(4L, 2)))
expect_equal(num$value_id, c(3:9, 38:40, 46:47))
# }}}
# INVALID INTEGER {{{
env_in <- list2env(parse_idf_file(idftext("idf")))
env_in$validity <- empty_validity()
add_joined_cols(env_in$object, env_in$value, "object_id", c("class_id", "object_name"))
add_class_property(idd_env, env_in$value, c("class_id", "class_name"))
add_field_property(idd_env, env_in$value, c("field_index", "field_name", "units", "ip_units", "type_enum"))
invisible(env_in$value[object_id == 1L & type_enum == IDDFIELD_TYPE$real, `:=`(type_enum = IDDFIELD_TYPE$integer)])
expect_silent({int <- check_invalid_integer(idd_env, idf_env, env_in)$validity$invalid_integer})
expect_equal(int$object_id, rep(1L, 5))
expect_equal(int$value_id, c(3L, 4L, 7:9))
# }}}
# INVALID CHOICE {{{
env_in <- list2env(parse_idf_file(idftext("idf")))
env_in$validity <- empty_validity()
add_joined_cols(env_in$object, env_in$value, "object_id", c("class_id", "object_name"))
add_class_property(idd_env, env_in$value, c("class_id", "class_name"))
add_field_property(idd_env, env_in$value, c("choice", "field_index", "field_name", "units", "ip_units", "type_enum"))
invisible(env_in$value[object_id == 1L & type_enum == IDDFIELD_TYPE$choice, value_chr := "wrong"])
set(env_in$value, NULL, "value_lower", stri_trans_tolower(env_in$value$value_chr))
expect_silent({cho <- check_invalid_choice(idd_env, idf_env, env_in)$validity$invalid_choice})
expect_equal(cho$object_id, 1L)
expect_equal(cho$value_id, 2L)
# }}}
# INVALID RANGE {{{
env_in <- list2env(parse_idf_file(idftext("idf")))
env_in$validity <- empty_validity()
add_joined_cols(env_in$object, env_in$value, "object_id", c("class_id", "object_name"))
add_class_property(idd_env, env_in$value, c("class_id", "class_name"))
add_field_property(idd_env, env_in$value,
c("has_range", "maximum", "minimum", "lower_incbounds", "upper_incbounds",
"field_index", "field_name", "units", "ip_units", "type_enum")
)
invisible(env_in$value[value_id == 3L, value_num := -1])
expect_silent({ran <- check_invalid_range(idd_env, idf_env, env_in)$validity$invalid_range})
expect_equal(ran$object_id, 1L)
expect_equal(ran$value_id, 3L)
# }}}
# INVALID REFERENCE {{{
env_in <- list2env(parse_idf_file(idftext("idf")))
env_in$validity <- empty_validity()
env_in$check_whole <- TRUE
add_joined_cols(env_in$object, env_in$value, "object_id", c("class_id", "object_name"))
add_class_property(idd_env, env_in$value, c("class_id", "class_name"))
add_field_property(idd_env, env_in$value,
c("src_enum", "field_index", "field_name", "units", "ip_units", "type_enum")
)
expect_silent(ref <- check_invalid_reference(idd_env, env_in, env_in)$validity$invalid_reference)
expect_equal(ref$object_id, c(rep(2L, 3), rep(3L, 3)))
expect_equal(ref$value_id, c(12:14, 18L, 19L, 21L))
# }}}
})
# }}}
# vim: set fdm=marker:
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.