Nothing
# =============================================================================
# test-15-analysis.R
# Tests para las funciones de análisis post-simulación.
# Requiere un resultado de binary_search como fixture de entrada.
# =============================================================================
# Fixture compartido: resultado de binary_search a 30 días
result_bs <- run_fb4(
x = bio_chinook_30,
fit_to = "Weight",
fit_value = 900
)
result_direct <- run_fb4(
x = bio_chinook_30,
strategy = "direct",
p_value = 0.5
)
# =============================================================================
# 1. analyze_growth_patterns
# =============================================================================
test_that("analyze_growth_patterns retorna lista con campos básicos", {
g <- analyze_growth_patterns(result_bs)
expect_type(g, "list")
expect_true("final_weight" %in% names(g))
expect_true("total_growth" %in% names(g))
expect_true("relative_growth" %in% names(g))
expect_true("daily_growth_rate" %in% names(g))
expect_true("specific_growth_rate" %in% names(g))
})
test_that("analyze_growth_patterns: final_weight$estimate > initial_weight", {
g <- analyze_growth_patterns(result_bs)
expect_gt(g$final_weight$estimate, bio_chinook_30$simulation_settings$initial_weight)
})
test_that("analyze_growth_patterns: relative_growth ~ 12.5% (800→900 en 30 días)", {
g <- analyze_growth_patterns(result_bs)
expect_equal(g$relative_growth$estimate, 12.5, tolerance = 0.5)
})
test_that("analyze_growth_patterns: daily_growth_rate > 0", {
g <- analyze_growth_patterns(result_bs)
expect_gt(g$daily_growth_rate$estimate, 0)
})
test_that("analyze_growth_patterns: specific_growth_rate (SGR) es positivo", {
g <- analyze_growth_patterns(result_bs)
expect_gt(g$specific_growth_rate$estimate, 0)
})
# =============================================================================
# 2. analyze_feeding_performance
# =============================================================================
test_that("analyze_feeding_performance retorna lista con campos básicos", {
f <- analyze_feeding_performance(result_bs)
expect_type(f, "list")
expect_true("total_consumption" %in% names(f))
expect_true("daily_consumption" %in% names(f))
expect_true("feeding_efficiency" %in% names(f))
expect_true("p_value" %in% names(f))
})
test_that("analyze_feeding_performance: total_consumption > 0", {
f <- analyze_feeding_performance(result_bs)
expect_gt(f$total_consumption$estimate, 0)
})
test_that("analyze_feeding_performance: feeding_efficiency en (0, 1)", {
f <- analyze_feeding_performance(result_bs)
fe <- f$feeding_efficiency$estimate
expect_gt(fe, 0)
expect_lt(fe, 1)
})
test_that("analyze_feeding_performance: daily_consumption = total / n_days", {
f <- analyze_feeding_performance(result_bs)
expect_equal(
f$daily_consumption$estimate,
f$total_consumption$estimate / 30,
tolerance = 0.01
)
})
# =============================================================================
# 3. analyze_energy_budget
# =============================================================================
test_that("analyze_energy_budget retorna lista con energy_components", {
e <- analyze_energy_budget(result_bs)
expect_type(e, "list")
expect_true("energy_components" %in% names(e))
})
test_that("analyze_energy_budget: consumption_energy > 0 (fix aplicado)", {
e <- analyze_energy_budget(result_bs)
expect_gt(e$energy_components$consumption_energy$estimate, 0)
})
test_that("analyze_energy_budget: todos los componentes son no-negativos", {
e <- analyze_energy_budget(result_bs)
ec <- e$energy_components
components <- c("consumption_energy", "respiration_energy",
"egestion_energy", "excretion_energy", "sda_energy")
for (comp in components) {
est <- ec[[comp]]$estimate
expect_gte(est, 0, label = comp)
}
})
test_that("analyze_energy_budget: balance cons = resp + ege + exc + SDA + net (aprox)", {
e <- analyze_energy_budget(result_bs)
ec <- e$energy_components
cons <- ec$consumption_energy$estimate
resp <- ec$respiration_energy$estimate
ege <- ec$egestion_energy$estimate
exc <- ec$excretion_energy$estimate
sda <- ec$sda_energy$estimate
net <- ec$net_energy$estimate
expect_equal(cons, resp + ege + exc + sda + net, tolerance = cons * 0.01)
})
# =============================================================================
# 4. comprehensive_nutritional_analysis
# =============================================================================
test_that("comprehensive_nutritional_analysis retorna lista con model_info y energy_budget", {
na <- comprehensive_nutritional_analysis(result_bs)
expect_type(na, "list")
expect_true("model_info" %in% names(na))
expect_true("energy_budget" %in% names(na))
})
test_that("comprehensive_nutritional_analysis: energy budget no es todo NA después del fix", {
na <- comprehensive_nutritional_analysis(result_bs)
ec <- na$energy_budget$energy_components
expect_gt(ec$consumption_energy$estimate, 0)
})
# =============================================================================
# 5. Clases y validación (Bioenergetic)
# =============================================================================
test_that("is.Bioenergetic detecta correctamente objetos Bioenergetic", {
expect_true(is.Bioenergetic(bio_chinook_30))
expect_false(is.Bioenergetic(list(a = 1)))
expect_false(is.Bioenergetic(42))
})
test_that("print.Bioenergetic no lanza error", {
expect_no_error(print(bio_chinook_30))
})
test_that("summary.Bioenergetic no lanza error", {
expect_no_error(summary(bio_chinook_30))
})
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.