tests/testthat/test-addDownwardMargin.R

context("addDownwardMargin")

sapply(studyPathS, function(studyPath){

  opts <- setSimulationPath(studyPath)

  data <- suppressWarnings(readAntares(
    "all", "all",
    select = c("H. ROR", "WIND", "SOLAR", "MISC. NDG", "LOAD", "BALANCE",
               "ROW BAL.", "FLOW LIN."),
    linkCapacity = TRUE, mustRun = TRUE,
    showProgress = FALSE
  ))
  dataCor <- suppressWarnings(removeVirtualAreas(data, getAreas("psp")))

  describe("addDownwardMargin", {
    it("adds two columns with isolated and interconnected downward margins", {
      it("with virtual areas", {
        data <- data.table::copy(dataCor)
        expect_silent(addDownwardMargin(data))
        expect_false(is.null(data$areas$isolatedDownwardMargin))
        expect_false(is.null(data$areas$interconnectedDownwardMargin))
        expect_equal(data$areas[, thermalPmin + `H. ROR`+WIND+SOLAR+`MISC. NDG` - pumpingCapacity - LOAD],
                     data$areas$isolatedDownwardMargin)
        expect_equal(data$areas[, isolatedDownwardMargin + BALANCE - `ROW BAL.`],
                     data$areas$interconnectedDownwardMargin)
      })
      it("without virtual areas", {
        data <- data.table::copy(data)
        expect_silent(addDownwardMargin(data))
        expect_false(is.null(data$areas$isolatedDownwardMargin))
        expect_false(is.null(data$areas$interconnectedDownwardMargin))
        expect_equal(data$areas[, thermalPmin + `H. ROR`+WIND+SOLAR+`MISC. NDG`-LOAD],
                     data$areas$isolatedDownwardMargin)
        expect_equal(data$areas[, isolatedDownwardMargin + BALANCE - `ROW BAL.`],
                     data$areas$interconnectedDownwardMargin)
      })
    })

    it ("throws an error if a required column is missing", {
      data2 <- data.table::copy(data)
      data2$areas$SOLAR <- NULL
      expect_error(addDownwardMargin(data2), "SOLAR")
      data2 <- data.table::copy(data)
      data2$areas$thermalPmin <- NULL
      expect_error(addDownwardMargin(data2), "mustRun = TRUE")
    })

    describe("missing pumpingCapacity", {
      it ("throws an error if there are virtual storage/flexibility areas", {
        data <- data.table::copy(dataCor)
        data$areas$pumpingCapacity <- NULL
        expect_error(addDownwardMargin(data), "linkCapacity = TRUE")
      })
      it ("works silently if not", {
        data <- data.table::copy(data)
        expect_silent(addDownwardMargin(data))
      })
    })

    it("also works with antaresDataTable objects", {
      data <- data.table::copy(data$areas)
      expect_silent(addDownwardMargin(data))
      expect_false(is.null(data$isolatedDownwardMargin))
      expect_false(is.null(data$interconnectedDownwardMargin))
    })

    it("does not work with other objects", {
      expect_error(addDownwardMargin(TRUE), "antaresData")
    })
    data <- readAntares(links = "all", clusters = "all", showProgress = FALSE)
    it("warning no area no district", {
      expect_warning(addDownwardMargin(data), "'x' does not contain area or district data. Upward margin has not been computed.")
    })
  })

})
rte-antares-rpackage/antaresProcessing documentation built on June 30, 2024, 2:28 a.m.