tests/testthat/test-calc_amw_functions.R

test_that("tidy_fao_live_animals works", {

  test_data_path <- amw_test_data_path()

  test_data <- read.csv(test_data_path)

  live_animals <- test_data %>%
    tidy_fao_live_animals()

  expect_true(!is.null(live_animals))

  # expect_true(all(unique(live_animals[[MWTools::mw_constants$species]]) == c("Asses", "Buffaloes", "Camels", "Cattle", "Horses", "Mules and hinnies")))

  expect_equal(unique(live_animals[[MWTools::mw_constants$country_name]]), c("China", "China, mainland"))

  expect_equal(colnames(live_animals),
               c(MWTools::mw_constants$country_name,
                 MWTools::mw_constants$species,
                 MWTools::mw_cols$year,
                 MWTools::mw_constants$value))

  expect_equal(nrow(live_animals), 1827)

})


test_that("add_concordance_codes works", {

  test_data_path <- amw_test_data_path()

  test_data <- read.csv(test_data_path)

  live_animals_w.codes <- test_data %>%
    tidy_fao_live_animals() %>%
    add_concordance_codes()

  expect_true(!is.null(live_animals_w.codes))

  expect_equal(unique(live_animals_w.codes$Country.code), c("CHN", "CHNM"))

  expect_equal(colnames(live_animals_w.codes),
               c(MWTools::conc_cols$country_code_col,
                 MWTools::conc_cols$amw_region_code_col,
                 MWTools::mw_constants$country_name,
                 MWTools::mw_constants$species,
                 MWTools::mw_cols$year,
                 MWTools::mw_constants$value,
                 MWTools::conc_cols$country_incl_col))

  expect_equal(nrow(live_animals_w.codes), 1827)

})


test_that("trim_fao_data works", {

  test_data_path <- amw_test_data_path()

  test_data <- read.csv(test_data_path)

  live_animals_trimmed <- test_data %>%
    tidy_fao_live_animals() %>%
    add_concordance_codes() %>%
    trim_fao_data()

  expect_true(!is.null(live_animals_trimmed))

  expect_equal(unique(live_animals_trimmed$Country.code), "CHNM")

  expect_equal(nrow(live_animals_trimmed), 882)

})


test_that("get_working_species works with 'Camelids, other'", {

  test_data_path <- amw_test_data_path()

  test_data <- read.csv(test_data_path) |>
    dplyr::filter(.data[[MWTools::mw_constants$species]] != MWTools::mw_species$camelids_other)

  # "Camelids, other" are present for 2019 only by default, then removed in
  # tidy_fao_live_animals() as 1 data point cannot be interpolated or extrapolated,
  # add dummy test data
  test_data_camelids <- test_data |>
    dplyr::filter(.data[[MWTools::mw_constants$species]] != MWTools::mw_species$camelids_other) |>
    dplyr::filter(.data[[MWTools::mw_constants$species]] == MWTools::mw_species$camels) |>
    dplyr::mutate(
      "{MWTools::mw_constants$species}" := dplyr::case_when(
        .data[[MWTools::mw_constants$species]] == MWTools::mw_species$camels ~ MWTools::mw_species$camelids_other,
        TRUE ~ .data[[MWTools::mw_constants$species]]
      )
    )

  test_data <- rbind(test_data, test_data_camelids)

  live_animals_w.species <- test_data %>%
    tidy_fao_live_animals() %>%
    add_concordance_codes() %>%
    trim_fao_data() %>%
    get_working_species()

  expect_true(!is.null(live_animals_w.species))

  expect_equal(unique(live_animals_w.species[[MWTools::conc_cols$country_code_col]]), "CHNM")

  expect_equal(nrow(live_animals_w.species), 378)

  expect_equal(unique(live_animals_w.species[[MWTools::mw_constants$species]]),
               c(MWTools::mw_species$asses,
                 MWTools::mw_species$buffaloes,
                 MWTools::mw_species$cattle,
                 MWTools::mw_species$horses,
                 MWTools::mw_species$mules,
                 MWTools::mw_species$camelids))
})


