test_that("block works as expected with year blocks", {
  i <- as.Date("2019-01-01") + c(-2:2, 31)

  expect_equal(block(i, i, period = "year"), list(i[1:2], i[3:6]))
})

test_that("block works as expected with month blocks", {
  i <- as.Date("2019-01-01") + c(-2:2, 31)

  expect_equal(block(i, i, period = "month"), list(i[1:2], i[3:5], i[6]))
})

test_that("`x` must be a vector", {
  expect_snapshot({
    (expect_error(block(as.name("x"), new_date(0)), class = "vctrs_error_scalar_type"))
  })
})

test_that("works with empty input", {
  x <- numeric()
  i <- structure(numeric(), class = "Date")

  expect_equal(block(x, i, "year"), list())
})

test_that("`i` can not have `NA` values", {
  expect_snapshot({
    (expect_error(block(1:2, new_date(c(0, NA_real_))), class = "slider_error_index_cannot_be_na"))
  })
})

test_that("type of `i` is validated", {
  expect_snapshot({
    (expect_error(block(1, 1), class = "slider_error_index_incompatible_type"))
  })
})

test_that("length of `i` must be identical to `x`", {
  expect_snapshot({
    (expect_error(block(c(1, 2), new_date(0)), class = "slider_error_index_incompatible_size"))
  })
})

test_that("`i` must be ascending", {
  expect_snapshot({
    (expect_error(block(c(1, 2, 3), new_date(c(2, 1, 0))), class = "slider_error_index_must_be_ascending"))
  })
})
