# rm(list=ls())
# library(testthat)
# test_file("tests/testthat/test-calc_rate.int.R")
# covr::file_coverage("R/calc_rate.int.R", "tests/testthat/test-calc_rate.int.R")
# cvr <- covr::package_coverage()
# covr::report(cvr)
# covr::report(covr::package_coverage())
capture.output({ ## stops printing outputs on assigning
dt <- intermittent.rd %>%
subset_data(from = 1) # removes first value at 0 time because of annoying messages during adjustments
dt.insp <- inspect(dt, plot = F)
sts <- c(1,2100,3899) # different from help file because first row removed above
ens.actual <- c(2099,3898,4830) #actual ends including flush
ens.measure <- c(1899,3549,4830) # ends excluding flush
# regular reps - 10 reps from this dataset
dt.reg.insp <- subset_data(zeb_intermittent.rd,
from = 5840,
to = 5840 + 6599,
by = "row") %>%
inspect(legend = F, plot = F)
# x input tests --------------------------------------------------
# stops if x not df or inspect obj
test_that("calc_rate.int - stops with wrong 'x' inputs", {
expect_error(calc_rate.int(dt[[1]],
starts = sts,
plot = F),
"calc_rate.int: Input must be a 'data.frame' or 'inspect' object.")
})
test_that("calc_rate.int - stops with wrong 'x' inputs", {
expect_error(calc_rate.int(inspect.ft(dt, plot = F),
starts = sts,
plot = F),
"calc_rate.int: Input must be a 'data.frame' or 'inspect' object.")
})
test_that("calc_rate.int - stops with wrong 'x' inputs", {
expect_error(calc_rate.int(12,
starts = sts,
plot = F),
"calc_rate.int: Input must be a 'data.frame' or 'inspect' object.")
})
# accepts df and inspect objs
test_that("calc_rate.int - accepts 'data.frame' 'x' inputs", {
expect_error(calc_rate.int(dt,
starts = sts,
plot = F),
NA)
})
test_that("calc_rate.int - accepts 'inspect' 'x' inputs", {
expect_error(calc_rate.int(dt.insp,
starts = sts,
plot = F),
NA)
})
test_that("calc_rate.int - correctly extracts dataframe from 'inspect' objects", {
cr.int <- calc_rate.int(dt.insp,
starts = sts,
plot = F)
expect_identical(cr.int$dataframe,
dt.insp$dataframe)
})
test_that("calc_rate.int - message with multicolumn 'x' inputs", {
expect_message(calc_rate.int(sardine.rd,
starts = sts,
plot = F),
"calc_rate.int: Multi-column dataset detected in input. Selecting first two columns by default.")
})
# starts input tests -----------------------------------------------------
# required, numeric, integer, within df row range
test_that("calc_rate.int - stops with wrong 'starts' inputs", {
# NULL
expect_error(calc_rate.int(dt.insp,
starts = NULL,
plot = F),
"calc_rate.int: 'starts' - input is required.")
# Non-integer(s)
expect_error(calc_rate.int(dt.insp,
starts = c(1, 100.1, 500),
plot = F),
"calc_rate.int: 'starts' - one or more inputs are not integers.")
# Outside range
expect_error(calc_rate.int(dt.insp,
starts = c(1, 100, 5000),
plot = F),
"calc_rate.int: 'starts' - one or more inputs are outside the range of allowed values.")
expect_error(calc_rate.int(dt.insp,
starts = c(0, 100, 5000),
plot = F),
"calc_rate.int: 'starts' - one or more inputs are outside the range of allowed values.")
expect_error(calc_rate.int(dt.insp,
starts = c(0, 100, 5000),
by = "time",
plot = F),
"calc_rate.int: 'starts' - one or more inputs are outside the range of allowed values.")
})
# Accepts multiple and single inputs
test_that("calc_rate.int - accepts correct 'starts' inputs", {
expect_error(calc_rate.int(dt.insp,
starts = sts,
plot = F),
NA)
expect_error(calc_rate.int(dt.insp,
starts = 1000,
plot = F),
NA)
})
# 'wait' tests ------------------------------------------------------------
test_that("calc_rate.int - stops if 'wait' input malformed", {
expect_error(calc_rate.int(dt.insp,
starts = sts,
wait = "text",
plot = F),
"calc_rate.int: 'wait' - input is not numeric.")
expect_error(calc_rate.int(dt.insp,
starts = sts,
wait = 900000,
plot = F),
"calc_rate.int: 'wait' - one or more inputs are outside the range of allowed values.")
expect_error(calc_rate.int(dt.insp,
starts = sts,
wait = 1:2,
plot = F),
"calc_rate.int: For a vector input 'wait' should be the same length as 'starts'.")
})
test_that("calc_rate.int - 'wait' accepts single and multiple inputs", {
expect_error(calc_rate.int(dt.insp,
starts = sts,
wait = 200,
plot = F),
NA)
expect_error(calc_rate.int(dt.insp,
starts = sts,
wait = 1:3,
plot = F),
NA)
})
# 'measure' tests ---------------------------------------------------------
test_that("calc_rate.int - stops if 'measure' input malformed", {
expect_error(calc_rate.int(dt.insp,
starts = sts,
measure = "text",
plot = F),
"calc_rate.int: 'measure' - input is not numeric.")
expect_error(calc_rate.int(dt.insp,
starts = sts,
measure = 900000,
plot = F),
"calc_rate.int: 'measure' - one or more inputs are outside the range of allowed values.")
expect_error(calc_rate.int(dt.insp,
starts = sts,
measure = 1:2,
plot = F),
"calc_rate.int: For a vector input 'measure' should be the same length as 'starts'.")
})
test_that("calc_rate.int - 'measure' accepts single and multiple inputs", {
expect_error(calc_rate.int(dt.insp,
starts = sts,
measure = 200,
plot = F),
NA)
expect_error(calc_rate.int(dt.insp,
starts = sts,
measure = c(200, 400, 600),
plot = F),
NA)
})
# 'by' tests --------------------------------------------------------------
# Stops if you try to use "oxygen"
test_that("calc_rate.int - stops with by = 'oxygen'", {
expect_error(calc_rate.int(dt.insp,
starts = sts,
by = "oxygen",
plot = F),
"calc_rate.int: 'by' input not valid or not recognised.")
})
# Expected results ---------------------------------------
#
# Since it's essentially running calc_rate we use it to get results to test against
# by = "time" tests -------------------------------------------------------
test_that("calc_rate.int - expected results with by = 'time' over whole replicate", {
# Whole replicate
#calc_rate object
cr.obj <- calc_rate(dt.insp,
from = sts,
to = ens.actual,
by = "time",
plot = F)
#calc_rate.int object
cr.int.obj <- calc_rate.int(dt.insp,
starts = sts,
by = "time",
plot = F)
# test
expect_equal(cr.obj$summary[,3:ncol(cr.obj$summary)],
cr.int.obj$summary[,3:ncol(cr.obj$summary)])
})
test_that("calc_rate.int - expected results with by = 'time' using 'wait' and 'measure'", {
# Part of replicate
#calc_rate object
cr.obj <- calc_rate(dt.insp,
from = sts + 500,
to = sts + 1000,
by = "time",
plot = F)
#calc_rate.int object
cr.int.obj <- calc_rate.int(dt.insp,
starts = sts,
wait = 500,
measure = 500,
by = "time",
plot = F)
# test
expect_equal(cr.obj$summary[,3:ncol(cr.obj$summary)],
cr.int.obj$summary[,3:ncol(cr.obj$summary)])
})
test_that("calc_rate.int - expected results with by = 'time' using 'wait' only", {
# Part of replicate - with ends not specified
#calc_rate object
cr.obj <- calc_rate(dt.insp,
from = sts + 500,
to = ens.actual,
by = "time",
plot = F)
#calc_rate.int object
cr.int.obj <- calc_rate.int(dt.insp,
starts = sts,
wait = 500,
by = "time",
plot = F)
# test
expect_equal(cr.obj$summary[,3:ncol(cr.obj$summary)],
cr.int.obj$summary[,3:ncol(cr.obj$summary)])
})
test_that("calc_rate.int - expected results with by = 'time' over whole replicates of regularly spaced reps", {
# Regular replicates - Whole replicate
#calc_rate object
cr.obj <- calc_rate(dt.reg.insp,
from = 5839 + seq(1, 5941, 660),
to = 5839 + seq(660, 6600, 660),
by = "time",
plot = F)
#calc_rate.int object
cr.int.obj <- calc_rate.int(dt.reg.insp,
starts = 660,
by = "time",
plot = F)
# test
expect_equal(cr.obj$summary[,3:ncol(cr.obj$summary)],
cr.int.obj$summary[,3:ncol(cr.obj$summary)])
})
test_that("calc_rate.int - expected results with by = 'time' using 'wait' and 'measure' and regularly spaced reps", {
# Regular replicates - part of
#calc_rate object
cr.obj <- calc_rate(dt.reg.insp,
from = 5839 + seq(1, 5941, 660) + 120,
to = 5839 + seq(1, 5941, 660) + 480,
by = "time",
plot = F)
#calc_rate.int object
cr.int.obj <- calc_rate.int(dt.reg.insp,
starts = 660,
wait = 120,
measure = 360,
by = "time",
plot = F)
# test
expect_equal(cr.obj$summary[,3:ncol(cr.obj$summary)],
cr.int.obj$summary[,3:ncol(cr.obj$summary)])
})
test_that("calc_rate.int - expected results with by = 'time' and regularly spaced reps with 'measure' not specified", {
# Regular replicates - part of
# ends not specified
#calc_rate object
cr.obj <- calc_rate(dt.reg.insp,
from = 5839 + seq(1, 5941, 660) + 120,
to = 5839 + seq(1, 5941, 660) + 659,
by = "time",
plot = F)
#calc_rate.int object
cr.int.obj <- calc_rate.int(dt.reg.insp,
starts = 660,
wait = 120,
#to = 480,
by = "time",
plot = F)
# test
expect_equal(cr.obj$summary[,3:ncol(cr.obj$summary)],
cr.int.obj$summary[,3:ncol(cr.obj$summary)])
})
test_that("calc_rate.int - expected results with by = 'time' and regularly spaced reps with 'wait' not specified", {
# Regular replicates - part of
# ends not specified
#calc_rate object
cr.obj <- calc_rate(dt.reg.insp,
from = 5839 + seq(1, 5941, 660),
to = 5839 + seq(1, 5941, 660) + 480,
by = "time",
plot = F)
#calc_rate.int object
cr.int.obj <- calc_rate.int(dt.reg.insp,
starts = 660,
#wait = 120,
measure = 480,
by = "time",
plot = F)
# test
expect_equal(cr.obj$summary[,3:ncol(cr.obj$summary)],
cr.int.obj$summary[,3:ncol(cr.obj$summary)])
})
test_that("calc_rate.int - expected results with by = 'time' using vectors for 'wait' and 'measure' and irregularly spaced reps", {
# IRREGULAR replicates
# Both vectors
#calc_rate object
cr.obj <- calc_rate(dt.insp,
from = sts + c(200, 300, 400),
to = ens.measure - c(450, 350, 250),
by = "time",
plot = F)
#calc_rate.int object
cr.int.obj <- calc_rate.int(dt.insp,
starts = sts,
wait = c(200, 300, 400),
measure = c(1248, 799, 281),
by = "time",
plot = F)
# test
expect_equal(cr.obj$summary[,3:ncol(cr.obj$summary)],
cr.int.obj$summary[,3:ncol(cr.obj$summary)])
#calc_rate object
#wait vector, measure not
cr.obj <- calc_rate(dt.insp,
from = sts + c(200, 300, 400),
to = sts + c(200, 300, 400) + 600,
by = "time",
plot = F)
#calc_rate.int object
cr.int.obj <- calc_rate.int(dt.insp,
starts = sts,
wait = c(200, 300, 400),
measure = 600,
by = "time",
plot = F)
# test
expect_equal(cr.obj$summary[,3:ncol(cr.obj$summary)],
cr.int.obj$summary[,3:ncol(cr.obj$summary)])
#calc_rate object
#measure vector, wait not
cr.obj <- calc_rate(dt.insp,
from = sts,
to = sts + c(600, 700, 800),
by = "time",
plot = F)
#calc_rate.int object
cr.int.obj <- calc_rate.int(dt.insp,
starts = sts,
wait = NULL,
measure = c(600, 700, 800),
by = "time",
plot = F)
# test
expect_equal(cr.obj$summary[,3:ncol(cr.obj$summary)],
cr.int.obj$summary[,3:ncol(cr.obj$summary)])
})
# by = "row" tests -------------------------------------------------------
test_that("calc_rate.int - expected results with by = 'row' over whole replicate", {
# Whole replicate
#calc_rate object
cr.obj <- calc_rate(dt.insp,
from = sts,
to = ens.actual,
by = "row",
plot = F)
#calc_rate.int object
cr.int.obj <- calc_rate.int(dt.insp,
starts = sts,
by = "row",
plot = F)
# test
expect_equal(cr.obj$summary[,3:ncol(cr.obj$summary)],
cr.int.obj$summary[,3:ncol(cr.obj$summary)])
})
test_that("calc_rate.int - expected results with by = 'row' using 'wait' and 'measure'", {
# Part of replicate
#calc_rate object
cr.obj <- calc_rate(dt.insp,
from = sts + 500,
to = sts + 999,
by = "row",
plot = F)
#calc_rate.int object
cr.int.obj <- calc_rate.int(dt.insp,
starts = sts,
wait = 500,
measure = 500,
by = "row",
plot = F)
# test
expect_equal(cr.obj$summary[,3:ncol(cr.obj$summary)],
cr.int.obj$summary[,3:ncol(cr.obj$summary)])
})
test_that("calc_rate.int - expected results with by = 'row' using 'wait' only", {
# Part of replicate - with ends not specified
#calc_rate object
cr.obj <- calc_rate(dt.insp,
from = sts + 500,
to = ens.actual,
by = "row",
plot = F)
#calc_rate.int object
cr.int.obj <- calc_rate.int(dt.insp,
starts = sts,
wait = 500,
by = "row",
plot = F)
# test
expect_equal(cr.obj$summary[,3:ncol(cr.obj$summary)],
cr.int.obj$summary[,3:ncol(cr.obj$summary)])
})
test_that("calc_rate.int - expected results with by = 'row' over whole replicates of regularly spaced reps", {
# Regular replicates - Whole replicate
#calc_rate object
cr.obj <- calc_rate(dt.reg.insp$da,
from = seq(1, 6600, 660),
to = seq(660, 6600, 660),
by = "row",
plot = F)
#calc_rate.int object
cr.int.obj <- calc_rate.int(dt.reg.insp,
starts = 660,
by = "row",
plot = F)
# test
expect_equal(cr.obj$summary[,3:ncol(cr.obj$summary)],
cr.int.obj$summary[,3:ncol(cr.obj$summary)])
})
test_that("calc_rate.int - expected results with by = 'row' using 'wait' and 'measure' and regularly spaced reps", {
# Regular replicates - part of
#calc_rate object
cr.obj <- calc_rate(dt.reg.insp,
from = seq(1, 6600, 660) + 120,
to = seq(1, 6600, 660) + 120 + 359,
by = "row",
plot = F)
#calc_rate.int object
cr.int.obj <- calc_rate.int(dt.reg.insp,
starts = 660,
wait = 120,
measure = 360,
by = "row",
plot = F)
# test
expect_equal(cr.obj$summary[,3:ncol(cr.obj$summary)],
cr.int.obj$summary[,3:ncol(cr.obj$summary)])
})
test_that("calc_rate.int - expected results with by = 'row' and regularly spaced reps with 'measure' not specified", {
# Regular replicates - part of
# ends not specified
#calc_rate object
cr.obj <- calc_rate(dt.reg.insp,
from = seq(1, 6600, 660) + 120,
to = seq(1, 6600, 660) + 120 + 539,
by = "row",
plot = F)
#calc_rate.int object
cr.int.obj <- calc_rate.int(dt.reg.insp,
starts = 660,
wait = 120,
by = "row",
plot = F)
# test
expect_equal(cr.obj$summary[,3:ncol(cr.obj$summary)],
cr.int.obj$summary[,3:ncol(cr.obj$summary)])
})
test_that("calc_rate.int - expected results with by = 'row' and regularly spaced reps with 'wait' not specified", {
# Regular replicates - part of
# ends not specified
#calc_rate object
cr.obj <- calc_rate(dt.reg.insp,
from = seq(1, 6600, 660),
to = seq(1, 6600, 660) + 479,
by = "row",
plot = F)
#calc_rate.int object
cr.int.obj <- calc_rate.int(dt.reg.insp,
starts = 660,
measure = 480,
by = "row",
plot = F)
# test
expect_equal(cr.obj$summary[,3:ncol(cr.obj$summary)],
cr.int.obj$summary[,3:ncol(cr.obj$summary)])
})
test_that("calc_rate.int - expected results with by = 'row' using vectors for 'wait' and 'measure' and irregularly spaced reps", {
# IRREGULAR replicates
# Both vectors
#calc_rate object
cr.obj <- calc_rate(dt.insp,
from = sts + c(200, 300, 400),
to = ens.measure - c(450, 350, 250),
by = "row",
plot = F)
#calc_rate.int object
cr.int.obj <- calc_rate.int(dt.insp,
starts = sts,
wait = c(200, 300, 400),
measure = c(1249, 800, 282),
by = "row",
plot = F)
# test
expect_equal(cr.obj$summary[,3:ncol(cr.obj$summary)],
cr.int.obj$summary[,3:ncol(cr.obj$summary)])
#calc_rate object
#wait vector, measure not
cr.obj <- calc_rate(dt.insp,
from = sts + c(200, 300, 400),
to = sts + c(200, 300, 400) + 600,
by = "row",
plot = F)
#calc_rate.int object
cr.int.obj <- calc_rate.int(dt.insp,
starts = sts,
wait = c(200, 300, 400),
measure = 601,
by = "row",
plot = F)
# test
expect_equal(cr.obj$summary[,3:ncol(cr.obj$summary)],
cr.int.obj$summary[,3:ncol(cr.obj$summary)])
#calc_rate object
#measure vector, wait not
cr.obj <- calc_rate(dt.insp,
from = sts,
to = sts + c(600, 700, 800),
by = "row",
plot = F)
#calc_rate.int object
cr.int.obj <- calc_rate.int(dt.insp,
starts = sts,
wait = NULL,
measure = c(601, 701, 801),
by = "row",
plot = F)
# test
expect_equal(cr.obj$summary[,3:ncol(cr.obj$summary)],
cr.int.obj$summary[,3:ncol(cr.obj$summary)])
})
# General tests -----------------------------------------------------------
test_that("calc_rate.int - outputs object of class calc_rate.int", {
cr.int <- calc_rate.int(dt.insp,
starts = sts,
plot = F)
expect_is(cr.int,
"calc_rate.int")
})
test_that("calc_rate.int - S3 generics work", {
cr.int <- calc_rate.int(dt.insp,
starts = sts,
plot = F)
expect_output(print(cr.int))
expect_output(summary(cr.int))
expect_output(plot(cr.int))
expect_output(mean(cr.int))
# multiple rates and 'pos'
expect_output(print(cr.int, pos = 2))
expect_error(print(cr.int, pos = 2:3),
"print.calc_rate.int: 'pos' must be a single value. To examine multiple results use summary().")
expect_error(print(cr.int, pos = 30),
"print.calc_rate.int: Invalid 'pos' input: only 3 replicates found.")
expect_output(summary(cr.int, pos = 2:3))
expect_error(summary(cr.int, pos = 40),
"summary.calc_rate.int: Invalid 'pos' input: only 3 replicates found.")
expect_is(summary(cr.int, pos = 2:3, export = TRUE),
"data.frame")
expect_output(mean(cr.int, pos = 2:3))
expect_error(mean(cr.int, pos = 40),
"mean.calc_rate.int: Invalid 'pos' input: only 3 replicates found.")
expect_is(mean(cr.int, pos = 2:3, export = TRUE),
"numeric")
expect_equal(mean(cr.int, pos = 2:3, export = TRUE),
mean(cr.int$rate[2:3]))
# pos default applied
expect_output(plot(cr.int, pos = NULL))
expect_output(plot(cr.int, pos = 1))
expect_output(plot(cr.int, pos = 3))
expect_error(plot(cr.int, pos = 50),
"plot.calc_rate.int: Invalid 'pos' input: only 3 replicates found.")
# plot types produce output
expect_output(plot(cr.int, type = "rep"))
expect_output(plot(cr.int, type = "rep", pos = 2:3))
expect_output(plot(cr.int, type = "full"))
expect_output(plot(cr.int, type = "full", pos = 2:3))
expect_output(plot(cr.int, type = "cr"))
expect_output(plot(cr.int, type = "cr", pos = 2:3))
expect_error(plot(cr.int, type = "test"),
"plot.calc_rate.int: 'type' input not recognised.")
})
# Expected results with adjust_rate ---------------------------------------
test_that("calc_rate.int - works as expected with adjust_rate method = 'value'", {
cr.int <- calc_rate.int(dt,
starts = sts,
ends = ens.actual,
plot = F)
# "value" method
by <- -0.0001
cr.int.adj <- adjust_rate(cr.int, by = by, method = "value")
expect_equal(cr.int$rate - by,
cr.int.adj$rate.adjusted)
})
test_that("calc_rate.int - works as expected with adjust_rate method = 'mean'", {
cr.int <- calc_rate.int(dt,
starts = sts,
ends = ens.actual,
plot = F)
# "mean" method
by <- c(-0.0001, -0.00008, -0.00005)
cr.int.adj <- adjust_rate(cr.int, by = by, method = "mean")
expect_equal(cr.int$rate - mean(by),
cr.int.adj$rate.adjusted)
})
test_that("calc_rate.int - works as expected with adjust_rate method = 'paired'", {
cr.int <- calc_rate.int(dt,
starts = sts,
ends = ens.actual,
plot = F)
# "paired" method
by <- c(-0.0001, -0.00008, -0.00005)
cr.int.adj <- adjust_rate(cr.int, by = by, method = "paired")
# cr.int.adj$summary
expect_equal(cr.int$rate - by,
cr.int.adj$rate.adjusted)
})
test_that("calc_rate.int - works as expected with adjust_rate method = 'concurrent'", {
cr.int <- calc_rate.int(dt,
starts = sts,
ends = ens.actual,
plot = F)
# "concurrent" method
# subset these data to the same length
by <- background_con.rd %>%
subset_data(1, 4830, "time", quiet = TRUE) %>%
calc_rate.bg(plot = F)
cr.int.adj <- adjust_rate(cr.int, by = by, method = "concurrent")
# cr.int.adj$summary
rt <- calc_rate(by$dataframe, from = cr.int$summary$row, to = cr.int$summary$endrow, by = "row")$rate
expect_equal(cr.int$rate - rt,
cr.int.adj$rate.adjusted)
})
test_that("calc_rate.int - works as expected with adjust_rate method = 'linear'", {
cr.int <- calc_rate.int(dt,
starts = sts,
ends = ens.actual,
plot = F)
# "linear" method
# subset these data to the same length
by1 <- background_con.rd %>%
subset_data(1, 800, "time") %>%
calc_rate.bg()
by2 <- background_exp.rd %>%
subset_data(5000, 15000, "time") %>%
calc_rate.bg()
cr.int.adj <- adjust_rate(cr.int, by = by1, by2 = by2, method = "linear")
# runs without error
expect_error(adjust_rate(cr.int, by = by1, by2 = by2, method = "linear"),
NA)
# cr.int.adj$summary
# cr.int.adj$summary$adjustment
# For now just test the known values in case they change in future
expect_equal(c(-0.00006356925, -0.00010351944, -0.00013150917),
cr.int.adj$summary$adjustment)
})
test_that("calc_rate.int - works as expected with adjust_rate method = 'exponential'", {
cr.int <- calc_rate.int(dt,
starts = sts,
ends = ens.actual,
plot = F)
# "exponential" method
# subset these data to the same length
by1 <- background_con.rd %>%
subset_data(1, 800, "time") %>%
calc_rate.bg()
by2 <- background_exp.rd %>%
subset_data(5000, 15000, "time") %>%
calc_rate.bg()
cr.int.adj <- adjust_rate(cr.int, by = by1, by2 = by2, method = "exponential")
# runs without error
expect_error(adjust_rate(cr.int, by = by1, by2 = by2, method = "exponential"),
NA)
# cr.int.adj$summary
# cr.int.adj$summary$adjustment
# For now just test the known values in case they change in future
expect_equal(c(-0.00005597288, -0.00007733651, -0.00009699645),
cr.int.adj$summary$adjustment)
})
}) ## end capture output
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.