test_that("get_working_species works without 'Camelids, other'", {

  test_data_path <- amw_test_data_path()

  test_data <- read.csv(test_data_path)

  live_animals_w.species <- test_data %>%
    tidy_fao_live_animals() %>%
    add_concordance_codes() %>%
    trim_fao_data() %>%
    dplyr::filter(.data[[MWTools::mw_constants$species]] != MWTools::mw_species$camelids_other) %>% # "Camelids, other" are absent by default
    get_working_species()

  expect_true(!is.null(live_animals_w.species))

  expect_equal(unique(live_animals_w.species[[MWTools::conc_cols$country_code_col]]), "CHNM")

  expect_equal(nrow(live_animals_w.species), 378)

  expect_equal(unique(live_animals_w.species[[MWTools::mw_constants$species]]),
               c(MWTools::mw_species$asses,
                 MWTools::mw_species$buffaloes,
                 MWTools::mw_species$cattle,
                 MWTools::mw_species$horses,
                 MWTools::mw_species$mules,
                 MWTools::mw_species$camelids))
})


test_that("get_working_species works without 'Camelids, other' or 'Camels'.", {

  test_data_path <- amw_test_data_path()

  test_data <- read.csv(test_data_path)

  live_animals_w.species <- test_data %>%
    tidy_fao_live_animals() %>%
    add_concordance_codes() %>%
    trim_fao_data() %>%
    dplyr::filter(.data[[MWTools::mw_constants$species]] != MWTools::mw_species$camelids_other) %>%
    dplyr::filter(.data[[MWTools::mw_constants$species]] != MWTools::mw_species$camels) %>%
    get_working_species()

  expect_true(!is.null(live_animals_w.species))

  expect_equal(unique(live_animals_w.species[[MWTools::conc_cols$country_code_col]]), "CHNM")

  expect_equal(nrow(live_animals_w.species), 378)

  expect_equal(unique(live_animals_w.species[[MWTools::mw_constants$species]]),
               c(MWTools::mw_species$asses,
                 MWTools::mw_species$buffaloes,
                 MWTools::mw_species$cattle,
                 MWTools::mw_species$horses,
                 MWTools::mw_species$mules,
                 MWTools::mw_species$camelids))
})


test_that("calc_working_animals works", {

  test_data_path <- amw_test_data_path()

  test_data <- read.csv(test_data_path)

  working_animals <- test_data %>%
    tidy_fao_live_animals() %>%
    add_concordance_codes() %>%
    trim_fao_data() %>%
    get_working_species() %>%
    calc_working_animals()

  expect_true(!is.null(working_animals))

  expect_equal(nrow(working_animals), 378)

  expect_equal(unique(working_animals[[MWTools::conc_cols$species]]),
               c(MWTools::mw_species$asses,
                 MWTools::mw_species$buffaloes,
                 MWTools::mw_species$cattle,
                 MWTools::mw_species$horses,
                 MWTools::mw_species$mules,
                 MWTools::mw_species$camelids))

  expect_equal(colnames(working_animals),
               c(MWTools::conc_cols$country_code_col,
                 MWTools::conc_cols$amw_region_code_col,
                 MWTools::mw_cols$year,
                 MWTools::conc_cols$species,
                 MWTools::amw_analysis_constants$live_animals_col,
                 MWTools::amw_analysis_constants$prop_working_animals_col,
                 MWTools::amw_analysis_constants$working_animals_total_col))
})


test_that("calc_sector_split works", {

  test_data_path <- amw_test_data_path()

  test_data <- read.csv(test_data_path)

  working_animals_s.split <- test_data %>%
    tidy_fao_live_animals() %>%
    add_concordance_codes() %>%
    trim_fao_data() %>%
    get_working_species() %>%
    calc_working_animals() %>%
    calc_sector_split()

  expect_true(!is.null(working_animals_s.split))

  expect_equal(nrow(working_animals_s.split), 378)

  expect_equal(colnames(working_animals_s.split),
               c(MWTools::conc_cols$country_code_col,
                 MWTools::conc_cols$amw_region_code_col,
                 MWTools::mw_cols$year,
                 MWTools::conc_cols$species,
                 MWTools::amw_analysis_constants$live_animals_col,
                 MWTools::amw_analysis_constants$prop_working_animals_col,
                 MWTools::amw_analysis_constants$working_animals_total_col,
                 MWTools::amw_analysis_constants$prop_wkg_anmls_ag_col,
                 MWTools::amw_analysis_constants$prop_wkg_anmls_tr_col,
                 MWTools::amw_analysis_constants$working_animals_ag_col,
                 MWTools::amw_analysis_constants$working_animals_tr_col))
})


