tests/testthat/test-complement.R

# SETUP ----
sq_dna <- sq(c("ATCTTGAAG", "CATATGCGCTA", "ACGTGTCGA", ""),
             alphabet = "dna_bsc")
sq_dna_compl <- sq(c("TAGAACTTC", "GTATACGCGAT", "TGCACAGCT", ""),
                   alphabet = "dna_bsc")
sq_dna_2 <- sq(c("KCYSRRCACNB", "BAYRNYWAK", "NBVKAWRYGG"),
               alphabet = "dna_ext")
sq_dna_2_compl <- sq(c("MGRSYYGTGNV", "VTRYNRWTM", "NVBMTWYRCC"),
                     alphabet = "dna_ext")
sq_rna <- sq(c("UAGUAACCGUAAGCG", "UAGUCC--UA-G"),
             alphabet = "rna_bsc")
sq_rna_compl <- sq(c("AUCAUUGGCAUUCGC", "AUCAGG--AU-C"),
                   alphabet = "rna_bsc")

# PROTOTYPE PRESERVATION ----
test_that("complement() preserves all attributes of original vector", {
  expect_vector(complement(sq_dna),
                ptype = vec_ptype(sq_dna),
                size = vec_size(sq_dna))
  expect_vector(complement(sq_rna),
                ptype = vec_ptype(sq_rna),
                size = vec_size(sq_rna))
  expect_vector(complement(sq_dna_2),
                ptype = vec_ptype(sq_dna_2),
                size = vec_size(sq_dna_2))
})

# ERROR FOR NON-DNA/RNA OBJECTS ----
test_sq_only(complement)

test_that("only DNA and RNA sequences are accepted", {
  expect_error(complement(sq(character(), "ami_bsc")))
  expect_error(complement(
    sq(c("accmsce", "auprcacc"), alphabet = c("auprc", "acc", "msce"))
  ))
})

# VALUE COMPUTATION ----
# NOTE: used as.character() because hypothetically one value might have
#  multiple equivalent representations
test_that("complement() returns correct complement value for complement-only characters", {
  expect_equal(
    as.character(complement(sq_dna)),
    as.character(sq_dna_compl)
  )
})

test_that("complement() returns correct complement value for complement-less characters", {
  expect_equal(
    as.character(complement(sq_rna)),
    as.character(sq_rna_compl)
  )
})

test_that("complement() returns correct complement value for ambiguous characters", {
  expect_equal(
    as.character(complement(sq_dna_2)),
    as.character(sq_dna_2_compl)
  )
})

# CANCELLING UPON DOUBLE USAGE ----
test_that("double use of complement() returns original value", {
  expect_identical(complement(complement(sq_dna)), sq_dna)
  expect_identical(complement(complement(sq_rna)), sq_rna)
  expect_identical(complement(complement(sq_dna_2)), sq_dna_2)
})
michbur/tidysq documentation built on April 1, 2022, 5:18 p.m.