tests/testthat/test-nppi.R

test_that("nppi function returns expected structure", {
  set.seed(42)
  sim_data <- stats::arima.sim(list(order = c(1, 0, 0), ar = 0.5), n = 200)

  result <- nppi(data = sim_data, stat_function = mean, num_bootstrap = 100)

  expect_type(result, "list")  # Ensure it's a list
  expect_s3_class(result, "nppi")  # Ensure correct S3 class

  # Check that key elements exist
  expect_named(result, c("optimal_block_length", "bias", "variance", "jab_point_values", "l", "m"))

  # Check that the values are numeric
  expect_true(is.numeric(result$optimal_block_length))
  expect_true(is.numeric(result$bias))
  expect_true(is.numeric(result$variance))

  # Ensure the estimated block length is within a reasonable range
  expect_gt(result$optimal_block_length, 0)
  expect_lt(result$optimal_block_length, length(sim_data))
})

test_that("nppi stops execution when NA values are present", {
  set.seed(42)
  sim_data <- stats::arima.sim(list(order = c(1, 0, 0), ar = 0.5), n = 200)
  sim_data[50] <- NA  # Introduce an NA value

  expect_error(
    nppi(data = sim_data, stat_function = mean, num_bootstrap = 100),
    "Error: NA values detected in the time series. Please impute or remove them manually."
  )
})

test_that("nppi handles very small datasets", {
  set.seed(42)
  small_data <- rnorm(10)  # Very small dataset

  result <- nppi(data = small_data, stat_function = mean, num_bootstrap = 100)

  expect_gt(result$optimal_block_length, 0)
  expect_lt(result$optimal_block_length, length(small_data))
})

test_that("nppi handles data.frame", {
  set.seed(42)
  small_data <- rnorm(10)
  df <- data.frame(x = small_data)

  result <- nppi(data = df, stat_function = mean, num_bootstrap = 100)

  expect_gt(result$optimal_block_length, 0)
  expect_lt(result$optimal_block_length, length(small_data))
})

test_that("nppi handles ts object", {
  set.seed(42)
  small_data <- rnorm(10)

  # Coerce to ts
  ts_data <- ts(small_data)
  result <- nppi(data = ts_data, stat_function = mean, num_bootstrap = 100)

  expect_gt(result$optimal_block_length, 0)
  expect_lt(result$optimal_block_length, length(small_data))
})


test_that("nppi correctly sets default values for l and m", {
  set.seed(42)
  sim_data <- stats::arima.sim(list(order = c(1, 0, 0), ar = 0.5), n = 200)

  result <- nppi(data = sim_data, stat_function = mean, num_bootstrap = 100)

  expect_gt(result$l, 0)  # `l` should be a positive number
  expect_gt(result$m, 0)  # `m` should be a positive number
})
Alec-Stashevsky/hhjboot documentation built on Feb. 19, 2025, 11:19 a.m.