tests/boolean.R

library(datapackage)
source("helpers.R")


fielddescriptor <- list(
  name = "boolean",
  title = "A boolean field",
  description = "A description",
  type = "boolean"
)

res <- datapackage:::dp_to_boolean.character(c("TRUE", "FALSE", ""), 
  fielddescriptor = fielddescriptor)
expect_equal(res, c(TRUE, FALSE, NA), attributes = FALSE)
expect_attribute(res, "fielddescriptor", 
  c(fielddescriptor, list(trueValues = c("true", "TRUE", "True", "1"), 
    falseValues = c("false", "FALSE", "False", "0"))))

res <- datapackage:::dp_to_boolean.character(c("True", "False", ""), 
  fielddescriptor = fielddescriptor)
expect_equal(res, c(TRUE, FALSE, NA), attributes = FALSE)

res <- datapackage:::dp_to_boolean.character(c("true", "false", ""), 
  fielddescriptor = fielddescriptor)
expect_equal(res, c(TRUE, FALSE, NA), attributes = FALSE)

res <- datapackage:::dp_to_boolean.character(c("1", "0", ""), 
  fielddescriptor = fielddescriptor)
expect_equal(res, c(TRUE, FALSE, NA), attributes = FALSE)

res <- datapackage:::dp_to_boolean.character(c(), 
  fielddescriptor = fielddescriptor)
expect_equal(res, logical(0), attributes = FALSE)

res <- datapackage:::dp_to_boolean.character(c(""), 
  fielddescriptor = fielddescriptor)
expect_equal(res, as.logical(NA), attributes = FALSE)

expect_error( datapackage:::dp_to_boolean.character(c("foo", ""), 
    fielddescriptor = fielddescriptor) )


# ==== Custom trueValues and falseValues
fielddescriptor <- list(
  name = "boolean",
  title = "A boolean field",
  description = "A description",
  type = "boolean",
  trueValues = "yes",
  falseValues = "no"
)

expect_error( datapackage:::dp_to_boolean.character(c("FALSE", "TRUE", ""), 
    fielddescriptor = fielddescriptor) )

res <- datapackage:::dp_to_boolean.character(c("yes", "no", "", "yes"), 
  fielddescriptor = fielddescriptor)
expect_equal(res, c(TRUE, FALSE, NA, TRUE), attributes = FALSE)
expect_attribute(res, "fielddescriptor", fielddescriptor)

# ==== No fielddescriptor

res <- datapackage:::dp_to_boolean.character(c("true", "False", "FALSE", "0", "", NA, "TRUE"))
expect_equal(res, c(TRUE, FALSE, FALSE, FALSE, NA, NA, TRUE), attributes = FALSE)

fielddescriptor <- list(
  type = "boolean",
  trueValues = c("true", "TRUE", "True", "1"),
  falseValues = c("false", "FALSE", "False", "0")
)
expect_attribute(res, "fielddescriptor", fielddescriptor)

# =============================================================================
# dp_to_boolean.integer

fielddescriptor <- list(
  type = "boolean",
  trueValues = "1",
  falseValues = "0"
)
res <- datapackage:::dp_to_boolean.integer(c(1, 0, NA), 
  fielddescriptor = fielddescriptor)
expect_equal(res, c(TRUE, FALSE, NA), attributes = FALSE)
expect_attribute(res, "fielddescriptor", fielddescriptor)

fielddescriptor <- list(
  type = "boolean",
  trueValues = "42",
  falseValues = "0"
)
res <- datapackage:::dp_to_boolean.integer(c(42, 0, NA), 
  fielddescriptor = fielddescriptor)
expect_equal(res, c(TRUE, FALSE, NA), attributes = FALSE)

fielddescriptor <- list(
  type = "boolean",
  trueValues = "42",
  falseValues = "1"
)
res <- datapackage:::dp_to_boolean.integer(c(42, 1, NA), 
  fielddescriptor = fielddescriptor)
