context("test-sobol_matrices")
library(testthat)

test_that("Output is a matrix", {
  N <- 10
  params <- paste("X", 1:3, sep = "")
  mat <- sobol_matrices(N = N, params = params)
  expect_true(is.matrix(mat))
})

test_that("Sample size for first and total-order indices 1", {
  N <- 10
  params <- paste("X", 1:3, sep = "")
  matrices <- c("A", "B", "AB")
  mat <- sobol_matrices(N = N, params = params, matrices = matrices)
  expect_equal(nrow(mat), N * (length(params) + 2))
})

test_that("Sample size for first and total-order indices 2", {
  N <- 10
  params <- paste("X", 1:3, sep = "")
  matrices <- c("A", "B", "AB", "BA")
  mat <- sobol_matrices(N = N, params = params, matrices = matrices)
  expect_equal(nrow(mat), N * (2 * length(params) + 2))
})

test_that("Sample size for first and total-order indices 3", {
  N <- 10
  params <- paste("X", 1:3, sep = "")
  matrices <- c("A", "AB", "BA")
  mat <- sobol_matrices(N = N, params = params, matrices = matrices)
  expect_equal(nrow(mat), N * (2 * length(params) + 1))
})


test_that("Sample size for first, total and second-order indices", {
  N <- 10
  params <- paste("X", 1:3, sep = "")
  matrices <- c("A", "B", "AB")
  order <- "second"
  mat <- sobol_matrices(N = N, params = params, matrices = matrices, order = order)
  expect_equal(nrow(mat), N * (length(params) + 2) +
                 N * ncol(utils::combn(params, 2)))
})

test_that("Sample size for first, total, second and third-order indices", {
  N <- 10
  params <- paste("X", 1:3, sep = "")
  matrices <- c("A", "B", "AB")
  order <- "third"
  mat <- sobol_matrices(N = N, params = params, matrices = matrices, order = order)
  expect_equal(nrow(mat), N * (length(params) + 2) +
                 N * ncol(utils::combn(params, 2)) +
                 N * ncol(utils::combn(params, 3)))
})
