test_that("basic percentages work", {
  input <- c(
    7.5 / 100,
    20 / 100,
    0.3333 / 1,
    100 / 100,
    15.75 / 100,
    0.005 / 0.1,
    150 / 300
  )
  output <- pretty_percent(input, n_decimal = 2)
  expect_equal(
    output,
    c("7.5%", "20%", "33.33%", "100%", "15.75%", "5%", "50%")
  )
})

test_that("zero values are handled correctly", {
  input <- c(0, 0.0000, 0.00001)
  output <- pretty_percent(input, n_decimal = 2)
  expect_equal(output, c("0%", "0%", "0%"))
})

test_that("negative values are handled correctly", {
  input <- c(-0.05, -0.1234, -1)
  output <- pretty_percent(input, n_decimal = 2)
  expect_equal(output, c("-5%", "-12.34%", "-100%"))
})

test_that("large values above 1 correctly throw an error", {
  input <- c(1.25, 2, 10.3456)
  testthat::expect_error(
    pretty_percent(input, n_decimal = 1),
    regexp = "values must be contained within range.*-1.*1.*Range of this input was"
  )
})

test_that("trailing zeros are removed", {
  input <- c(0.5, 0.75, 0.333, 1)
  output <- pretty_percent(input, n_decimal = 3)
  expect_equal(output, c("50%", "75%", "33.3%", "100%"))
})

test_that("n_decimal is respected", {
  input <- c(0.125, 0.56789)
  output_0 <- pretty_percent(input, n_decimal = 0)
  output_1 <- pretty_percent(input, n_decimal = 1)
  output_3 <- pretty_percent(input, n_decimal = 3)

  expect_equal(output_0, c("12%", "57%"))
  expect_equal(output_1, c("12.5%", "56.8%"))
  expect_equal(output_3, c("12.5%", "56.789%"))
})

test_that("invalid inputs throw errors", {
  expect_error(pretty_percent("a"), "must be.*numeric")
  expect_error(pretty_percent(TRUE), "must be.*numeric")
  expect_error(pretty_percent(c(0.1, "b")), "must be.*numeric")
  expect_error(
    pretty_percent(0.5, n_decimal = -1),
    "values must be greater than or equal to 0"
  )
  expect_error(
    pretty_percent(0.5, n_decimal = "two"),
    "must be.*numeric"
  )
})
