tests/testthat/test-cfp_dat.R

test_that("base_dat fixture is correct", {


  base_dat <- readRDS(testthat::test_path("fixtures", "base_dat.rds"))

  expect_equal(testhelp_make_dat(), base_dat)


})

test_that("create cfp_dat object",{

  library(dplyr)

  lmap <- data.frame(site = rep(c("site_a","site_b"),
                              each = 2),
                   upper = rep(c(10,0),
                               times = 2),
                   lower = rep(c(0,-100),
                               times = 2)
  ) %>%
    cfp_layers_map(id_cols = "site",
                      gas = "CO2")

  lmap2 <- data.frame(site = rep(c("site_a","site_b"),
                                each = 2),
                     upper = rep(c(11,0),
                                 times = 2),
                     lower = rep(c(0,-100),
                                 times = 2)
  ) %>%
    cfp_layers_map(id_cols = "site",
                   gas = "CO2")

  soilphys <-
  data.frame(site = rep(c("site_a","site_b"),
                        each = 3),
             upper = rep(c(10,0,-20),
                         times = 2),
             lower = rep(c(0,-20,-100),
                         times = 2),
             c_air = 1,
             DS = 1,
             gas = "CO2") %>%
    cfp_soilphys(id_cols = "site")

  gasdata <-
    data.frame(site = rep(c("site_a","site_b"),
                          each = 5),
               depth = rep(c(10,0,-20,-30,-100),
                           times = 2),
               x_ppm = rep(400,10),
               gas = "CO2") %>%
    cfp_gasdata(id_cols = "site")

  cfp_input <- cfp_dat(gasdata,
                       soilphys,
                       lmap)

  expect_equal(names(cfp_input), c("profiles", "gasdata",
                                   "soilphys", "layers_map"))
  expect_equal(nrow(cfp_input$soilphys),8)
  expect_error(cfp_dat(gasdata,
                       soilphys,
                       lmap2))


})

test_that("split soilphys",{

  library(dplyr)

  lmap <- data.frame(site = rep(c("site_a","site_b"),
                                each = 2),
                     upper = rep(c(10,0),
                                 times = 2),
                     lower = rep(c(0,-100),
                                 times = 2)
  ) %>%
    cfp_layers_map(id_cols = "site",
                   gas = "CO2")

  soilphys <-
    data.frame(site = rep(c("site_a","site_b"),
                          each = 3),
               upper = rep(c(10,0,-20),
                           times = 2),
               lower = rep(c(0,-20,-100),
                           times = 2),
               c_air = 1,
               DS = 1,
               gas = "CO2") %>%
    cfp_soilphys(id_cols = "site")

  gasdata <-
    data.frame(site = rep(c("site_a","site_b"),
                          each = 5),
               depth = rep(c(10,0,-20,-30,-100),
                           times = 2),
               x_ppm = rep(400,10),
               gas = "CO2") %>%
    cfp_gasdata(id_cols = "site")

  cfp_input <- cfp_dat(gasdata,
                       soilphys,
                       lmap)

  gd_new <- cfp_input$gasdata %>%
    dplyr::add_row(site = rep(c("site_a","site_b"), each = 4),
                   depth = rep(c(-40,-45,-50,-55),times = 2),
                   gas = "CO2",
                   gd_id = rep(1:2,each = 4))

  sp_split <- split_soilphys(cfp_input$soilphys,
                             gd_new,
                             cfp_input$layers_map)

  expect_equal(sort(sp_split$upper[sp_split$site == "site_a"]),
               c(-55,-50,-45,-40,-30,-20,0,10))



})

