tests/testthat/test-optimizers.R

# Get test curves to use
source('one_curve_c3_aci.R')

test_that('the nmkb optimizer works', {
    set.seed(1234)

    fit_res <- expect_silent(
        fit_c3_aci(
            one_curve,
            Ca_atmospheric = 420,
            optim_fun = optimizer_nmkb(1e-5)
        )
    )

    expect_true(is.finite(fit_res$parameters[1, 'RL_at_25']))
})

test_that('the hjkb optimizer works', {
    set.seed(1234)

    fit_res <- expect_silent(
        fit_c3_aci(
            one_curve,
            Ca_atmospheric = 420,
            optim_fun = optimizer_hjkb(1e-5)
        )
    )

    expect_true(is.finite(fit_res$parameters[1, 'RL_at_25']))
})

test_that('the deoptim optimizer works', {
    set.seed(1234)

    fit_res <- expect_silent(
        fit_c3_aci(
            one_curve,
            Ca_atmospheric = 420,
            optim_fun = optimizer_deoptim(20)
        )
    )

    expect_true(is.finite(fit_res$parameters[1, 'RL_at_25']))
})

test_that('the nlminb optimizer works', {
    set.seed(1234)

    fit_res <- expect_silent(
        fit_c3_aci(
            one_curve,
            Ca_atmospheric = 420,
            optim_fun = optimizer_nlminb(1e-5)
        )
    )

    expect_true(is.finite(fit_res$parameters[1, 'RL_at_25']))
})

test_that('the null optimizer works', {
    fit_res <- expect_silent(
        fit_c3_aci(
            one_curve,
            Ca_atmospheric = 420,
            optim_fun = optimizer_null()
        )
    )

    expect_true(is.finite(fit_res$parameters[1, 'RL_at_25']))
})

test_that('optimizer outputs are checked', {
    expect_error(
        fit_c3_aci(
            one_curve,
            Ca_atmospheric = 420,
            optim_fun = function(...) {list(a = 1)}
        ),
        'The optimizer result must include the following elements: convergence, convergence_msg, feval, optimizer, par. Found the following elements: a'
    )

    expect_error(
        fit_c3_aci(
            one_curve,
            Ca_atmospheric = 420,
            optim_fun = function(...) {list(convergence = 1, convergence_msg = 1, feval = c(1, 2), optimizer = 'fake', par = c(1, 2))}
        ),
        'The following optimizer outputs must have length 1, but do not: feval'
    )
})

Try the PhotoGEA package in your browser

Any scripts or data that you put into this service are public.

PhotoGEA documentation built on April 11, 2025, 5:48 p.m.