Nothing
# library(testthat)
# rm(list=ls())
# testthat::test_file("tests/testthat/test-convert_rate.ft.R")
# covr::file_coverage("R/convert_rate.ft.R", "tests/testthat/test-convert_rate.ft.R")
# cvr <- covr::package_coverage()
# covr::report(cvr)
capture.output({ ## stops printing outputs on assigning
if (!identical(Sys.getenv("NOT_CRAN"), "true")) return()
skip_on_cran()
# Create testing objects --------------------------------------------------
{
insp.ft_obj <- inspect.ft(flowthrough.rd, delta.oxy = 4, plot = FALSE)
## oxygen production data
insp.ft_obj_prod <- inspect.ft(cbind(flowthrough.rd[,1], -1*(flowthrough.rd[,4])),
time = 1, delta.oxy = 2, plot = FALSE)
# x objects
crft1 <- calc_rate.ft(insp.ft_obj,
flowrate = 2, from = 200, to = 500,
by = NULL, width = NULL, plot = FALSE)
crftmany <- calc_rate.ft(insp.ft_obj,
flowrate = 2, from = 200:300, to = 500:600,
by = NULL, width = NULL, plot = FALSE)
crftwidth <- calc_rate.ft(insp.ft_obj,
flowrate = 2,
by = "row", width = 300, plot = FALSE)
crftprod <- calc_rate.ft(insp.ft_obj_prod,
flowrate = 2, from = 200, to = 500,
by = NULL, width = NULL, plot = FALSE)
crftval <- calc_rate.ft(-1.4,
flowrate = 2, from = 200, to = 500,
by = NULL, width = NULL, plot = FALSE)
crftvec <- calc_rate.ft(seq(-0.9, -1.8, -0.1),
flowrate = 2, from = 200, to = 500,
by = NULL, width = NULL, plot = FALSE)
by_val <- -0.7
adjft.1 <- adjust_rate.ft(crft1, by = by_val)
adjft.many <- adjust_rate.ft(crftmany, by = by_val)
adjft.width <- adjust_rate.ft(crftwidth, by = by_val)
adjft.prod <- adjust_rate.ft(crftprod, by = 0.7)
adjft.vec <- adjust_rate.ft(crftmany$rate, by = by_val)
adjft.val <- adjust_rate.ft(-1.5, by = by_val)
S=30
t=15
P=1.01
conv.crft1 <- convert_rate.ft(crft1, oxy.unit = "mg/l", flowrate.unit = "L/m",
output.unit = "mg/h",
mass = NULL, area = NULL,
S=S, t=t, P=P)
conv.crft1.ms <- convert_rate.ft(crft1, oxy.unit = "mg/l", flowrate.unit = "L/m",
output.unit = "mg/h/g",
mass = 0.4, area = NULL,
S=S, t=t, P=P)
conv.crft1.as <- convert_rate.ft(crft1, oxy.unit = "mg/l", flowrate.unit = "L/m",
output.unit = "mg/h/cm2",
mass = NULL, area = 0.01,
S=S, t=t, P=P)
conv.crftmany <- convert_rate.ft(crftmany, oxy.unit = "mg/l", flowrate.unit = "L/m",
output.unit = "mg/h",
mass = NULL, area = NULL,
S=S, t=t, P=P)
conv.crftmany.ms <- convert_rate.ft(crftmany, oxy.unit = "mg/l", flowrate.unit = "L/m",
output.unit = "mg/h/g",
mass = 0.4, area = NULL,
S=S, t=t, P=P)
conv.crftmany.as <- convert_rate.ft(crftmany, oxy.unit = "mg/l", flowrate.unit = "L/m",
output.unit = "mg/h/cm2",
mass = NULL, area = 0.01,
S=S, t=t, P=P)
conv.crftwidth <- convert_rate.ft(crftwidth, oxy.unit = "mg/l", flowrate.unit = "L/m",
output.unit = "mg/h",
mass = NULL, area = NULL,
S=S, t=t, P=P)
conv.crftwidth.ms <- convert_rate.ft(crftwidth, oxy.unit = "mg/l", flowrate.unit = "L/m",
output.unit = "mg/h/g",
mass = 0.4, area = NULL,
S=S, t=t, P=P)
conv.crftwidth.as <- convert_rate.ft(crftwidth, oxy.unit = "mg/l", flowrate.unit = "L/m",
output.unit = "mg/h/cm2",
mass = NULL, area = 0.01,
S=S, t=t, P=P)
conv.adjft.1 <- convert_rate.ft(adjft.1, oxy.unit = "mg/l", flowrate.unit = "L/m",
output.unit = "mg/h",
mass = NULL, area = NULL,
S=S, t=t, P=P)
conv.adjft.1.ms <- convert_rate.ft(adjft.1, oxy.unit = "mg/l", flowrate.unit = "L/m",
output.unit = "mg/h/g",
mass = 0.4, area = NULL,
S=S, t=t, P=P)
conv.adjft.1.as <- convert_rate.ft(adjft.1, oxy.unit = "mg/l", flowrate.unit = "L/m",
output.unit = "mg/h/cm2",
mass = NULL, area = 0.01,
S=S, t=t, P=P)
conv.adjft.many <- convert_rate.ft(adjft.many, oxy.unit = "mg/l", flowrate.unit = "L/m",
output.unit = "mg/h",
mass = NULL, area = NULL,
S=S, t=t, P=P)
conv.adjft.many.ms <- convert_rate.ft(adjft.many, oxy.unit = "mg/l", flowrate.unit = "L/m",
output.unit = "mg/h/g",
mass = 0.4, area = NULL,
S=S, t=t, P=P)
conv.adjft.many.as <- convert_rate.ft(adjft.many, oxy.unit = "mg/l", flowrate.unit = "L/m",
output.unit = "mg/h/cm2",
mass = NULL, area = 0.01,
S=S, t=t, P=P)
conv.adjft.width <- convert_rate.ft(adjft.width, oxy.unit = "mg/l", flowrate.unit = "L/m",
output.unit = "mg/h",
mass = NULL, area = NULL,
S=S, t=t, P=P)
conv.adjft.width.ms <- convert_rate.ft(adjft.width, oxy.unit = "mg/l", flowrate.unit = "L/m",
output.unit = "mg/h/g",
mass = 0.4, area = NULL,
S=S, t=t, P=P)
conv.adjft.width.as <- convert_rate.ft(adjft.width, oxy.unit = "mg/l", flowrate.unit = "L/m",
output.unit = "mg/h/cm2",
mass = NULL, area = 0.01,
S=S, t=t, P=P)
}
# validate 'x' inputs -----------------------------------------------------
test_that("convert_rate.ft - stops if 'x' input not numeric, calc_rate.ft, or adjust_rate.ft", {
expect_error(convert_rate.ft("string",
oxy.unit = "mg/l", flowrate.unit = "l/s"),
regexp = "convert_rate.ft: 'x' must be an `calc_rate.ft` or `adjust_rate.ft` object, or a numeric value or vector.")
expect_error(convert_rate.ft(flowthrough.rd,
oxy.unit = "mg/l", flowrate.unit = "l/s"),
regexp = "convert_rate.ft: 'x' must be an `calc_rate.ft` or `adjust_rate.ft` object, or a numeric value or vector.")
expect_error(convert_rate.ft(inspect(flowthrough.rd, plot = FALSE),
oxy.unit = "mg/l", flowrate.unit = "l/s"),
regexp = "convert_rate.ft: 'x' must be an `calc_rate.ft` or `adjust_rate.ft` object, or a numeric value or vector.")
})
test_that("convert_rate.ft - stops if 'oxy.unit' is missing", {
expect_error(convert_rate.ft(-1.4,
oxy.unit = NULL, flowrate.unit = "l/s"),
regexp = "convert_rate.ft: 'oxy.unit' input is required.")
})
test_that("convert_rate.ft - stops if 'flowrate.unit' is missing", {
expect_error(convert_rate.ft(-1.4,
oxy.unit = "mg/l", flowrate.unit = NULL),
regexp = "convert_rate.ft: 'flowrate.unit' input is required.")
})
test_that("convert_rate.ft - `output.unit` defaults successfully applied if missing", {
# absolute
expect_warning(convert_rate.ft(-1.4,
oxy.unit = "mg/l", flowrate.unit = "l/s",
output.unit = NULL),
regexp = "convert_rate.ft: the 'output.unit' is not provided, applying default 'mgO2/h'.")
expect_identical(suppressWarnings(convert_rate.ft(-1.4,
oxy.unit = "mg/l", flowrate.unit = "l/s",
output.unit = NULL))$output.unit,
"mgO2/hr")
# mass-spec
expect_warning(convert_rate.ft(-1.4,
oxy.unit = "mg/l", flowrate.unit = "l/s",
output.unit = NULL, mass = 2),
regexp = "convert_rate.ft: the 'output.unit' is not provided, applying default 'mgO2/h/kg'.")
expect_identical(suppressWarnings(convert_rate.ft(-1.4,
oxy.unit = "mg/l", flowrate.unit = "l/s",
output.unit = NULL, mass = 2))$output.unit,
"mgO2/hr/kg")
# area-spec
expect_warning(convert_rate.ft(-1.4,
oxy.unit = "mg/l", flowrate.unit = "l/s",
output.unit = NULL, area = 2),
regexp = "convert_rate.ft: the 'output.unit' is not provided, applying default 'mgO2/h/m2'.")
expect_identical(suppressWarnings(convert_rate.ft(-1.4,
oxy.unit = "mg/l", flowrate.unit = "l/s",
output.unit = NULL, area = 2))$output.unit,
"mgO2/hr/m2")
})
test_that("convert_rate.ft - stops is both 'mass' and 'area' have inputs.", {
expect_error(convert_rate.ft(-1.4,
oxy.unit = "mg/l", flowrate.unit = "l/s",
output.unit = NULL, area = 2, mass = 3),
regexp = "convert_rate.ft: Cannot have inputs for both 'mass' and 'area'.")
})
test_that("convert_rate.ft - stops if 'output.unit' requires a 'mass' or 'area' input and neither is provided", {
expect_error(convert_rate.ft(-1.4,
oxy.unit = "mg/l", flowrate.unit = "l/s",
output.unit = "mg/h/kg", area = NULL, mass = NULL),
"convert_rate.ft: 'output.unit' requires a value for 'mass' or 'area'")
expect_error(convert_rate.ft(-1.4,
oxy.unit = "mg/l", flowrate.unit = "l/s",
output.unit = "mg/h/m2", area = NULL, mass = NULL),
"convert_rate.ft: 'output.unit' requires a value for 'mass' or 'area'")
})
test_that("convert_rate.ft - stops if a 'mass' or 'area' input entered but output.unit is not mass- or area-specific", {
expect_error(convert_rate.ft(-1.4,
oxy.unit = "mg/l", flowrate.unit = "l/s",
output.unit = "mg/h", area = NULL, mass = 2),
"convert_rate.ft: a 'mass' has been entered, but a mass-specific unit has not been specified in 'output.unit'.")
expect_error(convert_rate.ft(-1.4,
oxy.unit = "mg/l", flowrate.unit = "l/s",
output.unit = "mg/h", area = 2, mass = NULL),
"convert_rate.ft: an 'area' has been entered, but an area-specific unit has not been specified in 'output.unit'.")
})
test_that("convert_rate.ft - stops if units require t, S and P", {
expect_error(convert_rate.ft(-1.4,
oxy.unit = "mL/L", flowrate.unit = "l/s",
output.unit = "mg/h/mm2", area = 2, mass = NULL,
S = NULL, t = NULL, P = NULL),
"convert_rate.ft: Input or output units require Salinity input")
expect_error(convert_rate.ft(-1.4,
oxy.unit = "mL/L", flowrate.unit = "l/s",
output.unit = "mg/h/mm2", area = 2, mass = NULL,
S = 35, t = NULL, P = NULL),
"convert_rate.ft: Input or output units require Temperature input")
expect_message(convert_rate.ft(-1.4,
oxy.unit = "mL/L", flowrate.unit = "l/s",
output.unit = "mg/h/mm2", area = 2, mass = NULL,
S = 35, t = 15, P = NULL),
"convert_rate.ft: Input or output units require Atmospheric Pressure input")
})
test_that("convert_rate.ft - stops if S, t, and P are vectors", {
expect_error(convert_rate.ft(-0.0001534657, oxy.unit = "mL/L", time.unit = "s", output.unit = "mg/h/mm2",
flowrate.unit = "l/m",
area = 0.000001429,
S = 35:36,
t= 12,
P = 1.01),
"convert_rate.ft: The 'S' input should be a single value.")
expect_error(convert_rate.ft(-0.0001534657, oxy.unit = "mL/L", time.unit = "s", output.unit = "mg/h/mm2",
flowrate.unit = "l/m",
area = 0.000001429,
S = 35,
t= 12:13,
P = 1.01),
"convert_rate.ft: The 't' input should be a single value.")
expect_error(convert_rate.ft(-0.0001534657, oxy.unit = "mL/L", time.unit = "s", output.unit = "mg/h/mm2",
flowrate.unit = "l/m",
area = 0.000001429,
S = 35,
t= 12,
P = c(1,1.01)),
"convert_rate.ft: The 'P' input should be a single value.")
})
test_that("convert_rate.ft - correct S, t, and P values saved to summary", {
# single rate value
expect_equal(convert_rate.ft(-0.0001534657, oxy.unit = "mL/L", time.unit = "s", output.unit = "mg/h/mm2",
flowrate.unit = "l/m",
area = 0.000001429,
S = 35,
t= 12,
P = 1.01)$summary$S,
35)
# multiple rate values
expect_equal(convert_rate.ft(c(-0.001, -0.002), oxy.unit = "mL/L", time.unit = "s", output.unit = "mg/h/mm2",
flowrate.unit = "l/m",
area = 0.000001429,
S = 35,
t= 12,
P = 1.01)$summary$S,
c(35,35))
# single rate value
expect_equal(convert_rate.ft(-0.0001534657, oxy.unit = "mL/L", time.unit = "s", output.unit = "mg/h/mm2",
flowrate.unit = "l/m",
area = 0.000001429,
S = 35,
t= 12,
P = 1.01)$summary$t,
12)
# multiple rate values
expect_equal(convert_rate.ft(c(-0.001, -0.002), oxy.unit = "mL/L", time.unit = "s", output.unit = "mg/h/mm2",
flowrate.unit = "l/m",
area = 0.000001429,
S = 35,
t= 12,
P = 1.01)$summary$t,
c(12,12))
# single rate value
expect_equal(convert_rate.ft(-0.0001534657, oxy.unit = "mL/L", time.unit = "s", output.unit = "mg/h/mm2",
flowrate.unit = "l/m",
area = 0.000001429,
S = 35,
t= 12,
P = 1.01)$summary$P,
1.01)
# multiple rate values
expect_equal(convert_rate.ft(c(-0.001, -0.002), oxy.unit = "mL/L", time.unit = "s", output.unit = "mg/h/mm2",
flowrate.unit = "l/m",
area = 0.000001429,
S = 35,
t= 12,
P = 1.01)$summary$P,
c(1.01,1.01))
# NA when NULL
expect_equal(convert_rate.ft(-0.0001534657, oxy.unit = "mg/L", time.unit = "s", output.unit = "mg/h/mm2",
flowrate.unit = "l/m",
area = 0.000001429)$summary$S,
NA)
expect_equal(convert_rate.ft(-0.0001534657, oxy.unit = "mg/L", time.unit = "s", output.unit = "mg/h/mm2",
flowrate.unit = "l/m",
area = 0.000001429)$summary$t,
NA)
# Default value for P
expect_equal(convert_rate.ft(-0.0001534657, oxy.unit = "mg/L", time.unit = "s", output.unit = "mg/h/mm2",
flowrate.unit = "l/m",
area = 0.000001429)$summary$P,
1.013253)
# multiple rate values
expect_equal(convert_rate.ft(c(-0.001, -0.002), oxy.unit = "mg/L", time.unit = "s", output.unit = "mg/h/mm2",
flowrate.unit = "l/m",
area = 0.000001429)$summary$S,
c(NA,NA))
})
# Verify conversions ------------------------------------------------------
# These are some simple conversions tested with known results.
#
# Further down is a skipped test which runs through masses of combinations and
# compares results to convert_rate. It is skipped for now since it takes ages.
# It can be run manually in the future or removed to somewhere else.
#
# Rationale behind these tests:
#
# convert_rate.ft results should be the same as convert_rate as long as the
# 'time.unit' in cr is the same as the one used in the flowrate (e.g. if in
# mL/s, time = "s"), and the volume used in flowrate is converted to L (e.g. if
# mL/s, volume = 1/1000).
test_that("convert_rate.ft - outputs same results as calc_rate", {
expect_equal(
convert_rate.ft(-1.4,
oxy.unit = "mg/l", flowrate.unit = "l/s",
output.unit = "mg/h", area = NULL, mass = NULL)$rate.output,
convert_rate(-1.4,
oxy.unit = "mg/l", time.unit = "s", volume = 1,
output.unit = "mg/h", area = NULL, mass = NULL)$rate.output
)
expect_equal(
convert_rate.ft(-0.001,
oxy.unit = "mg/l", flowrate.unit = "ml/s",
output.unit = "mg/h", area = NULL, mass = NULL)$rate.output,
convert_rate(-0.001,
oxy.unit = "mg/l", time.unit = "s", volume = 1/1000,
output.unit = "mg/h", area = NULL, mass = NULL)$rate.output
)
expect_equal(
convert_rate.ft(-455,
oxy.unit = "mg/l", flowrate.unit = "ul/s",
output.unit = "mg/h", area = NULL, mass = NULL)$rate.output,
convert_rate(-455,
oxy.unit = "mg/l", time.unit = "s", volume = 1/1000000,
output.unit = "mg/h", area = NULL, mass = NULL)$rate.output
)
expect_equal(
convert_rate.ft(-455,
oxy.unit = "mg/l", flowrate.unit = "ul/d",
output.unit = "mg/h", area = NULL, mass = NULL)$rate.output,
convert_rate(-455,
oxy.unit = "mg/l", time.unit = "d", volume = 1/1000000,
output.unit = "mg/h", area = NULL, mass = NULL)$rate.output
)
expect_equal(
convert_rate.ft(crft1,
oxy.unit = "mg/l", flowrate.unit = "ml/min",
output.unit = "mg/h", area = NULL, mass = NULL)$rate.output,
convert_rate(crft1$rate,
oxy.unit = "mg/l", time.unit = "m", volume = 1/1000,
output.unit = "mg/h", area = NULL, mass = NULL)$rate.output
)
expect_equal(
convert_rate.ft(crftmany,
oxy.unit = "mg/l", flowrate.unit = "ml/min",
output.unit = "umol h-1", area = NULL, mass = NULL)$rate.output,
convert_rate(crftmany$rate,
oxy.unit = "mg/l", time.unit = "m", volume = 1/1000,
output.unit = "umol h-1", area = NULL, mass = NULL)$rate.output
)
expect_equal(
convert_rate.ft(crftvec,
oxy.unit = "mg/l", flowrate.unit = "ml/min",
output.unit = "mL s-1", area = NULL, mass = NULL,
S=S, t=t, P=P)$rate.output,
convert_rate(crftvec$rate,
oxy.unit = "mg/l", time.unit = "m", volume = 1/1000,
output.unit = "mL s-1", area = NULL, mass = NULL,
S=S, t=t, P=P)$rate.output
)
expect_equal(
convert_rate.ft(adjft.1,
oxy.unit = "mg/l", flowrate.unit = "ml/min",
output.unit = "mL s-1", area = NULL, mass = NULL,
S=S, t=t, P=P)$rate.output,
convert_rate(adjft.1$rate.adjusted,
oxy.unit = "mg/l", time.unit = "m", volume = 1/1000,
output.unit = "mL s-1", area = NULL, mass = NULL,
S=S, t=t, P=P)$rate.output
)
expect_equal(
convert_rate.ft(adjft.many,
oxy.unit = "%Air", flowrate.unit = "ml/min",
output.unit = "mL s-1", area = NULL, mass = NULL,
S=S, t=t, P=P)$rate.output,
convert_rate(adjft.many$rate.adjusted,
oxy.unit = "%Air", time.unit = "m", volume = 1/1000,
output.unit = "mL s-1", area = NULL, mass = NULL,
S=S, t=t, P=P)$rate.output
)
expect_equal(
convert_rate.ft(adjft.width,
oxy.unit = "%o2", flowrate.unit = "ml/min",
output.unit = "mol s-1", area = NULL, mass = NULL,
S=S, t=t, P=P)$rate.output,
convert_rate(adjft.width$rate.adjusted,
oxy.unit = "%o2", time.unit = "m", volume = 1/1000,
output.unit = "mol s-1", area = NULL, mass = NULL,
S=S, t=t, P=P)$rate.output
)
expect_equal(
convert_rate.ft(adjft.prod,
oxy.unit = "umol/kg", flowrate.unit = "l/h",
output.unit = "mol s-1", area = NULL, mass = NULL,
S=S, t=t, P=P)$rate.output,
convert_rate(adjft.prod$rate.adjusted,
oxy.unit = "umol/kg", time.unit = "h", volume = 1/1,
output.unit = "mol s-1", area = NULL, mass = NULL,
S=S, t=t, P=P)$rate.output
)
expect_equal(
convert_rate.ft(adjft.vec,
oxy.unit = "hPa", flowrate.unit = "l/h",
output.unit = "ml d-1", area = NULL, mass = NULL,
S=S, t=t, P=P)$rate.output,
convert_rate(adjft.vec$rate.adjusted,
oxy.unit = "hPa", time.unit = "h", volume = 1/1,
output.unit = "ml d-1", area = NULL, mass = NULL,
S=S, t=t, P=P)$rate.output
)
})
test_that("convert_rate.ft - outputs some known specific values", {
# this is mostly to guard against future changes breaking the outputs
expect_equal(
# -1 mg in l/s should be -1*60*60 in mg/h
convert_rate.ft(-1,
oxy.unit = "mg/l", flowrate.unit = "l/s",
output.unit = "mg/h", area = NULL, mass = NULL)$rate.output,
-1*60*60)
expect_equal(
convert_rate.ft(-2,
oxy.unit = "mg/l", flowrate.unit = "l/s",
output.unit = "mg/h", area = NULL, mass = NULL)$rate.output,
-2*60*60)
expect_equal(
convert_rate.ft(2,
oxy.unit = "mg/l", flowrate.unit = "l/s",
output.unit = "mg/h", area = NULL, mass = NULL)$rate.output,
2*60*60)
expect_equal(
convert_rate.ft(-0.01,
oxy.unit = "ug/l", flowrate.unit = "l/s",
output.unit = "mg/h", area = NULL, mass = NULL)$rate.output,
-0.01*60*60 / 1000)
expect_equal(
convert_rate.ft(-0.01,
oxy.unit = "ml/l", flowrate.unit = "l/s",
output.unit = "mg/h", area = NULL, mass = NULL,
S=S, t=t, P=P)$rate.output,
-48.6154742081153)
expect_equal(
convert_rate.ft(-1,
oxy.unit = "ml/l", flowrate.unit = "l/s",
output.unit = "umol/h", area = NULL, mass = NULL,
S=S, t=t, P=P)$rate.output,
-151929.054239894)
expect_equal(
convert_rate.ft(-0.01,
oxy.unit = "umol/l", flowrate.unit = "l/s",
output.unit = "mg/s", area = NULL, mass = NULL,
S=S, t=t, P=P)$rate.output,
-0.000319988)
expect_equal(
convert_rate.ft(-0.01,
oxy.unit = "umol/l", flowrate.unit = "l/s",
output.unit = "mg/s/kg", area = NULL, mass = 0.01,
S=S, t=t, P=P)$rate.output,
-0.000319988/0.01)
expect_equal(
convert_rate.ft(-0.01,
oxy.unit = "umol/l", flowrate.unit = "l/s",
output.unit = "mg/s/m2", area = 0.001, mass = NULL,
S=S, t=t, P=P)$rate.output,
-0.000319988/0.001)
})
test_that("convert_rate.ft: ul oxygen output unit correct values ", {
# should be ml times 1000
expect_equal(convert_rate.ft(0.9, oxy.unit = 'mg/l', time.unit = 's', flowrate.unit = "l/min",
output.unit = 'ml/h/kg',
volume = 1.2, mass = 0.5, S = 35, t = 12, P = 1)$rate.output * 1000,
convert_rate.ft(0.9, oxy.unit = 'mg/l', time.unit = 's', flowrate.unit = "l/min",
output.unit = 'ul/h/kg',
volume = 1.2, mass = 0.5, S = 35, t = 12, P = 1)$rate.output)
})
test_that("convert_rate.ft: cm3/mm3 oxygen output unit correct values ", {
# cm3 should be same as ml
expect_equal(convert_rate.ft(0.9, oxy.unit = 'mg/l', time.unit = 's', flowrate.unit = "l/min",
output.unit = 'cm3/h/kg',
volume = 1.2, mass = 0.5, S = 35, t = 12, P = 1)$rate.output,
convert_rate.ft(0.9, oxy.unit = 'mg/l', time.unit = 's', flowrate.unit = "l/min",
output.unit = 'ml/h/kg',
volume = 1.2, mass = 0.5, S = 35, t = 12, P = 1)$rate.output)
# mm3 should be same as ul
expect_equal(convert_rate.ft(0.9, oxy.unit = 'mg/l', time.unit = 's', flowrate.unit = "l/min",
output.unit = 'mm3/h/kg',
volume = 1.2, mass = 0.5, S = 35, t = 12, P = 1)$rate.output,
convert_rate.ft(0.9, oxy.unit = 'mg/l', time.unit = 's', flowrate.unit = "l/min",
output.unit = 'ul/h/kg',
volume = 1.2, mass = 0.5, S = 35, t = 12, P = 1)$rate.output)
# mm3 should be cm3 times 1000
expect_equal(convert_rate.ft(0.9, oxy.unit = 'mg/l', time.unit = 's', flowrate.unit = "l/min",
output.unit = 'cm3/h/kg',
volume = 1.2, mass = 0.5, S = 35, t = 12, P = 1)$rate.output * 1000,
convert_rate.ft(0.9, oxy.unit = 'mg/l', time.unit = 's', flowrate.unit = "l/min",
output.unit = 'mm3/h/kg',
volume = 1.2, mass = 0.5, S = 35, t = 12, P = 1)$rate.output)
})
# S3 Generics -------------------------------------------------------------
objs <- c("conv.crft1","conv.crft1.ms","conv.crft1.as","conv.crftmany",
"conv.crftmany.ms","conv.crftmany.as","conv.crftwidth",
"conv.crftwidth.ms","conv.crftwidth.as","conv.adjft.1",
"conv.adjft.1.ms","conv.adjft.1.as","conv.adjft.many",
"conv.adjft.many.ms","conv.adjft.many.as","conv.adjft.width",
"conv.adjft.width.ms","conv.adjft.width.as")
test_that("convert_rate.ft - objects can be printed.", {
sapply(objs, function(z) {
expect_error(print(eval(parse(text=z))),
regexp = NA)
})
sapply(objs, function(z) {
expect_output(print(eval(parse(text=z))),
regexp = "Converted:")
})
})
test_that("convert_rate.ft - objects can be printed with 'pos' input.", {
expect_error(print(conv.adjft.many.as, pos = 2),
regexp = NA)
expect_output(print(conv.adjft.many.as, pos = 2),
regexp = "Rank 2 of 101 result")
expect_error(print(conv.crftmany.as, pos = 100),
regexp = NA)
expect_output(print(conv.crftmany.as, pos = 100),
regexp = "Rank 100 of 101 result")
})
test_that("convert_rate.ft - print() stops with invalid 'pos' input.", {
expect_error(print(conv.crft1, pos = 2),
regexp = "print.convert_rate.ft: Invalid 'pos' rank: only 1 rates found.")
expect_error(print(conv.adjft.many.as, pos = 102),
regexp = "print.convert_rate.ft: Invalid 'pos' rank: only 101 rates found.")
expect_error(print(conv.crftmany.as, pos = 10:20),
regexp = "print.convert_rate.ft: 'pos' must be a single value. To examine multiple results use summary().")
})
test_that("convert_rate.ft - objects work with summary().", {
sapply(objs, function(z) {
expect_error(summary(eval(parse(text=z))),
regexp = NA)
})
sapply(objs, function(z) {
expect_output(summary(eval(parse(text=z))))
})
})
summary(conv.crft1)
test_that("convert_rate.ft - objects work with summary() and 'pos' input", {
expect_error(summary(conv.crftmany.ms, pos = 2),
regexp = NA)
expect_output(summary(conv.crftmany.ms, pos = 2),
regexp = "Summary of rate results from entered 'pos' rank")
expect_equal(nrow(summary(conv.crftmany.ms, pos = 2, export = TRUE)),
1)
expect_error(summary(conv.crftmany, pos = 2:10),
regexp = NA)
expect_output(summary(conv.crftmany, pos = 2:10),
regexp = "Summary of rate results from entered 'pos' rank")
expect_equal(nrow(summary(conv.crftmany, pos = 2:10, export = TRUE)),
9)
expect_error(summary(conv.adjft.width.as, pos = c(2,4,6,8)),
regexp = NA)
expect_output(summary(conv.adjft.width.as, pos = c(2,4,6,8)),
regexp = "Summary of rate results from entered 'pos' rank")
expect_equal(nrow(summary(conv.adjft.width.as, pos = c(2,4,6,8), export = TRUE)),
4)
expect_equal(summary(conv.adjft.width.as, pos = c(2,4,6,8), export = TRUE)$rank,
c(2,4,6,8))
})
test_that("convert_rate.ft - summary() stops with invalid 'pos' input", {
expect_error(summary(conv.crftmany.ms, pos = 102),
regexp = "summary.convert_rate.ft: Invalid 'pos' rank: only 101 rates found.")
})
test_that("convert_rate.ft - objects work with summary() and 'export' input", {
expect_error(summary(conv.crftmany.ms, export = TRUE),
regexp = NA)
expect_equal(nrow(summary(conv.crftmany.ms, export = TRUE)),
nrow(conv.crftmany.ms$summary))
})
test_that("convert_rate.ft - objects work with mean()", {
expect_error(mean(conv.crft1),
regexp = NA)
expect_output(mean(conv.crft1),
regexp = "Mean of 1 output rates:")
expect_equal(mean(conv.crft1, export = TRUE),
mean(conv.crft1$rate.output))
expect_message(mean(conv.crft1),
regexp = "Only 1 rate found. Returning mean rate anyway")
expect_error(mean(conv.crft1.ms),
regexp = NA)
expect_output(mean(conv.crft1.ms),
regexp = "Mean of 1 output rates:")
expect_equal(mean(conv.crft1.ms, export = TRUE),
mean(conv.crft1.ms$rate.output))
expect_error(mean(conv.crftmany.as),
regexp = NA)
expect_output(mean(conv.crftmany.as),
regexp = "Mean of 101 output rates:")
expect_equal(mean(conv.crftmany.as, export = TRUE),
mean(conv.crftmany.as$rate.output))
expect_error(mean(conv.adjft.many),
regexp = NA)
expect_output(mean(conv.adjft.many),
regexp = "Mean of 101 output rates:")
expect_equal(mean(conv.adjft.many, export = TRUE),
mean(conv.adjft.many$rate.output))
expect_error(mean(conv.adjft.many.ms),
regexp = NA)
expect_output(mean(conv.adjft.many.ms),
regexp = "Mean of 101 output rates:")
expect_equal(mean(conv.adjft.many.ms, export = TRUE),
mean(conv.adjft.many.ms$rate.output))
expect_error(mean(conv.adjft.width.as),
regexp = NA)
expect_output(mean(conv.adjft.width.as),
regexp = "Mean of 636 output rates:")
expect_equal(mean(conv.adjft.width.as, export = TRUE),
mean(conv.adjft.width.as$rate.output))
})
test_that("convert_rate.ft - objects work with mean() and 'pos' input", {
expect_error(mean(conv.adjft.many.ms, pos = 1:10),
regexp = NA)
expect_output(mean(conv.adjft.many.ms, pos = 1:10),
regexp = "Mean of rate results from entered 'pos' ranks")
expect_equal(mean(conv.adjft.many.ms, pos = 1:10, export = TRUE),
mean(conv.adjft.many.ms$rate.output[1:10]))
expect_error(mean(conv.adjft.many.ms, pos = 150),
regexp = "mean.convert_rate.ft: Invalid 'pos' rank: only 101 rates found.")
})
test_that("convert_rate.ft - plot is produced with converted calc_rate.ft objects", {
expect_output(conv.adjft.1 <- convert_rate.ft(adjft.1, oxy.unit = "mg/l", flowrate.unit = "L/m",
output.unit = "mg/h",
mass = NULL, area = NULL,
S=S, t=t, P=P, plot = TRUE))
expect_output(plot(conv.adjft.many.ms))
expect_output(plot(conv.adjft.many.ms, type = "full"))
expect_output(plot(conv.adjft.many.ms, type = "rate"))
expect_output(plot(conv.adjft.many.ms, type = "overlap"))
})
test_that("convert_rate.ft - plot pos and highlight correct messages", {
expect_message(plot(conv.adjft.many.ms, pos = 200),
"convert_rate.ft: One or more 'pos' inputs higher than number of rows in '\\$summary'. Applying default of all rows.")
expect_message(plot(conv.adjft.many.ms, pos = 200, type = "overlap"),
"convert_rate.ft: One or more 'pos' inputs higher than number of rows in '\\$summary'. Applying default of all rows.")
expect_message(plot(conv.adjft.many.ms, highlight = 200, type = "overlap"),
"convert_rate.ft: 'highlight' not within 'pos' input. Applying default of first 'pos' entry.")
})
test_that("convert_rate.ft - plot errors with various disallowed inputs", {
num <-
c(1,2,3) %>%
convert_rate.ft(oxy.unit = "mg/l",
time.unit = "min",
flowrate.unit = "l/s",
output.unit = "mg/h",
volume = 1.09)
expect_error(plot(num),
"plot.convert_rate.ft: Plot is not available for 'convert_rate.ft' objects containing rates converted from numeric values.")
expect_error(plot(conv.crft1, type = "text"),
"plot.convert_rate.ft: 'type' input not recognised.")
})
test_that("convert_rate.ft - correct message when plot is called on objects with zero rates", {
# message with zero rates for both methods
ar_mult_no_rts <-
suppressWarnings(
flowthrough.rd %>%
inspect.ft(1,2,3, plot = FALSE) %>%
calc_rate.ft(1, c(10, 300, 700), c(200, 500, 800), plot = FALSE) %>%
convert_rate.ft(oxy.unit = "mg/l",
time.unit = "min",
flowrate.unit = "l/h",
output.unit = "mg/h/g",
volume = 1.09,
mass = 0.005))
# remove
ar_mult_no_rts$summary <- ar_mult_no_rts$summary[NULL,]
ar_mult_no_rts$rate.output <- NULL
expect_message(plot(ar_mult_no_rts),
"convert_rate.ft: Nothing to plot! No rates found in object.")
expect_message(plot(ar_mult_no_rts, type = "rate"),
"convert_rate.ft: Nothing to plot! No rates found in object.")
expect_message(plot(ar_mult_no_rts, type = "overlap"),
"convert_rate.ft: Nothing to plot! No rates found in object.")
})
test_that("convert_rate.ft - plot defaults are correctly restored", {
# reset plotting first
dev.off()
# save par before
parb4 <- par(no.readonly = TRUE)
# now use a fn with plot
plot(conv.adjft.many.ms)
# save after
paraft <- par(no.readonly = TRUE)
# mai is something changed from the default,
# so if par settings not restored properly this should fail
expect_identical(parb4$mai,
paraft$mai)
})
}) ## end capture.output
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.