test_that("calc_yearly_feed works", {

  test_data_path <- amw_test_data_path()

  test_data <- read.csv(test_data_path)

  working_animals_w.feed <- test_data %>%
    tidy_fao_live_animals() %>%
    add_concordance_codes() %>%
    trim_fao_data() %>%
    get_working_species() %>%
    calc_working_animals() %>%
    calc_sector_split() %>%
    calc_yearly_feed()

  expect_true(!is.null(working_animals_w.feed))

  expect_equal(nrow(working_animals_w.feed), 378)

  expect_equal(colnames(working_animals_w.feed),
               c(MWTools::conc_cols$country_code_col,
                 MWTools::conc_cols$amw_region_code_col,
                 MWTools::mw_cols$year,
                 MWTools::conc_cols$species,
                 MWTools::amw_analysis_constants$live_animals_col,
                 MWTools::amw_analysis_constants$prop_working_animals_col,
                 MWTools::amw_analysis_constants$working_animals_total_col,
                 MWTools::amw_analysis_constants$prop_wkg_anmls_ag_col,
                 MWTools::amw_analysis_constants$prop_wkg_anmls_tr_col,
                 MWTools::amw_analysis_constants$working_animals_ag_col,
                 MWTools::amw_analysis_constants$working_animals_tr_col,
                 MWTools::amw_analysis_constants$total_yearly_feed_col))
})


test_that("calc_final_energy works", {

  test_data_path <- amw_test_data_path()

  test_data <- read.csv(test_data_path)

  working_animals_w.finalenergy <- test_data %>%
    tidy_fao_live_animals() %>%
    add_concordance_codes() %>%
    trim_fao_data() %>%
    get_working_species() %>%
    calc_working_animals() %>%
    calc_sector_split() %>%
    calc_yearly_feed() %>%
    calc_final_energy()

  expect_true(!is.null(working_animals_w.finalenergy))

  expect_equal(nrow(working_animals_w.finalenergy), 378)

  expect_equal(colnames(working_animals_w.finalenergy),
               c(MWTools::conc_cols$country_code_col,
                 MWTools::conc_cols$amw_region_code_col,
                 MWTools::mw_cols$year,
                 MWTools::conc_cols$species,
                 MWTools::amw_analysis_constants$live_animals_col,
                 MWTools::amw_analysis_constants$prop_working_animals_col,
                 MWTools::amw_analysis_constants$working_animals_total_col,
                 MWTools::amw_analysis_constants$prop_wkg_anmls_ag_col,
                 MWTools::amw_analysis_constants$prop_wkg_anmls_tr_col,
                 MWTools::amw_analysis_constants$working_animals_ag_col,
                 MWTools::amw_analysis_constants$working_animals_tr_col,
                 MWTools::amw_analysis_constants$total_yearly_feed_col,
                 MWTools::amw_analysis_constants$final_energy_total,
                 MWTools::amw_analysis_constants$final_energy_ag,
                 MWTools::amw_analysis_constants$final_energy_tr))
})


test_that("calc_primary_energy",{

  test_data_path <- amw_test_data_path()

  test_data <- read.csv(test_data_path)

  working_animals_w.primaryenergy <- test_data %>%
    tidy_fao_live_animals() %>%
    add_concordance_codes() %>%
    trim_fao_data() %>%
    get_working_species() %>%
    calc_working_animals() %>%
    calc_sector_split() %>%
    calc_yearly_feed() %>%
    calc_final_energy() %>%
    calc_primary_energy()

  expect_true(!is.null(working_animals_w.primaryenergy))

  expect_equal(nrow(working_animals_w.primaryenergy), 378)

  expect_equal(colnames(working_animals_w.primaryenergy),
               c(MWTools::conc_cols$country_code_col,
                 MWTools::conc_cols$amw_region_code_col,
                 MWTools::mw_cols$year,
                 MWTools::conc_cols$species,
                 MWTools::amw_analysis_constants$live_animals_col,
                 MWTools::amw_analysis_constants$prop_working_animals_col,
                 MWTools::amw_analysis_constants$working_animals_total_col,
                 MWTools::amw_analysis_constants$prop_wkg_anmls_ag_col,
                 MWTools::amw_analysis_constants$prop_wkg_anmls_tr_col,
                 MWTools::amw_analysis_constants$working_animals_ag_col,
                 MWTools::amw_analysis_constants$working_animals_tr_col,
                 MWTools::amw_analysis_constants$total_yearly_feed_col,
                 MWTools::amw_analysis_constants$final_energy_total,
                 MWTools::amw_analysis_constants$final_energy_ag,
                 MWTools::amw_analysis_constants$final_energy_tr,
                 MWTools::amw_analysis_constants$primary_energy_total,
                 MWTools::amw_analysis_constants$primary_energy_ag,
                 MWTools::amw_analysis_constants$primary_energy_tr))
})


