tests/testthat/test-2-add-tie-.R

test_that("tie adding validations work", {
  # Start and stop positions
  music <- Music() + Line(90)
  expect_error(music + Tie(2))
  expect_error(music + Tie(1))

  # Rests
  music <- Music() + Line(c(NA, 90, NA))
  expect_error(music + Tie(1))
  expect_error(music + Tie(2))

  # Chord length
  music <- Music() + Line(list(c(90, 90), 90))
  expect_error(music + Tie(1, 3))

  # Equivalent pitches
  music <- Music() + Line(list(90, c(91, 92), 91))
  expect_error(music + Tie(1))
  expect_error(music + Tie(2, 2))
})


test_that("tie adding works", {
  # Single note and `j = NA`
  music <- Music() + Line(c(90, 90)) + Tie(1)
  out <- locate(music[["ties"]])
  expected <- c(1L, 1L, NA_integer_)
  expect_identical(out, expected)

  # Single note and `j = 1`
  music <- Music() + Line(c(90, 90)) + Tie(1, 1)
  out <- locate(music[["ties"]])
  expected <- c(1L, 1L, NA_integer_)
  expect_identical(out, expected)

  # Chord of only one matched note and specified `j`
  music <- Music() + Line(list(c(90, 91), 90)) + Tie(1, 1)
  out <- locate(music[["ties"]])
  expected <- c(1L, 1L, 1L)
  expect_identical(out, expected)

  # Chord of only one matched note and `j = NA`
  music <- Music() + Line(list(c(90, 91), 90)) + Tie(1)
  out <- locate(music[["ties"]])
  expected <- c(1L, 1L, 1L)
  expect_identical(out, expected)

  # Chord of two matched but competing notes and `j = NA`
  music <- Music() + Line(list(c(90, 90), 90)) + Tie(1)
  out <- locate(music[["ties"]])
  expected <- c(1L, 1L, 1L)
  expect_identical(out, expected)

  # Chord and `j = NA`
  music <- Music() + Line(list(c(90, 91), c(91, 90))) + Tie(1)
  ties <- music[["ties"]]

  out <- locate(ties[1, ])
  expected <- c(1L, 1L, 1L)
  expect_identical(out, expected)

  out <- locate(ties[2, ])
  expected <- c(1L, 1L, 2L)
  expect_identical(out, expected)

  # Update cases
  music <- Music() + Line(list(90:91, 90:91)) + Tie(1) + Tie(1, 1)
  out <- locate(music[["ties"]][2, ])
  expected <- c(1L, 1L, 1L)
  expect_identical(out, expected)
})
flujoo/gm documentation built on July 12, 2024, 4:56 p.m.