Nothing
# openColours is pure and fast — no mydata needed, no subsampling required.
# Run representative schemes once and reuse.
cols_default <- openColours("default", 10)
cols_jet <- openColours("jet", 10)
cols_hue <- openColours("hue", 5)
# --- Return type and length --------------------------------------------------
test_that("openColours returns a character vector of the requested length", {
expect_type(cols_default, "character")
expect_length(cols_default, 10L)
expect_length(openColours("jet", 1L), 1L)
expect_length(openColours("viridis", 50L), 50L)
})
test_that("all returned values are valid hex colours", {
is_hex <- function(x) all(grepl("^#[0-9A-Fa-f]{6,8}$", x))
expect_true(is_hex(cols_default))
expect_true(is_hex(cols_jet))
expect_true(is_hex(cols_hue))
})
# --- Sequential schemes ------------------------------------------------------
test_that("sequential schemes return the correct number of colours", {
seq_schemes <- c(
"increment",
"default",
"heat",
"jet",
"turbo",
"viridis",
"plasma",
"magma",
"inferno",
"cividis",
"gaf.seq"
)
for (s in seq_schemes) {
expect_length(openColours(s, 7), 7L)
}
})
# --- Brewer schemes ----------------------------------------------------------
test_that("RColorBrewer schemes interpolate to requested n", {
expect_length(openColours("Blues", 5), 5L)
expect_length(openColours("Blues", 20), 20L) # beyond native max -> interpolation
expect_length(openColours("RdBu", 8), 8L)
})
# --- Qualitative schemes and their caps -------------------------------------
test_that("qualitative schemes return correct colours up to their max", {
expect_length(openColours("okabeito", 5), 5L)
expect_length(openColours("daqi", 10), 10L)
expect_length(openColours("daqi.bands", 4), 4L)
expect_length(openColours("gaf.cat", 6), 6L)
expect_length(openColours("gaf.focus", 2), 2L)
expect_length(openColours("tol.bright", 7), 7L)
expect_length(openColours("tol.muted", 10), 10L)
expect_length(openColours("tableau", 10), 10L)
expect_length(openColours("observable", 10), 10L)
})
test_that("qualitative schemes error when n exceeds maximum", {
expect_error(openColours("daqi.bands", 5), regexp = "Too many")
expect_error(openColours("gaf.focus", 3), regexp = "Too many")
expect_error(openColours("gaf.cat", 7), regexp = "Too many")
})
# --- Aliases -----------------------------------------------------------------
test_that("cbPalette is an alias for okabeito", {
expect_equal(openColours("cbPalette", 5), openColours("okabeito", 5))
})
test_that("tol is an alias for tol.bright", {
expect_equal(openColours("tol", 5), openColours("tol.bright", 5))
})
# --- User-defined colours ----------------------------------------------------
test_that("user-supplied named colours are accepted and interpolated", {
cols <- openColours(c("red", "blue"), 8)
expect_length(cols, 8L)
expect_type(cols, "character")
})
test_that("user-supplied hex colours are accepted", {
cols <- openColours(c("#FF0000", "#00FF00", "#0000FF"), 6)
expect_length(cols, 6L)
})
test_that("a single valid colour repeated n times is returned", {
cols <- openColours("red", 4)
expect_length(cols, 4L)
expect_true(all(cols == cols[1]))
})
# --- Error handling ----------------------------------------------------------
test_that("invalid colour name raises an informative error", {
expect_error(openColours("notacolour"), regexp = "valid R colours")
expect_error(openColours(c("red", "notacolour")), regexp = "valid R colours")
})
test_that("mixing a scheme name with extra colours raises an error", {
expect_error(openColours(c("jet", "red")), regexp = "either")
})
# --- Greyscale and hue -------------------------------------------------------
test_that("greyscale returns values that decode to equal R, G, B channels", {
cols <- openColours("greyscale", 5)
rgb_vals <- grDevices::col2rgb(cols)
# for grey, R == G == B
expect_true(all(rgb_vals["red", ] == rgb_vals["green", ]))
expect_true(all(rgb_vals["green", ] == rgb_vals["blue", ]))
})
test_that("hue palette produces n distinct colours", {
cols <- openColours("hue", 6)
expect_length(cols, 6L)
expect_equal(length(unique(cols)), 6L)
})
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.