library(dplyr)
test_that("scales return as expected", {
expect_equal(scale_diatonic("c", collapse = TRUE) |> as.character(),
"c d e f g a b")
expect_equal(scale_diatonic("am", collapse = TRUE) |> as.character(),
"a, b, c d e f g")
expect_equal(length(scale_chromatic("c")), 12)
expect_equal(scale_diatonic(key = "dm", TRUE) |> as.character(),
"d e f g a b_ c'")
expect_equal(scale_minor(key = "dm", TRUE, TRUE) |> as.character(),
"d e f g a b_ c")
expect_equal(scale_major(key = "d", TRUE) |> as.character(),
"d e f# g a b c#'")
expect_equal(scale_chromatic(root = "a", collapse = TRUE) |> as.character(),
c("a, a#, b, c c# d d# e f f# g g#"))
expect_equal(scale_chromatic(root = "a", ignore_octave = TRUE) |>
as.character(), c("a", "a#", "b", "c", "c#", "d", "d#",
"e", "f", "f#", "g", "g#"))
expect_equal(scale_harmonic_minor("am", TRUE) |> as.character(),
"a, b, c d e f g#")
expect_equal(scale_hungarian_minor("am", TRUE, TRUE) |> as.character(),
"a b c d# e f g#")
expect_identical(scale_melodic_minor("am"), scale_jazz_minor("am"))
expect_equal(
rev(scale_melodic_minor("am", descending = TRUE, ignore_octave = TRUE)),
as_noteworthy(letters[1:7]))
expect_equal(scale_jazz_minor("am", collapse = TRUE) |> as.character(),
"a, b, c d e f# g#")
expect_equal(length(modes()), 7)
expect_equal(length(modes("major")), 3)
expect_equal(length(modes("minor")), 4)
expect_error(scale_major("a#"), "`key` does not indicate a valid major key.")
expect_error(scale_minor("g_"), "`key` does not indicate a valid minor key.")
expect_error(scale_chromatic("a_"),
"`root` is not one of: c c# d d# e f f# g g# a a# b")
expect_error(scale_chromatic("c#", sharp = FALSE),
"`root` is not one of: c d_ d e_ e f g_ g a_ a b_ b")
})
test_that("other scale helpers return as expected", {
x <- "r c, e3 g~ g s g# ceg"
expect_equal(scale_degree(x), c(NA, 1, 3, 5, 5, NA, NA, 1))
expect_equal(note_in_scale(x), c(NA, T, T, T, T, NA, F, T))
expect_equal(scale_degree("a b c d e f g", "am", "harmonic_minor"),
c(1:6, NA))
expect_equal(scale_degree("c e g", roman = TRUE), as.roman(c(1, 3, 5)))
expect_equal(scale_degree("c e g", key = "d"), c(NA, 2, 4))
expect_equal(scale_degree("c c# d_ e", key = "d"), c(NA, 7, NA, 2))
expect_equal(scale_degree("c c# d_ e", key = "d", strict_accidentals = FALSE),
c(NA, 7, 7, 2))
x <- "c, e_3 g' f#ac#"
expect_equal(scale_degree(x), c(1, NA, 5, NA))
expect_equal(scale_degree(x, use_root = FALSE), c(1, NA, 5, NA))
expect_equal(scale_degree(x, naturalize = TRUE), c(1, 3, 5, 1))
expect_equal(scale_degree(x, scale = "chromatic"), c(1, 4, 8, 2))
expect_equal(
scale_degree("c# d_ e_' e4 f f# g", key = "c#", scale = "chromatic"),
c(1, 1, 3:7))
expect_equal(scale_note(1:3), as_noteworthy(c("c", "d", "e")))
expect_equal(scale_note(c(1, 3, 8), "d", collapse = TRUE),
as_noteworthy("d f# d"))
expect_true(all(sapply(list(4, "IV", as.roman(4)), scale_note) == "f"))
expect_equal(scale_note(1:8, "e"),
as_noteworthy("e f# g# a b c# d# e", format = "vector"))
expect_equal(is_diatonic("f2#a3c#' r s f#ac", "a"), c(T, NA, NA, F))
err <- "`tabr::scale_a` is not an exported scale."
expect_error(scale_degree(x, scale = "a"), err)
expect_error(scale_note(1, scale = "a"), err)
expect_error(scale_note(0), "`deg` should be >= 1.")
expect_error(is_diatonic("ceg x"), "Invalid notes or chords found.")
expect_identical(note_in_scale(x), c(T, F, T, FALSE))
expect_identical(note_in_scale("c e_ g"), c(TRUE, FALSE, TRUE))
expect_identical(note_in_scale("c e_ g", "cm", "minor"), c(TRUE, TRUE, TRUE))
expect_equal(
chord_degree("c#d d_ e_' e4 f f# g", key = "c#", scale = "chromatic"),
list(1:2, 1, 3, 4, 5, 6, 7))
x <- "r s d~ dfa df#a f#ac#"
expect_equal(chord_degree(x, "d"),
list(NA_integer_, NA_integer_, 1, c(1, NA, 5), c(1, 3, 5),
c(3, 5, 7)))
expect_identical(is_in_scale(x, "d"), c(NA, NA, T, F, T, T))
})
test_that("scale_chords returns as expected", {
expect_equal(scale_chords("c", "major", collapse = TRUE),
as_noteworthy("ceg dfa egb fac' gbd' ac'e' bd'f'"))
expect_equal(scale_chords("a", "minor", collapse = TRUE),
as_noteworthy("a,ce b,df ceg dfa egb fac' gbd'"))
expect_equal(scale_chords("a", "harmonic minor", collapse = TRUE),
as_noteworthy("a,ce b,df ceg# dfa eg#b fac' g#bd'"))
expect_identical(scale_chords("a", "melodic minor"),
scale_chords("a", "jazz minor"))
expect_equal(scale_chords("a", "hungarian minor"),
as_noteworthy(
c("a,ce", "b,d#f", "ceg#", "d#fa", "eg#b", "fac'", "g#bd#'")))
expect_equal(scale_chords("c", "major", "seventh", collapse = TRUE),
as_noteworthy("cegb dfac' egbd' fac'e' gbd'f' ac'e'g' bd'f'a'"))
expect_equal(scale_chords("a", "minor", "seventh", collapse = TRUE),
as_noteworthy("a,ceg b,dfa cegb dfac' egbd' fac'e' gbd'f'"))
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.