Nothing
# Small slice for speed
dat <- selectByDate(mydata, year = 2003, month = 1:3)
# --- Output structure --------------------------------------------------------
test_that("GaussianSmooth returns a data frame with the same number of rows", {
result <- GaussianSmooth(dat, pollutant = "o3", sigma = 24)
expect_s3_class(result, "data.frame")
expect_equal(nrow(result), nrow(dat))
})
test_that("GaussianSmooth adds smooth_ and n_ columns for a single pollutant", {
result <- GaussianSmooth(dat, pollutant = "o3", sigma = 24)
expect_true("smooth_o3" %in% names(result))
expect_true("n_o3" %in% names(result))
})
test_that("GaussianSmooth respects new.name for a single pollutant", {
result <- GaussianSmooth(
dat,
pollutant = "o3",
sigma = 24,
new.name = "o3_gauss"
)
expect_true("o3_gauss" %in% names(result))
expect_false("smooth_o3" %in% names(result))
# n_ column name is always derived from the pollutant name, not new.name
expect_true("n_o3" %in% names(result))
})
test_that("GaussianSmooth handles multiple pollutants and adds a column pair for each", {
result <- GaussianSmooth(dat, pollutant = c("o3", "no2"), sigma = 24)
expect_true(all(
c("smooth_o3", "smooth_no2", "n_o3", "n_no2") %in% names(result)
))
})
test_that("GaussianSmooth warns when new.name length mismatches pollutant length", {
expect_warning(
GaussianSmooth(
dat,
pollutant = c("o3", "no2"),
sigma = 24,
new.name = "just_one"
),
regexp = "does not match"
)
})
# --- Numerical sanity --------------------------------------------------------
test_that("smooth_o3 is numeric with no NaN values", {
result <- GaussianSmooth(dat, pollutant = "o3", sigma = 24)
expect_true(is.numeric(result$smooth_o3))
expect_false(any(is.nan(result$smooth_o3)))
})
test_that("n_o3 is non-negative everywhere", {
result <- GaussianSmooth(dat, pollutant = "o3", sigma = 24)
expect_true(all(result$n_o3 >= 0, na.rm = TRUE))
})
test_that("smoothed values stay within the observed range", {
result <- GaussianSmooth(dat, pollutant = "o3", sigma = 24, data.thresh = 0)
obs_range <- range(dat$o3, na.rm = TRUE)
non_na <- result$smooth_o3[!is.na(result$smooth_o3)]
expect_true(all(non_na >= obs_range[1]))
expect_true(all(non_na <= obs_range[2]))
})
test_that("larger sigma produces a smoother (lower variance) series", {
narrow <- GaussianSmooth(
dat,
pollutant = "o3",
sigma = 2,
data.thresh = 0
)$smooth_o3
wide <- GaussianSmooth(
dat,
pollutant = "o3",
sigma = 120,
data.thresh = 0
)$smooth_o3
expect_lt(var(wide, na.rm = TRUE), var(narrow, na.rm = TRUE))
})
test_that("data.thresh = 100 produces at least as many NAs as data.thresh = 0", {
res_low <- GaussianSmooth(dat, pollutant = "o3", sigma = 24, data.thresh = 0)
res_high <- GaussianSmooth(
dat,
pollutant = "o3",
sigma = 24,
data.thresh = 100
)
expect_gte(sum(is.na(res_high$smooth_o3)), sum(is.na(res_low$smooth_o3)))
})
# --- Input validation --------------------------------------------------------
test_that("GaussianSmooth errors when data.thresh is out of range", {
expect_error(
GaussianSmooth(dat, pollutant = "o3", sigma = 24, data.thresh = -1),
regexp = "data.thresh"
)
expect_error(
GaussianSmooth(dat, pollutant = "o3", sigma = 24, data.thresh = 101),
regexp = "data.thresh"
)
})
test_that("GaussianSmooth errors on non-numeric pollutant column", {
bad <- dat
bad$o3 <- as.character(bad$o3)
expect_error(
GaussianSmooth(bad, pollutant = "o3", sigma = 24),
regexp = "not numeric"
)
})
# --- Edge cases --------------------------------------------------------------
test_that("GaussianSmooth handles all-NA input without erroring", {
dat_na <- dat
dat_na$o3 <- NA_real_
expect_no_error(GaussianSmooth(dat_na, pollutant = "o3", sigma = 24))
})
test_that("GaussianSmooth with date.pad = TRUE still returns original row count", {
dat_gap <- dat[!lubridate::month(dat$date) %in% 2, ]
result <- GaussianSmooth(
dat_gap,
pollutant = "o3",
sigma = 24,
date.pad = TRUE
)
expect_equal(nrow(result), nrow(dat_gap))
})
test_that("GaussianSmooth output is unchanged when input has no gaps (date.pad has no effect)", {
res_nopad <- GaussianSmooth(
dat,
pollutant = "o3",
sigma = 24,
date.pad = FALSE
)
res_pad <- GaussianSmooth(dat, pollutant = "o3", sigma = 24, date.pad = TRUE)
expect_equal(res_nopad$smooth_o3, res_pad$smooth_o3)
})
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.