tests/integer.R

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


fielddescriptor <- list(
  name = "integer",
  title = "A integer field",
  description = "A description",
  type = "integer"
)
res <- datapackage:::dp_to_integer.character(c("10", "-100", "", NA), 
  fielddescriptor = fielddescriptor)
expect_equal(res, c(10L, -100L, NA_integer_, NA_integer_), attributes = FALSE)
expect_attribute(res, "fielddescriptor", fielddescriptor)
res <- datapackage:::dp_to_integer.integer(c(10, -100, NA), 
  fielddescriptor = fielddescriptor)
expect_equal(res, c(10L, -100L, NA_integer_), attributes = FALSE)
expect_attribute(res, "fielddescriptor", fielddescriptor)

# === Method call
fielddescriptor <- list(
  name = "integer",
  title = "A integer field",
  description = "A description",
  type = "integer"
)
res <- dp_to_integer(c("10", "-100", "", NA), fielddescriptor = fielddescriptor)
expect_equal(res, c(10L, -100L, NA_integer_, NA_integer_), attributes = FALSE)
expect_attribute(res, "fielddescriptor", fielddescriptor)
res <- dp_to_integer(c(10, -100, NA), fielddescriptor = fielddescriptor)
expect_equal(res, c(10L, -100L, NA_integer_), attributes = FALSE)
expect_attribute(res, "fielddescriptor", fielddescriptor)
res <- dp_to_integer(c(10L, -100L, NA_integer_), fielddescriptor = fielddescriptor)
expect_equal(res, c(10L, -100L, NA_integer_), attributes = FALSE)
expect_attribute(res, "fielddescriptor", fielddescriptor)

# === No Schema
fielddescriptor <- list(
  type = "integer"
)
res <- datapackage:::dp_to_integer.character(c("10", "-100", "", NA))
expect_equal(res, c(10L, -100L, NA_integer_, NA_integer_), attributes = FALSE)
expect_attribute(res, "fielddescriptor", fielddescriptor)
res <- datapackage:::dp_to_integer.integer(c(10, -100, NA))
expect_equal(res, c(10L, -100L, NA_integer_), attributes = FALSE)
expect_attribute(res, "fielddescriptor", fielddescriptor)

# === Empty input
res <- dp_to_integer(character(0))
expect_equal(res, integer(0), attributes = FALSE)
res <- dp_to_integer(character(0))
expect_equal(res, integer(0), attributes = FALSE)

# === Invalid characters
expect_error(res <- dp_to_integer(c("foo", "10", "10", NA)))

# === NA
fielddescriptor <- list(
  name = "integer",
  missingValues = c("--")
)
res <- dp_to_integer(c("10","--", "11", NA), fielddescriptor)
expect_equal(res, c(10, NA, 11, NA), attributes = FALSE)
expect_error(res <- dp_to_integer(c("10","---", "11", NA), fielddescriptor))

# === BareNumber
fielddescriptor <- list(
  name = "integer",
  title = "A integer field",
  description = "A description",
  type = "integer",
  bareNumber = FALSE
)
res <- datapackage:::dp_to_integer.character(c("€10", "-100%", "", NA), 
  fielddescriptor = fielddescriptor)
expect_equal(res, c(10L, -100L, NA_integer_, NA_integer_), attributes = FALSE)
expect_attribute(res, "fielddescriptor", fielddescriptor)
res <- datapackage:::dp_to_integer.integer(c(10, -100, NA), 
  fielddescriptor = fielddescriptor)
expect_equal(res, c(10L, -100L, NA_integer_), attributes = FALSE)
expect_attribute(res, "fielddescriptor", fielddescriptor)

# === Big mark
fielddescriptor <- list(
  name = "integer",
  title = "A integer field",
  description = "A description",
  type = "integer",
  groupChar = "."
)
res <- datapackage:::dp_to_integer.character(c("1.234", "-100.123.123", "", NA), 
  fielddescriptor = fielddescriptor)
expect_equal(res, c(1234L, -100123123L, NA_integer_, NA_integer_), attributes = FALSE)
expect_attribute(res, "fielddescriptor", fielddescriptor)

# true -> €10 = error
fielddescriptor <- list(
  name = "integer",
  title = "A integer field",
  description = "A description",
  type = "integer",
  bareNumber = TRUE
)
expect_error(datapackage:::dp_to_integer.character(c("€10", "-100%", "", NA), 
  fielddescriptor = fielddescriptor))


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

res <- datapackage:::csv_colclass_integer(list()) 
expect_equal(res, "integer")

fielddescriptor <- list(
  name = "integer",
  missingValues = c("--")
)
res <- datapackage:::csv_colclass_integer(fielddescriptor)
expect_equal(res, "character")

fielddescriptor <- list(
  name = "integer",
  bareNumber = FALSE
)
res <- datapackage:::csv_colclass_integer(fielddescriptor)
expect_equal(res, "character")

fielddescriptor <- list(
  name = "integer",
  bareNumber = TRUE
)
res <- datapackage:::csv_colclass_integer(fielddescriptor)
expect_equal(res, "integer")

fielddescriptor <- list(
  name = "integer",
  groupChar = " "
)
res <- datapackage:::csv_colclass_integer(fielddescriptor)
expect_equal(res, "character")

fielddescriptor <- list(
  name = "integer",
  groupChar = ""
)
res <- datapackage:::csv_colclass_integer(fielddescriptor)
expect_equal(res, "integer")


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

res <- datapackage:::csv_format_integer(c(12, NA))
expect_equal(res, c(12L, NA_integer_))

res <- datapackage:::csv_format_integer(c(12, NA), 
  fielddescriptor = list(missingValues = c("X", "0")))
expect_equal(res, c("12", "X"))

res <- datapackage:::csv_format_integer(c(12, NA), 
  fielddescriptor = list(bareNumber = FALSE))
expect_equal(res, c(12L, NA_integer_))

res <- datapackage:::csv_format_integer(c(12, 12345, NA), 
  fielddescriptor = list(groupChar = "."))
expect_equal(res, c("12", "12.345", NA))
djvanderlaan/datapackage documentation built on June 12, 2025, 2:44 a.m.