expect_equal(res, c(TRUE, FALSE, NA), attributes = FALSE)

fielddescriptor <- list(
  type = "boolean",
  trueValues = c("1", "42"),
  falseValues = "0"
)
res <- datapackage:::dp_to_boolean.integer(c(42, 1, 0, NA), 
  fielddescriptor = fielddescriptor)
expect_equal(res, c(TRUE, TRUE, FALSE, NA), attributes = FALSE)

fielddescriptor <- list(
  type = "boolean",
  trueValues = c("1", "one"),
  falseValues = "0"
)
expect_error(datapackage:::dp_to_boolean.integer(c(42, 1, 0, NA), 
    fielddescriptor = fielddescriptor))

fielddescriptor <- list(
  type = "boolean",
  trueValues = "1",
  falseValues = "0"
)
expect_warning(
  res <- datapackage:::dp_to_boolean.integer(c(42, 1, 0, NA, 0), 
    fielddescriptor = fielddescriptor)
)
expect_equal(res, c(TRUE, TRUE, FALSE, NA, FALSE), attributes = FALSE)

# === NA
fielddescriptor <- list(
  name = "boolean",
  missingValues = c("--")
)
res <- dp_to_boolean(c("TRUE","--", "FALSE", NA), fielddescriptor)
expect_equal(res, c(TRUE, NA, FALSE, NA), attributes = FALSE)
expect_error(res <- dp_to_boolean(c("TRUE","---", "FALSE", NA), fielddescriptor))

# =============================================================================
# csv_colclass

res <- datapackage:::csv_colclass_boolean(
  list(trueValues = "True", falseValues = "False"))
expect_equal(res, "character")

res <- datapackage:::csv_colclass_boolean(
  list(trueValues = "true", falseValues = "false"))
expect_equal(res, "character")

res <- datapackage:::csv_colclass_boolean(
  list(trueValues = "TRUE", falseValues = "FALSE"))
expect_equal(res, "logical")

res <- datapackage:::csv_colclass_boolean(
  list(trueValues = "1", falseValues = "0"))
expect_equal(res, "integer")

res <- datapackage:::csv_colclass_boolean()
expect_equal(res, "character")

res <- datapackage:::csv_colclass_boolean(
  list(trueValues = "TRUE", falseValues = "false"))
expect_equal(res, "character")

res <- datapackage:::csv_colclass_boolean(
  list(trueValues = "TRUE"))
expect_equal(res, "character")

res <- datapackage:::csv_colclass_boolean(
  list(falseValues = "FALSE"))
expect_equal(res, "character")

res <- datapackage:::csv_colclass_boolean(
  list(trueValues = c("true", "TRUE"), falseValues = "FALSE"))
expect_equal(res, "character")

res <- datapackage:::csv_colclass_boolean(
  list(missingValues = c("--")))
expect_equal(res, "character")


# =============================================================================
# csv_format

res <- datapackage:::csv_format_boolean(c(TRUE, FALSE, NA))
expect_equal(res, c(TRUE, FALSE, NA))

res <- datapackage:::csv_format_boolean(c(TRUE, FALSE, NA), 
  fielddescriptor = list(missingValues = c("X", "-")))
expect_equal(res, c("TRUE", "FALSE", "X"))

res <- datapackage:::csv_format_boolean(c(TRUE, FALSE, NA), 
  fielddescriptor = list(trueValues = c("WAAR", "TRUE"),
    falseValues = c("ONWAAR", "FALSE")))
expect_equal(res, c(TRUE, FALSE, NA))

res <- datapackage:::csv_format_boolean(c(TRUE, FALSE, NA), 
  fielddescriptor = list(trueValues = c("WAAR"),
    falseValues = c("ONWAAR")))
expect_equal(res, c("WAAR", "ONWAAR", NA))
djvanderlaan/datapackage documentation built on June 12, 2025, 2:44 a.m.