tests/testthat/test-units.R

testthat::context("Units")


test_that("Creating custom units", {
  id <-
    c("speed", "speed", "acceleration", "acceleration", "frequency")
  dimension <- c("length", "time", "length", "time", "time")
  power <- c(NA, "-1", NA, "-2", "-1")
  unitTypes <-
    data.frame(
      id = id,
      dimension = dimension,
      power = power,
      stringsAsFactors = FALSE
    )

  id <- c("minute", "centimeter")
  unitType <- c("time", "length")
  parentSI <- c("second", "meter")
  multiplierToSI <- c("0.0166", "1")
  description <-
    c("one minute is 60 seconds", "centimeter is a 100th of a meter")
  units <-
    data.frame(
      id = id,
      unitType = unitType,
      parentSI = parentSI,
      multiplierToSI = multiplierToSI,
      description = description,
      stringsAsFactors = FALSE
    )

  x <- set_unitList(units, unitTypes)
  testthat::expect_is(x, "list")
  testthat::expect_equal(length(x$unit), 2)
  testthat::expect_equal(length(x$unitType), 3)

  x <- set_unitList(units, unitTypes, as_metadata = TRUE)
  testthat::expect_is(x, "list")
})



test_that("Reading default unit definitions", {
  unitList <- get_unitList()

  testthat::expect_equal(dim(unitList$units), c(335, 10))
  # testthat::expect_equal(dim(unitList$unitTypes), c(118, 4))
  testthat::expect_equal(dim(unitList$unitTypes), c(297, 4))
})



test_that("Reading custom unit definitions from EML", {
  f <- system.file("tests", emld::eml_version(), "eml-datasetWithUnits.xml", package = "emld")
  eml <- read_eml(f)
  unitList <- get_unitList(eml)
  expect_is(unitList, "list")

  x <- set_unitList(unitList$units, unitList$unitTypes)
  expect_is(x, "list")


  ## Equivalently:
  additionalMetadata <- set_unitList(unitList$units,
    unitList$unitTypes,
    as_metadata = TRUE
  )
  eml <- list(additionalMetadata = additionalMetadata)
})

test_that("Ensuring standard units are not interpreted as custom units", {
  
  r <- EML::set_attributes(
    data.frame(
      attributeName = "soilmoisture", 
      formatString = "",
      unit = "percent",
      numberType = "real",
      attributeDefinition = "measurement of soil moisture",
      stringsAsFactors = FALSE),
    col_classes = "numeric")
  
  expect_true(
    !is.null(r$attribute[[1]]$measurementScale$ratio$unit$standardUnit))
  expect_true(
    is.null(r$attribute[[1]]$measurementScale$ratio$unit$customUnit))
  
})

Try the EML package in your browser

Any scripts or data that you put into this service are public.

EML documentation built on April 29, 2022, 1:06 a.m.