test_that("missing combinations work",{

  library(dplyr)

  lmap <- data.frame(site = rep(c("site_a","site_b"),
                                each = 2),
                     upper = rep(c(10,0),
                                 times = 2),
                     lower = rep(c(0,-100),
                                 times = 2)
  ) %>%
    cfp_layers_map(id_cols = "site",
                   gas = "CO2")

  soilphys <-
    data.frame(site = rep(c("site_a","site_b"),
                          each = 3),
               upper = rep(c(10,0,-20),
                           times = 2),
               lower = rep(c(0,-20,-100),
                           times = 2),
               c_air = 1,
               DS = 1,
               gas = "CO2") %>%
    dplyr::cross_join(data.frame(date = c(1, 2, 3))) %>%
    cfp_soilphys(id_cols = c("site", "date"))

  gasdata <-
    data.frame(site = rep(c("site_a","site_b"),
                          each = 5),
               depth = rep(c(10,0,-20,-30,-100),
                           times = 2),
               x_ppm = rep(400,10),
               gas = "CO2") %>%
    dplyr::cross_join(data.frame(date = c(1, 2, 3, 4))) %>%
    cfp_gasdata(id_cols = c("site", "date"))

  my_dat <-
    cfp_dat(gasdata,
            soilphys,
            lmap)

  expect_equal(n_profiles(my_dat), 6)

})



test_that("incomplete profiles are checked",{

  library(dplyr)

  lmap <- data.frame(site = rep(c("site_a","site_b"),
                                each = 2),
                     upper = rep(c(10,0),
                                 times = 2),
                     lower = rep(c(0,-100),
                                 times = 2)
  ) %>%
    cfp_layers_map(id_cols = "site",
                   gas = "CO2")

  soilphys <-
    data.frame(site = rep(c("site_a","site_b"),
                          each = 3),
               upper = rep(c(10,0,-20),
                           times = 2),
               lower = rep(c(0,-20,-100),
                           times = 2),
               c_air = 1,
               DS = 1,
               gas = "CO2") %>%
    dplyr::cross_join(data.frame(date = c(1, 2, 3))) %>%
    cfp_soilphys(id_cols = c("site", "date"))

  gasdata <-
    data.frame(site = rep(c("site_a","site_b"),
                          each = 5),
               depth = rep(c(10,0,-20,-30,-100),
                           times = 2),
               x_ppm = rep(400,10),
               gas = "CO2") %>%
    dplyr::cross_join(data.frame(date = c(1, 2, 3))) %>%
    dplyr::slice(c(1:5, 7:10, 12:16, 18:27, 29:dplyr::n())) %>%
    cfp_gasdata(id_cols = c("site", "date"))

  my_dat <-
    cfp_dat(gasdata,
            soilphys,
            lmap)

  expect_equal(n_profiles(my_dat), 4)

})


test_that("filter cfp_dat objects works", {

  base_dat <- readRDS(testthat::test_path("fixtures", "base_dat.rds"))

  base_dat_site_a <- filter(base_dat, site == "site_a")
  base_dat_prof1 <- filter(base_dat, prof_id == 1)

  expect_equal(unique(base_dat_site_a$profiles$site), "site_a")
  expect_equal(unique(base_dat_prof1$profiles$prof_id), 1)
  expect_equal(n_profiles(base_dat_site_a), 12)

  expect_equal(nrow(base_dat_prof1$soilphys), 9)

})



test_that("cfp_dat fails when no valid profiles", {

  base_dat <- readRDS(testthat::test_path("fixtures", "base_dat.rds"))

  gd <- base_dat$gasdata

  base_dat$gasdata$x_ppm[base_dat$gasdata$depth > 0] <- NA

  expect_error(
  cfp_dat(base_dat$soilphys,
          base_dat$gasdata,
          base_dat$layers_map)
  )

})

test_that("cfp_dat fails when id cols of one dataset are present in another.",{

  base_dat <- readRDS(testthat::test_path("fixtures", "base_dat.rds"))

  soilphys <- cfp_soilphys(base_dat)
  gasdata <- cfp_gasdata(base_dat)
  layers_map <- cfp_layers_map(base_dat)

  attr(gasdata, "id_cols") <- c("gas", "Date")

  expect_error(
    cfp_dat(gasdata, soilphys, layers_map),
    regexp = "id_col of one dataset cannot be a non-id_col in another!"
    )
})
valentingar/ConFluxPro documentation built on Dec. 1, 2024, 9:35 p.m.