
test_that("to [0, 1] for qualitative values", {
  z <- prune_method()

  z_0 <- encode_unit(z, prune_method()$values, direction = "forward")
  expect_equal(z_0, (0:5) / 5)

  z_back <- encode_unit(z, rev(z_0), direction = "backward")
  expect_equal(z_back, rev(prune_method()$values))
})


test_that("to [0, 1] for quantitative values", {
  x <- mtry(c(2L, 7L))
  y <- mtry_long(c(1L, 3L))

  x_0 <- encode_unit(x, 2:7, direction = "forward")
  expect_equal(x_0, seq(0, 1, length = 6))

  x_back <- encode_unit(x, c(0.000001, 1 / 3, .99999, 1), direction = "backward")
  expect_equal(x_back, c(2L, 4L, 7L, 7L))

  y_0 <- encode_unit(y, log10(214), direction = "forward")
  expect_equal(y_0, 0.66, tolerance = 0.01)
  y_orig <- encode_unit(y, y_0, direction = "backward", original = TRUE)
  y_trans <- encode_unit(y, y_0, direction = "backward", original = FALSE)
  expect_equal(y_orig, 214, tolerance = 0.01)
  expect_equal(y_trans, log10(214), tolerance = 0.01)
})


test_that("missing data", {
  x <- mtry(c(2L, 7L))
  z <- prune_method()

  x_0 <- encode_unit(x, c(2L, NA_integer_), direction = "forward")
  expect_equal(x_0, c(0, NA_real_))

  z_0 <- encode_unit(z, c("backward", NA_character_), direction = "forward")
  expect_equal(z_0, c(0, NA_real_))
})


test_that("bad args", {
  x <- mtry(c(2L, 7L))
  z <- prune_method()

  z_0 <- encode_unit(z, prune_method()$values, direction = "forward")
  x_0 <- encode_unit(x, 2:7, direction = "forward")

  expect_snapshot(
    error = TRUE,
    encode_unit(2, prune_method()$values, direction = "forward")
  )
  expect_snapshot(
    error = TRUE,
    encode_unit(z, prune_method()$values, direction = "forwards")
  )

  expect_snapshot(
    error = TRUE,
    encode_unit(x, prune_method()$values, direction = "forward")
  )
  expect_snapshot(
    error = TRUE,
    encode_unit(z, 1, direction = "forward")
  )
  expect_snapshot(
    error = TRUE,
    encode_unit(x, matrix(letters[1:4], ncol = 2), direction = "forward")
  )
  expect_snapshot(
    error = TRUE,
    encode_unit(x, matrix(1:4, ncol = 2), direction = "forward")
  )
  expect_snapshot(
    error = TRUE,
    encode_unit(z, matrix(1:4, ncol = 2), direction = "forward")
  )
  expect_snapshot(
    error = TRUE,
    encode_unit(z, matrix(letters[1:4], ncol = 2), direction = "forward")
  )

  expect_snapshot(
    error = TRUE,
    encode_unit(x, prune_method()$values, direction = "backward")
  )
  expect_snapshot(
    error = TRUE,
    encode_unit(z, prune_method()$values, direction = "backward")
  )
  expect_snapshot(
    error = TRUE,
    encode_unit(x, 1:2, direction = "backward")
  )
  expect_snapshot(
    error = TRUE,
    encode_unit(z, 1:2, direction = "backward")
  )
})
