tests/testthat/test-swe.jo09.R

test_that("swe.jo09 works with valid input", {
     data <- data.frame(
          date = as.Date('2023-01-01') + 0:9,
          hs = seq(0, 0.5, length.out = 10)
     )
     result <- swe.jo09(data, alt = 1500, region.jo09 = 3)
     
     expect_type(result, "double")
     expect_length(result, nrow(data))
     expect_true(all(result >= 0, na.rm = TRUE)) # SWE should be non-negative
})

test_that("swe.jo09 throws error for invalid data type", {
     data <- list(date = as.Date('2023-01-01') + 0:9, hs = seq(0, 0.5, length.out = 10))
     expect_error(swe.jo09(data, alt = 1500, region.jo09 = 3), 
                  "swe.jo09: data must be given as data.frame")
})

test_that("swe.jo09 throws error when required columns are missing", {
     data <- data.frame(hs = seq(0, 0.5, length.out = 10))
     expect_error(swe.jo09(data, alt = 1500, region.jo09 = 3), 
                  "swe.jo09: data must contain at least two columns named 'hs' and 'date'")
})

test_that("swe.jo09 throws error for invalid snow depth values", {
     data <- data.frame(
          date = as.Date('2023-01-01') + 0:9,
          hs = c(0.1, -0.2, 0.3, NA, 0.5)
     )
     expect_error(swe.jo09(data, alt = 1500, region.jo09 = 3), 
                  "swe.jo09: snow depth data must not be NA")
     
     data <- data.frame(
          date = as.Date('2023-01-01') + 0:9,
          hs = c(0.1, -0.2, 0.3, 0.1, 0.5)
     )
     expect_error(swe.jo09(data, alt = 1500, region.jo09 = 3), 
                  "swe.jo09: snow depth data must not be negative")
})

test_that("swe.jo09 throws error for invalid date format", {
     data <- data.frame(
          date = c("2023-01-01", "invalid-date", "2023-01-03"),
          hs = seq(0, 0.5, length.out = 3)
     )
     expect_error(swe.jo09(data, alt = 1500, region.jo09 = 3), 
                  "date format must be '%Y-%m-%d'")
})

test_that("swe.jo09 throws error for invalid altitude values", {
     data <- data.frame(
          date = as.Date('2023-01-01') + 0:9,
          hs = seq(0, 0.5, length.out = 10)
     )
     
     expect_error(swe.jo09(data, alt = -100, region.jo09 = 3), 
                  "swe.jo09: station elevation must not be negative")
     
     expect_error(swe.jo09(data, alt = NA, region.jo09 = 3), 
                  "swe.jo09: station elevation must be given")
})

test_that("swe.jo09 throws error for invalid region.jo09 values", {
     data <- data.frame(
          date = as.Date('2023-01-01') + 0:9,
          hs = seq(0, 0.5, length.out = 10)
     )
     
     expect_error(swe.jo09(data, alt = 1500, region.jo09 = 8), 
                  "swe.jo09: region.jo09 must be integer between 1 and 7")
     
     expect_error(swe.jo09(data, alt = 1500, region.jo09 = c(1, 2)), 
                  "region.jo09 must be of length one")
})

test_that("swe.jo09 handles zero snow depth correctly", {
     data <- data.frame(
          date = as.Date('2023-01-01') + 0:4,
          hs = c(0, 0, 0, 0, 0)
     )
     result <- swe.jo09(data, alt = 1500, region.jo09 = 3)
     
     expect_equal(result, rep(0, nrow(data))) # SWE should be zero when snow depth is zero
})

# test_that("swe.jo09 computes correct SWE for different altitude classes", {
#      data <- data.frame(
#           date = as.Date('2023-01-01') + 0:4,
#           hs = seq(0.1, 0.5, length.out = 5)
#      )
#      
#      result_0 <- swe.jo09(data, alt = 1000, region.jo09 = 3)
#      result_1400 <- swe.jo09(data, alt = 1500, region.jo09 = 3)
#      result_2000 <- swe.jo09(data, alt = 2500, region.jo09 = 3)
#      
#      expect_true(all(result_0 <= result_1400, na.rm = TRUE)) # Higher altitude => Higher SWE
#      expect_true(all(result_1400 <= result_2000, na.rm = TRUE))
# })

test_that("swe.jo09 handles months with no valid coefficients (e.g., summer months)", {
     data <- data.frame(
          date = as.Date(c('2023-06-01', '2023-07-01', '2023-08-01')),
          hs = c(0.1, 0.2, 0.3)
     )
     result <- swe.jo09(data, alt = 1500, region.jo09 = 3)
     
     expect_true(all(is.na(result))) # Should return NA for months without valid coefficients
})

Try the nixmass package in your browser

Any scripts or data that you put into this service are public.

nixmass documentation built on June 8, 2025, 1:44 p.m.