test_that("fit_langmuir recovers approximately correct parameters", { set.seed(1) Ce <- c(2, 5, 10, 20, 35, 50, 70) Qmax_true <- 5; KL_true <- 0.15 qe <- (Qmax_true * KL_true * Ce) / (1 + KL_true * Ce) + stats::rnorm(length(Ce), 0, 0.03) fit <- fit_langmuir(Ce, qe) expect_equal(fit$method, "nonlinear") expect_true(fit$R2 > 0.9) expect_equal(fit$Qmax, Qmax_true, tolerance = 0.5) }) test_that("fit_langmuir errors with too few points", { expect_error(fit_langmuir(c(1, 2), c(1, 2)), "at least 3") }) test_that("fit_freundlich recovers approximately correct parameters", { set.seed(2) Ce <- c(2, 5, 10, 20, 35, 50, 70) Kf_true <- 1.2; n_true <- 2.5 qe <- Kf_true * Ce^(1 / n_true) + stats::rnorm(length(Ce), 0, 0.03) fit <- fit_freundlich(Ce, qe) expect_true(fit$R2 > 0.9) expect_equal(fit$n, n_true, tolerance = 0.5) }) test_that("fit_pfo and fit_pso return sensible R2", { set.seed(3) t <- c(5, 15, 30, 60, 120, 240) qe_true <- 4.2; k1_true <- 0.05 qt <- qe_true * (1 - exp(-k1_true * t)) + stats::rnorm(length(t), 0, 0.02) fit1 <- fit_pfo(t, qt) fit2 <- fit_pso(t, qt) expect_true(fit1$R2 > 0.85) expect_true(fit2$R2 > 0.85) })