# Tests for detect_lag function test_that("detect_lag works with basic input", { dat <- simulate_invasion(n_years = 30, lag_duration = 10, seed = 123) result <- detect_lag(dat$year, dat$count) expect_s3_class(result, "invalag") expect_true(!is.na(result$breakpoint[1])) expect_true(result$lag_duration > 0) expect_true(is.numeric(result$pre_slope)) expect_true(is.numeric(result$post_slope)) }) test_that("detect_lag handles effort correction", { dat <- simulate_invasion(n_years = 30, effort = TRUE, seed = 123) result <- detect_lag(dat$year, dat$count, effort = dat$effort) expect_s3_class(result, "invalag") expect_true(result$effort_corrected) }) test_that("detect_lag handles transformations", { dat <- simulate_invasion(seed = 123) result_log <- detect_lag(dat$year, dat$count, transform = "log") result_sqrt <- detect_lag(dat$year, dat$count, transform = "sqrt") result_log10 <- detect_lag(dat$year, dat$count, transform = "log10") expect_equal(result_log$transform, "log") expect_equal(result_sqrt$transform, "sqrt") expect_equal(result_log10$transform, "log10") }) test_that("detect_lag validates input", { # Different lengths expect_error(detect_lag(1:10, 1:5)) # Non-numeric expect_error(detect_lag(letters[1:10], 1:10)) # Too few points expect_error(detect_lag(1:3, c(1, 2, 3))) # Negative counts expect_error(detect_lag(1:10, c(-1, 2, 3, 4, 5, 6, 7, 8, 9, 10))) }) test_that("detect_lag method='all' compares methods", { skip_if_not_installed("changepoint") skip_if_not_installed("mgcv") dat <- simulate_invasion(seed = 123) result <- detect_lag(dat$year, dat$count, method = "all") expect_true(!is.null(result$comparison)) expect_true(nrow(result$comparison) >= 1) }) test_that("print and summary methods work", { dat <- simulate_invasion(seed = 123) result <- detect_lag(dat$year, dat$count) expect_output(print(result), "INVASION LAG PHASE") expect_output(summary(result), "DETAILED SUMMARY") })