test_that("baseline_correct removes a linear tilt and clips at zero", { wn <- seq(4000, 400, by = -4) tilt <- 0.1 + 0.00002 * (4000 - wn) # linear baseline spec <- data.frame(wavenumber_cm1 = wn, intensity = tilt) corrected <- baseline_correct(spec, method = "linear") expect_true(max(abs(corrected$intensity)) < 1e-6) }) test_that("baseline_correct preserves a peak above a flat baseline", { wn <- seq(4000, 400, by = -4) spec <- data.frame(wavenumber_cm1 = wn, intensity = 0.1 + exp(-((wn - 1710)^2) / (2 * 20^2))) corrected <- baseline_correct(spec, method = "rolling_min", window = 15) expect_true(max(corrected$intensity) > 0.8) }) test_that("find_ftir_peaks identifies a known synthetic peak", { wn <- seq(4000, 400, by = -2) spec <- data.frame( wavenumber_cm1 = wn, intensity = exp(-((wn - 1710)^2) / (2 * 20^2)) + exp(-((wn - 2920)^2) / (2 * 30^2)) ) peaks <- find_ftir_peaks(spec, window = 10, min_prominence = 0.1) expect_true(nrow(peaks) >= 2) expect_true(any(abs(peaks$peak_cm1 - 1710) < 5)) expect_true(any(abs(peaks$peak_cm1 - 2920) < 5)) }) test_that("find_ftir_peaks handles a peak landing symmetrically between grid points (tie case)", { # Regression test: a peak center that doesn't fall exactly on the sampling # grid produces two adjacent points tied for the maximum, which an earlier # implementation incorrectly rejected as "not a unique maximum". wn <- seq(4000, 400, by = -4) # 1710 is not on this grid (1712/1708 are) spec <- data.frame(wavenumber_cm1 = wn, intensity = 0.1 + exp(-((wn - 1710)^2) / (2 * 20^2))) peaks <- find_ftir_peaks(spec, min_prominence = 0.05) expect_equal(nrow(peaks), 1) expect_true(abs(peaks$peak_cm1 - 1710) <= 4) }) test_that("find_ftir_peaks returns an empty data frame gracefully for flat input", { wn <- seq(4000, 400, by = -4) spec <- data.frame(wavenumber_cm1 = wn, intensity = rep(0.5, length(wn))) peaks <- find_ftir_peaks(spec, min_prominence = 0.01) expect_equal(nrow(peaks), 0) })