tests/testthat/test-constants.R

context("constants class")
library(photosynthesis)

test_that("constants returns class constants and list", {
  cnstnts = make_constants(use_tealeaves = FALSE)
  expect_s3_class(cnstnts, "constants")
  expect_s3_class(cnstnts, "list")

  cnstnts = make_constants(use_tealeaves = TRUE)
  expect_s3_class(cnstnts, "constants")
  expect_s3_class(cnstnts, "list")
})

test_that("fails when a parameter is left out", {
  cnstnts = make_constants(use_tealeaves = FALSE)
  cnstnts$D_c0 = NULL
  expect_error(constants(cnstnts))

  cnstnts = make_constants(use_tealeaves = TRUE)
  cnstnts$D_c0 = NULL
  expect_error(constants(cnstnts))
})

test_that("removes an improper parameter", {
  cnstnts = make_constants(use_tealeaves = FALSE)
  cnstnts$foo = set_units(1)
  cnstnts %<>% constants(use_tealeaves = FALSE)
  expect_true(is.null(cnstnts$foo))
})

test_that("f_nu returns a list of two numbers", {
  cnstnts = make_constants(use_tealeaves = FALSE)
  T_high = set_units(298.15, "K")
  T_low = set_units(300, "K")
  nu = cnstnts$f_nu(
    set_units(3999), "forced",
    T_high, T_low, "lower", FALSE
  )
  expect_true(is.list(nu))
  expect_true(length(nu) == 2L)
  expect_true(length(nu[[1]]) == 1L)
  expect_true(length(nu[[2]]) == 1L)
  expect_true(is.numeric(nu[[1]]))
  expect_true(is.numeric(nu[[2]]))

  nu = cnstnts$f_nu(
    set_units(4001), "forced",
    T_high, T_low, "lower", FALSE
  )
  expect_true(is.list(nu))
  expect_true(length(nu) == 2L)
  expect_true(length(nu[[1]]) == 1L)
  expect_true(length(nu[[2]]) == 1L)
  expect_true(is.numeric(nu[[1]]))
  expect_true(is.numeric(nu[[2]]))

  nu = cnstnts$f_nu(
    set_units(1), "free",
    T_high, T_low, "lower", FALSE
  )
  expect_true(is.list(nu))
  expect_true(length(nu) == 2L)
  expect_true(length(nu[[1]]) == 1L)
  expect_true(length(nu[[2]]) == 1L)
  expect_true(is.numeric(nu[[1]]))
  expect_true(is.numeric(nu[[2]]))

  nu = cnstnts$f_nu(
    set_units(1), "free",
    T_high, T_low, "upper", FALSE
  )
  expect_true(is.list(nu))
  expect_true(length(nu) == 2L)
  expect_true(length(nu[[1]]) == 1L)
  expect_true(length(nu[[2]]) == 1L)
  expect_true(is.numeric(nu[[1]]))
  expect_true(is.numeric(nu[[2]]))

  nu1 = cnstnts$f_nu(
    set_units(1), "free",
    T_high, T_low, "lower", FALSE
  )
  nu2 = cnstnts$f_nu(
    set_units(1), "free",
    T_low, T_high, "upper", FALSE
  )
  expect_equal(nu1, nu2)

  expect_error(cnstnts$f_nu(
    set_units(1), "foo",
    T_high, T_low, "lower"
  ))
})

test_that("f_sh returns a vector of one unitless number of numeric
          class", {
  cnstnts = make_constants(use_tealeaves = FALSE)
  sh = cnstnts$f_sh("forced")
  expect_true(length(sh) == 1L)
  expect_true(is(sh, "numeric"))
  expect_true(!is(sh, "units"))

  sh = cnstnts$f_sh("free")
  expect_true(length(sh) == 1L)
  expect_true(!is(sh, "units"))
})
cdmuir/photosynthesis documentation built on March 5, 2024, 9:26 a.m.