tests/testthat/test-adaptiveDensityCircular.R

test_that("adaptiveDensityCircular returns a numeric vector for valid input",
          {
            density_vector <- c(0.173521608,
                                0.183378918,
                                0.147806612,
                                0.131912573,
                                0.173521608)
            set.seed(60)
            x <- rvonmises(50, circular(pi / 2), 1)
            result <- adaptiveDensityCircular(x, bw0 = 1, n = 5)
            expect_type(result, "double")
            expect_equal(density_vector, result)
            expect_length(result, 5)
          })

test_that(
  "adaptiveDensityCircular returns a numeric vector for valid input with different seed",
  {
    density_vector <- c(0.168161733, 0.196041884, 0.147535191, 0.124876756, 0.168161733)
    set.seed(123)
    x <- rvonmises(50, circular(pi / 2), 1)
    result <- adaptiveDensityCircular(x, bw0 = 1, n = 5)
    expect_equal(density_vector, result)
    expect_type(result, "double")
    expect_length(result, 5)
  }
)

test_that("adaptiveDensityCircular throws error on empty input", {
  expect_error(adaptiveDensityCircular(numeric(0), bw0 = 1),
               "`x` must be a non-empty object.")
})

test_that("adaptiveDensityCircular throws error if input is not numeric",
          {
            expect_error(adaptiveDensityCircular(c("a", "b"), bw0 = 1),
                         "must be a numeric vector.")
          })

test_that("adaptiveDensityCircular throws error if x contains only NAs", {
  x <- circular(c(NA, NA))
  expect_error(adaptiveDensityCircular(x, bw0 = 1),
               "`x` contains all missing values.")
})

test_that("adaptiveDensityCircular removes NA values and returns result",
          {
            x <- circular(c(0, pi / 2, NA, pi))
            result <- adaptiveDensityCircular(x, bw0 = 1)
            expect_type(result, "double")
            expect_length(result, 500)
            expect_cli_warning(
              adaptiveDensityCircular(x, bw0 = 1),
              1,
              "! `x` contains missing values, which will be removed."
            )
          })

test_that("adaptiveDensityCircular throws error on non-numeric non-finite from",
          {
            x <- circular(seq(0, 2 * pi, length.out = 5))
            expect_error(
              adaptiveDensityCircular(x, bw0 = 1, from = "zero"),
              "Argument `from` must be finite numeric value."
            )
            expect_error(
              adaptiveDensityCircular(x, bw0 = 1, from = Inf),
              "Argument `from` must be finite numeric value."
            )
          })

test_that("adaptiveDensityCircular throws error on non-numeric to", {
  x <- circular(seq(0, 2 * pi, length.out = 5))
  expect_error(
    adaptiveDensityCircular(x, bw0 = 1, to = "two_pi"),
    "Argument `to` must be finite numeric value."
  )

  expect_error(
    adaptiveDensityCircular(x, bw0 = 1, to = NA),
    "Argument `to` must be finite numeric value."
  )
})

test_that("adaptiveDensityCircular throws error on invalid n", {
  x <- circular(seq(0, 2 * pi, length.out = 5))
  expect_error(
    adaptiveDensityCircular(x, bw0 = 1, n = "five_hundred"),
    "Argument `n` must be finite numeric value."
  )
  expect_error(
    adaptiveDensityCircular(x, bw0 = 1, n = Inf),
    "Argument `n` must be finite numeric value."
  )
  expect_error(adaptiveDensityCircular(x, bw0 = 1, n = -1),
               "Argument `n` must be positive integer.")
  expect_error(
    adaptiveDensityCircular(x, bw0 = 1, n = 3.12),
    "Argument `n` must be positive integer."
  )
})

test_that("adaptiveDensityCircular uses custom z correctly", {
  x <- circular(seq(0, 2 * pi, length.out = 5))
  z <- circular(seq(0, pi, length.out = 10))
  result <- adaptiveDensityCircular(x, bw0 = 1, z = z)
  expect_type(result, "double")
  expect_length(result, 10)
  expect_true(all(is.finite(result)))
})

Try the circularKDE package in your browser

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

circularKDE documentation built on Jan. 7, 2026, 9:06 a.m.