tests/testthat/test-nixmass.R

test_that("nixmass works with delta.snow model", {
     data <- data.frame(date = as.Date('2023-01-01') + 0:9, hs = seq(0, 0.5, length.out = 10))
     result <- nixmass(data, model = "delta.snow", verbose = FALSE)
     
     expect_s3_class(result, "nixmass")
     expect_true("delta.snow" %in% names(result$swe))
     expect_equal(length(result$swe$delta.snow), nrow(data))
})

test_that("nixmass works with multiple models", {
     data <- data.frame(date = as.Date('2023-01-01') + 0:9, hs = seq(0, 0.5, length.out = 10))
     result <- nixmass(data, model = c("delta.snow", "delta.snow.dyn_rho_max"), verbose = FALSE)
     
     expect_s3_class(result, "nixmass")
     expect_true("delta.snow" %in% names(result$swe))
     expect_true("delta.snow.dyn_rho_max" %in% names(result$swe))
})

test_that("nixmass throws an error for missing parameters", {
     data <- data.frame(date = as.Date('2023-01-01') + 0:9, hs = seq(0, 0.5, length.out = 10))
     
     expect_error(nixmass(data, model = "jo09"), "Argument 'alt' is missing")
     expect_error(nixmass(data, model = "st10"), "Argument 'snowclass.st10' is missing")
     expect_error(nixmass(data, model = "gu19"), "Argument 'region.gu19' is missing")
})

test_that("nixmass handles invalid inputs", {
     data <- data.frame(date = as.Date('2023-01-01') + 0:9, hs = seq(0, 0.5, length.out = 10))
     
     expect_error(nixmass(data.frame(date = "invalid", hs = c(0.1, 0.2)), model = "delta.snow"), "date format must be '%Y-%m-%d'")
     expect_error(nixmass(data.frame(date = as.Date('2023-01-01') + 0:9, hs = c(NA, 0.1)), model = "delta.snow"), "data must not contain NA")
})

test_that("nixmass works with regional models", {
     data <- data.frame(date = as.Date('2023-01-01') + 0:9, hs = seq(0, 0.5, length.out = 10))
     
     result_jo09 <- nixmass(data, model = "jo09", alt = 1000, region.jo09 = 1)
     expect_true("jo09" %in% names(result_jo09$swe))
     
     result_gu19 <- nixmass(data, model = "gu19", region.gu19 = "central")
     expect_true("gu19" %in% names(result_gu19$swe))
     
     result_st10 <- nixmass(data, model = "st10", snowclass.st10 = "alpine")
     expect_true("st10" %in% names(result_st10$swe))
})

test_that("nixmass works with default model", {
     data <- data.frame(date = as.Date('2023-01-01') + 0:9, hs = seq(0, 0.5, length.out = 10))
     result <- nixmass(data)
     
     expect_s3_class(result, "nixmass")
     expect_true("delta.snow" %in% names(result$swe))
})

test_that("nixmass provides verbose output when verbose = TRUE", {
     data <- data.frame(date = as.Date('2023-01-01') + 0:9, hs = seq(0, 0.5, length.out = 10))
     
     expect_output(nixmass(data, model = "delta.snow", verbose = TRUE), "Using parameters")
})

test_that("should return matrices for swe, snowdepth and age when layers is TRUE", {
        # Setup a mock dataset
        sample_dates <- seq.Date(from = as.Date("2000-11-01"), to = as.Date("2000-11-07"), by = 1)
        sample_data <- c(0, seq(0.1, 0.5, 0.1), 0)
        data <- data.frame(date = as.character(sample_dates), hs = sample_data)
        result <- nixmass(data, layers = TRUE)
        expect_true(inherits(result$swe$delta.snow$SWE, "numeric"))
        expect_true(inherits(result$swe$delta.snow$h, "matrix"))
        expect_true(inherits(result$swe$delta.snow$swe, "matrix"))
        expect_true(inherits(result$swe$delta.snow$age, "matrix"))
        expect_true(inherits(result$swe$delta.snow$processes, "character"))
})

test_that("nixmass works with layers=TRUE", {
        sample_dates <- seq.Date(from = as.Date("2000-11-01"), to = as.Date("2000-11-07"), by = 1)
        sample_data <- c(0, seq(0.1, 0.5, 0.1), 0)
        data <- data.frame(date = as.character(sample_dates), hs = sample_data)
        result <- nixmass(data, layers = TRUE)
        expect_true(length(result$swe$delta.snow) == 5)
})

test_that("nixmass returns a list for each model when layers=TRUE", {
        sample_dates <- seq.Date(from = as.Date("2000-11-01"), to = as.Date("2000-11-07"), by = 1)
        sample_data <- c(0, seq(0.1, 0.5, 0.1), 0)
        data <- data.frame(date = as.character(sample_dates), hs = sample_data)
        result <- nixmass(data, model = "delta.snow.dyn_rho_max", layers = TRUE)
        expect_true(length(result$swe$delta.snow.dyn_rho_max) == 5)
})

test_that("should return matrices for swe, snowdepth and age when layers is TRUE", {
        # Setup a mock dataset
        sample_dates <- seq.Date(from = as.Date("2000-11-01"), to = as.Date("2000-11-07"), by = 1)
        sample_data <- c(0, seq(0.1, 0.5, 0.1), 0)
        data <- data.frame(date = as.character(sample_dates), hs = sample_data)
        result <- nixmass(data, model = "delta.snow.dyn_rho_max", layers = TRUE)
        expect_true(inherits(result$swe$delta.snow.dyn_rho_max$SWE, "numeric"))
        expect_true(inherits(result$swe$delta.snow.dyn_rho_max$h, "matrix"))
        expect_true(inherits(result$swe$delta.snow.dyn_rho_max$swe, "matrix"))
        expect_true(inherits(result$swe$delta.snow.dyn_rho_max$age, "matrix"))
        expect_true(inherits(result$swe$delta.snow.dyn_rho_max$processes, "character"))
})

test_that("should return only the swe vector when layers is FALSE", {
        # Setup a mock dataset
        sample_dates <- seq.Date(from = as.Date("2000-11-01"), to = as.Date("2000-11-07"), by = 1)
        sample_data <- c(0, seq(0.1, 0.5, 0.1), 0)
        data <- data.frame(date = as.character(sample_dates), hs = sample_data)
        result <- nixmass(data)
        expect_true(length(result$swe$delta.snow) == nrow(data))
})

test_that("nixmass returns results for both models when layers=TRUE", {
        sample_dates <- seq.Date(from = as.Date("2000-11-01"), to = as.Date("2000-11-07"), by = 1)
        sample_data <- c(0, seq(0.1, 0.5, 0.1), 0)
        data <- data.frame(date = as.character(sample_dates), hs = sample_data)
        result <- nixmass(data, model = c("delta.snow", "delta.snow.dyn_rho_max"), layers = TRUE)
        expect_true(length(names(result$swe)) == 2)
        expect_true("delta.snow" %in% names(result$swe))
        expect_true("delta.snow.dyn_rho_max" %in% names(result$swe))
})

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.