test_that("can shift in either direction", {
  f1 <- factor(c("a", "b", "c"))

  f2_l <- fct_shift(f1, 1)
  expect_equal(levels(f2_l), c("b", "c", "a"))

  f2_r <- fct_shift(f1, -1)
  expect_equal(levels(f2_r), c("c", "a", "b"))
})

test_that("0 shift leaves unchanged", {
  f1 <- factor(c("a", "b", "c"))
  f2 <- fct_shift(f1, 0)

  expect_identical(f1, f2)
})

test_that("validates its inputs", {
  expect_snapshot(error = TRUE, {
    fct_shift(1)
    fct_shift("x", NA)
  })
})
