tests/testthat/test-read-write-fasta.R

context("Read and write FASTA format")

test_that("Read/write fasta works with single sequence", {
  test <- read_fasta("example_fasta_single.fasta")
  expect_s3_class(test, "bioseq_dna")
  expect_length(test, 1L)
  expect_equal(as.numeric(nchar(test)), 1231L)
  #expect_named(test, "HSBGPG Human gene for bone gla protein (BGP)")

  test_file <- tempfile(fileext = ".fasta")
  write_fasta(test, file = test_file)
  test_reread <- read_fasta(test_file)
  expect_equal(test, test_reread)
})

test_that("Read/write fasta works with multiple sequences", {
  test <- read_fasta("example_fasta_multi.fasta")
  expect_s3_class(test, "bioseq_dna")
  expect_length(test, 3L)
  expect_equal(as.numeric(nchar(test)), c(1231L, 1020L, 44L))
  #expect_named(test, c("HSBGPG Human gene for bone gla protein (BGP)",
  #                     "HSGLTH1 Human theta 1-globin gene",
  #                     "Fragilaria vaucheriae rbcL extract"))

  test_file <- tempfile(fileext = ".fasta")
  write_fasta(test, file = test_file)
  test_reread <- read_fasta(test_file)
  expect_equal(test, test_reread)
})


test_that("Read/write fasta works with > character in sequence names", {
  test <- read_fasta("example_fasta_multi_chevron.fasta")
  expect_s3_class(test, "bioseq_dna")
  expect_length(test, 3L)
  expect_equal(as.numeric(nchar(test)), c(1231L, 1020L, 44L))
  test_file <- tempfile(fileext = ".fasta")
  write_fasta(test, file = test_file)
  test_reread <- read_fasta(test_file)
  expect_equal(test, test_reread)
})


test_that("Read/write fasta works with header", {
  test <- read_fasta("example_fasta_header.fasta")
  expect_s3_class(test, "bioseq_dna")
  expect_length(test, 2L)
  expect_equal(as.numeric(nchar(test)), c(1231L, 1020L))
  #expect_named(test, c("HSBGPG Human gene for bone gla protein (BGP)",
  #                     "HSGLTH1 Human theta 1-globin gene"))

  test_file <- tempfile(fileext = ".fasta")
  write_fasta(test, file = test_file)
  test_reread <- read_fasta(test_file)
  expect_equal(test, test_reread)
})


test_that("Read/write fasta works with protein sequence", {
  test <- read_fasta("example_fasta_protein.fasta", type = "AA")
  expect_s3_class(test, "bioseq_aa")
  expect_length(test, 1L)
  expect_equal(as.numeric(nchar(test)), 223L)
  #expect_named(test, "sp|P33049|CASA2_CAPHI Alpha-S2-casein")

  test_file <- tempfile(fileext = ".fasta")
  write_fasta(test, file = test_file)
  test_reread <- read_fasta(test_file, type = "AA")
  expect_equal(test, test_reread)
})


test_that("Read/write fasta works with RNA", {
  test <- read_fasta("example_fasta_RNA.fasta", type = "RNA")
  expect_s3_class(test, "bioseq_rna")
  expect_length(test, 1L)
  expect_equal(as.numeric(nchar(test)), 12L)
  #expect_named(test, "RNA sequence")

  test_file <- tempfile(fileext = ".fasta")
  write_fasta(test, file = test_file)
  test_reread <- read_fasta(test_file, type = "RNA")
  expect_equal(test, test_reread)
})


test_that("Write fasta raises warning with NA ", {
  test <- read_fasta("example_fasta_multi.fasta")
  test[2] <- NA
  test_file <- tempfile(fileext = ".fasta")
  expect_warning(write_fasta(test, file = test_file))
  test_reread <- read_fasta(test_file)
  expect_length(test_reread, 2)
})


test_that("Read/write fasta works with block and line length arguments", {
  test <- read_fasta("example_fasta_multi.fasta")

  # Defaults
  test_file <- tempfile(fileext = ".fasta")
  write_fasta(test, file = test_file)
  test_reread <- read_fasta(test_file)
  expect_equal(test, test_reread)

  # Other values
  test_file <- tempfile(fileext = ".fasta")
  write_fasta(test, file = test_file, line_length = 100, block_length = 10)
  test_reread <- read_fasta(test_file)
  expect_equal(test, test_reread)

  # Same values
  test_file <- tempfile(fileext = ".fasta")
  write_fasta(test, file = test_file, line_length = 12, block_length = 12)
  test_reread <- read_fasta(test_file)
  expect_equal(test, test_reread)

  # Infinite values
  test_file <- tempfile(fileext = ".fasta")
  write_fasta(test, file = test_file, line_length = Inf, block_length = Inf)
  test_reread <- read_fasta(test_file)
  expect_equal(test, test_reread)

  # Error non-multiple values
  test_file <- tempfile(fileext = ".fasta")
  expect_error(
    write_fasta(test, file = test_file, line_length = 99, block_length = 10),
    "multiple"
  )

  # Error blocks too large
  test_file <- tempfile(fileext = ".fasta")
  expect_error(
    write_fasta(test, file = test_file, line_length = 100, block_length = 10000),
    "higher")
})

Try the bioseq package in your browser

Any scripts or data that you put into this service are public.

bioseq documentation built on Sept. 6, 2022, 5:07 p.m.