tests/testthat/test-osiris.R

context("osiris Tests")
library(osiris); library(testthat); library(dplyr);

# Run tests with test data
# Test for Step 0: get_example_data
# You may define your own write_dir and dir_name.
osiris::get_example_data(
  write_dir = getwd(),
  dir_name = "Osiris_Data_Test",
  data_link = "https://zenodo.org/record/7530067/files/Osiris_Data_Test.zip?download=1"
) -> data_folder; data_folder;


# Step 1 - calculate_deltas_from_climate: Tests

osiris::calculate_deltas_from_climate(
  climate_dir = paste0(data_folder,"/climate_data"),
  write_dir = paste0(data_folder,"/outputs_calculate_delta_from_climate"),
  monthly_growing_season = paste0(data_folder,"/growing_seasons/pmonth_gslength_unifWheat_smallareamask.csv"),
  monthly_harvest_season = paste0(data_folder,"/growing_seasons/p_h_months_unifWheat_smallareamask.csv"),
  growing_season_dir = paste0(data_folder,"/outputs_growing_season_climate_data"),
  esm_name = "CanESM5",
  crops = c("Corn", "Wheat", "Rice", "Soy"),
  irrigation_rainfed = c("IRR", "RFD"),
  minlat = -87.8638,
  minlon = -179.75,
  rollingAvgYears = 1,
  tas_historical = "tas_Amon_CanESM5_historical_r1i1p1f1_gn_201001-201501.nc",
  tas_projected = "tas_Amon_CanESM5_ssp245_r1i1p1f1_gn_201501-202101.nc",
  pr_historical = "pr_Amon_CanESM5_historical_r1i1p1f1_gn_201001-201501.nc",
  pr_projected = "pr_Amon_CanESM5_ssp245_r1i1p1f1_gn_201501-202101.nc",
  historical_start_year = 2010,
  projection_start_year = 2015
)

test_that("calculate_deltas_from_climate produces expected files", {

  testthat::expect_identical( unlist(list.files(paste0(data_folder,"/outputs_calculate_delta_from_climate"))),
                              unlist(list.files(paste0(data_folder,"/outputs_calculate_delta_from_climate_test"))))

})


test_that("calculate_deltas_from_climate produces expected file contents", {

  for (i in 1:length(unlist(list.files(paste0(data_folder,"/outputs_calculate_delta_from_climate"))))){

    file_i = unlist(list.files(paste0(data_folder,"/outputs_calculate_delta_from_climate")))[i]

    testthat::expect_identical(
      read.csv(paste0(data_folder,"/outputs_calculate_delta_from_climate/",file_i)),
      read.csv(paste0(data_folder,"/outputs_calculate_delta_from_climate_test/",file_i)),
      label = paste0("Error in file: ", file_i))

    }

})


# Step 2 - grid_to_basin_yield
osiris::grid_to_basin_yield(
  carbon = paste0(data_folder,"/yield_response_inputs/magicc_rcp8p5_co2.csv"),
  weight_floor_ha = 1,
  emulator_dir = paste0(data_folder,"/yield_response_fcns/ggcmi_phase2"),
  input_dir = paste0(data_folder,"/outputs_calculate_delta_from_climate"),
  area_dir = paste0(data_folder,"/area_data"),
  basin_grid = paste0(data_folder,"/mapping_data/gridData.csv"),
  basin_id = paste0(data_folder,"/mapping_data/gcam_basin_ids.csv"),
  write_dir = paste0(data_folder,"/outputs_grid_to_basin_yield"),
  wheat_area = paste0(data_folder,"/winter_and_spring_wheat_areas_v1_180627.nc4"),
  crops = c("maize", "rice", "soy", "wheat"),
  esm_name = "CanESM5",
  cm_name = "LPJmL",
  scn_name = "ssp245",
  N = 200
)

test_that("grid_to_basin_yield produces expected files", {

  testthat::expect_identical( unlist(list.files(paste0(data_folder,"/outputs_grid_to_basin_yield"))),
                              unlist(list.files(paste0(data_folder,"/outputs_grid_to_basin_yield_test"))))

})

test_that("grid_to_basin_yield produces expected file contents", {

  for (i in 1:length(unlist(list.files(paste0(data_folder,"/outputs_grid_to_basin_yield"))))){

    file_i = unlist(list.files(paste0(data_folder,"/outputs_grid_to_basin_yield")))[i]

    testthat::expect_identical(
      read.csv(paste0(data_folder,"/outputs_grid_to_basin_yield/",file_i)),
      read.csv(paste0(data_folder,"/outputs_grid_to_basin_yield_test/",file_i)),
      label = paste0("Error in file: ", file_i))

  }

})