test_that("calc_useful_energy() works as expected",{

  test_data_path <- amw_test_data_path()

  test_data <- read.csv(test_data_path)

  working_animals_w.usefulenergy <- test_data %>%
    tidy_fao_live_animals() %>%
    add_concordance_codes() %>%
    trim_fao_data() %>%
    get_working_species() %>%
    calc_working_animals() %>%
    calc_sector_split() %>%
    calc_yearly_feed() %>%
    calc_final_energy() %>%
    calc_primary_energy() %>%
    calc_useful_energy()

  expect_true(!is.null(working_animals_w.usefulenergy))

  expect_equal(nrow(working_animals_w.usefulenergy), 378)

  expect_equal(colnames(working_animals_w.usefulenergy),
               c(MWTools::conc_cols$country_code_col,
                 MWTools::conc_cols$amw_region_code_col,
                 MWTools::mw_cols$year,
                 MWTools::conc_cols$species,
                 MWTools::amw_analysis_constants$live_animals_col,
                 MWTools::amw_analysis_constants$prop_working_animals_col,
                 MWTools::amw_analysis_constants$working_animals_total_col,
                 MWTools::amw_analysis_constants$prop_wkg_anmls_ag_col,
                 MWTools::amw_analysis_constants$prop_wkg_anmls_tr_col,
                 MWTools::amw_analysis_constants$working_animals_ag_col,
                 MWTools::amw_analysis_constants$working_animals_tr_col,
                 MWTools::amw_analysis_constants$total_yearly_feed_col,
                 MWTools::amw_analysis_constants$final_energy_total,
                 MWTools::amw_analysis_constants$final_energy_ag,
                 MWTools::amw_analysis_constants$final_energy_tr,
                 MWTools::amw_analysis_constants$primary_energy_total,
                 MWTools::amw_analysis_constants$primary_energy_ag,
                 MWTools::amw_analysis_constants$primary_energy_tr,
                 MWTools::amw_analysis_constants$power_per_animal,
                 MWTools::amw_analysis_constants$working_seconds_col,
                 MWTools::amw_analysis_constants$useful_energy_total,
                 MWTools::amw_analysis_constants$useful_energy_ag,
                 MWTools::amw_analysis_constants$useful_energy_tr))
})


test_that("tidy_pfu_data works", {

  test_data_path <- amw_test_data_path()

  test_data <- read.csv(test_data_path)

  tidy_pfu_data <- test_data %>%
    tidy_fao_live_animals() %>%
    add_concordance_codes() %>%
    trim_fao_data() %>%
    get_working_species() %>%
    calc_working_animals() %>%
    calc_sector_split() %>%
    calc_yearly_feed() %>%
    calc_final_energy() %>%
    calc_primary_energy() %>%
    calc_useful_energy() %>%
    tidy_pfu_data()

  expect_true(!is.null(tidy_pfu_data))

  expect_equal(nrow(tidy_pfu_data), 2268)

  expect_equal(colnames(tidy_pfu_data),
               c(MWTools::conc_cols$country_col,
                 MWTools::fao_cols$year_fao_col,
                 MWTools::conc_cols$species,
                 MWTools::mw_constants$stage_col,
                 MWTools::mw_constants$sector_col,
                 MWTools::fao_cols$unit_fao_col,
                 "Edot"))
})


test_that("calc_amw_pfu", {

  test_data_path <- amw_test_data_path()

  test_data <- read.csv(test_data_path)

  tidy_pfu_data <- test_data %>%
    calc_amw_pfu()

  expect_true(!is.null(tidy_pfu_data))

  expect_equal(nrow(tidy_pfu_data), 2268)

  expect_equal(colnames(tidy_pfu_data),
               c(MWTools::conc_cols$country_col,
                 MWTools::fao_cols$year_fao_col,
                 MWTools::conc_cols$species,
                 MWTools::mw_constants$stage_col,
                 MWTools::mw_constants$sector_col,
                 MWTools::fao_cols$unit_fao_col,
                 "Edot"))
})
EnergyEconomyDecoupling/MWTools documentation built on April 14, 2025, 9:27 a.m.