# Step 3 - yield_to_gcam_basin
osiris::yield_to_gcam_basin(
  write_dir = paste0(data_folder,"/outputs_yield_to_gcam_basin"),
  emulated_basin_yield_dir = paste0(data_folder,"/outputs_grid_to_basin_yield"),
  iso_GCAM_region_mapping = paste0(data_folder,"/mapping_data/iso_GCAM_regID.csv"),
  FAO_ag_mapping = paste0(data_folder,"/gcamdata_files/FAO_ag_items_PRODSTAT_expanded_corrected.csv"),
  iso_harvest_area_mapping = paste0(data_folder,"/gcamdata_files/L100.LDS_ag_HA_ha.csv"),
  iso_GCAM_basin_mapping = paste0(data_folder,"/mapping_data/gcam_basin_ids.csv"),
  esm_name = "CanESM5",
  scn_name = "ssp245",
  max_CCImult = 2.5,
  min_CCImult = 0.01,
  weight_floor_ha = 1,
  rolling_avg_years = 1,
  maxHistYear = 2015,
  minFutYear = 2015,
  maxFutYear = 2020,
  extrapolate_to = NULL
)

test_that("yield_to_gcam_basin produces expected files", {

  testthat::expect_identical( unlist(list.files(paste0(data_folder,"/outputs_yield_to_gcam_basin"))),
                              unlist(list.files(paste0(data_folder,"/outputs_yield_to_gcam_basin_test"))))

})

test_that("yield_to_gcam_basin produces expected file contents", {

  for (i in 1:length(unlist(list.files(paste0(data_folder,"/outputs_yield_to_gcam_basin"))))){

    file_i = unlist(list.files(paste0(data_folder,"/outputs_yield_to_gcam_basin")))[i]

    testthat::expect_identical(
      read.csv(paste0(data_folder,"/outputs_yield_to_gcam_basin/",file_i)),
      read.csv(paste0(data_folder,"/outputs_yield_to_gcam_basin_test/",file_i)),
      label = paste0("Error in file: ", file_i))

  }

})

# Step 4 - create_AgProdChange_xml
osiris::create_AgProdChange_xml(
  write_dir = paste0(data_folder,"/outputs_create_AgProdChange_xml"),
  esm_name = 'CanESM5',
  scn_name = 'ssp245',
  ssp = 'ssp5',
  ag_irr_ref = paste0(data_folder,"/reference_agprodchange/L2052.AgProdChange_irr_high.csv"),
  bio_irr_ref = paste0(data_folder,"/reference_agprodchange/L2052.AgProdChange_bio_irr_ref.csv"),
  ag_impacts = paste0(data_folder,"/outputs_yield_to_gcam_basin/ag_impacts_CanESM5_ssp245_rcp_gcm_gcm_R_GLU_C_IRR_allyears_RA3_gridcull_allyroutlier.csv"),
  bio_impacts = paste0(data_folder,"/outputs_yield_to_gcam_basin/bio_impacts_CanESM5_ssp245_rcp_gcm_gcm_R_GLU_C_IRR_allyears_RA3_gridcull_allyroutlier.csv"),
  GCAM_region_mapping = paste0(data_folder,"/mapping_data/GCAM_region_names.csv"),
  timestep = 5,
  maxHistYear = 2010,
  minFutYear = 2015,
  appliedto = "full"
)

test_that("create_AgProdChange_xml produces expected files", {

  testthat::expect_identical( unlist(list.files(paste0(data_folder,"/outputs_create_AgProdChange_xml"))),
                              unlist(list.files(paste0(data_folder,"/outputs_create_AgProdChange_xml_test"))))

})

test_that("create_AgProdChange_xml produces expected files file contents", {

  for (i in 1:length(unlist(list.files(paste0(data_folder,"/outputs_create_AgProdChange_xml"))))){

    file_i = unlist(list.files(paste0(data_folder,"/outputs_create_AgProdChange_xml")))[i]

    testthat::expect_identical(
      read.csv(paste0(data_folder,"/outputs_create_AgProdChange_xml/",file_i)),
      read.csv(paste0(data_folder,"/outputs_create_AgProdChange_xml_test/",file_i)),
      label = paste0("Error in file: ", file_i))

  }

})
JGCRI/osiris documentation built on May 12, 2024, 6:28 a.m.