tests/testthat/test_complement.r

test_that("complement with covering interval", {
  genome <- tibble::tribble(
    ~chrom, ~size,
    "chr1", 500
  )
  bed <- tibble::tribble(
    ~chrom, ~start, ~end,
    "chr1", 0, 500
  )
  res <- bed_complement(bed, genome)
  expect_equal(nrow(res), 0)
})

test_that("complement with middle interval", {
  genome <- tibble::tribble(
    ~chrom, ~size,
    "chr1", 500
  )
  bed <- tibble::tribble(
    ~chrom, ~start, ~end,
    "chr1", 100, 200
  )
  expect <- tibble::tribble(
    ~chrom, ~start, ~end,
    "chr1", 0, 100,
    "chr1", 200, 500
  )
  res <- bed_complement(bed, genome)
  expect_true(all(res == expect))
})

test_that("complement adds final interval", {
  genome <- tibble::tribble(
    ~chrom, ~size,
    "chr1", 500
  )
  bed <- tibble::tribble(
    ~chrom, ~start, ~end,
    "chr1", 0, 50,
    "chr1", 100, 200
  )
  expect <- tibble::tribble(
    ~chrom, ~start, ~end,
    "chr1", 50, 100,
    "chr1", 200, 500
  )
  res <- bed_complement(bed, genome)
  expect_true(all(res == expect))
})

test_that("multiple chroms", {
  genome <- tibble::tribble(
    ~chrom, ~size,
    "chr1", 500,
    "chr2", 500
  )
  bed <- tibble::tribble(
    ~chrom, ~start, ~end,
    "chr1", 100, 500,
    "chr2", 100, 500
  )
  expect <- tibble::tribble(
    ~chrom, ~start, ~end,
    "chr1", 0, 100,
    "chr2", 0, 100
  )
  res <- bed_complement(bed, genome)
  expect_true(all(res == expect))
})

test_that("multiple chroms, chr1 is covered", {
  genome <- tibble::tribble(
    ~chrom, ~size,
    "chr1", 500,
    "chr2", 500
  )
  bed <- tibble::tribble(
    ~chrom, ~start, ~end,
    "chr1", 0, 500,
    "chr2", 100, 500
  )
  expect <- tibble::tribble(
    ~chrom, ~start, ~end,
    "chr2", 0, 100
  )
  res <- bed_complement(bed, genome)
  expect_true(all(res == expect))
})

test_that("record exceeds chrom length", {
  genome <- tibble::tribble(
    ~chrom, ~size,
    "chr1", 100
  )
  bed <- tibble::tribble(
    ~chrom, ~start, ~end,
    "chr1", 90, 110
  )
  expect <- tibble::tribble(
    ~chrom, ~start, ~end,
    "chr1", 0, 90
  )
  res <- bed_complement(bed, genome)
  expect_true(all(res == expect))
})

test_that("test complement only on left side", {
  genome <- tibble::tribble(
    ~chrom, ~size,
    "chr1", 100
  )
  bed <- tibble::tribble(
    ~chrom, ~start, ~end,
    "chr1", 90, 100
  )
  expect <- tibble::tribble(
    ~chrom, ~start, ~end,
    "chr1", 0, 90
  )
  res <- bed_complement(bed, genome)
  expect_true(all(res == expect))
})

test_that("overlapping intervals", {
  genome <- tibble::tribble(
    ~chrom, ~size,
    "chr1", 100
  )
  bed <- tibble::tribble(
    ~chrom, ~start, ~end,
    "chr1", 10, 100,
    "chr1", 20, 80
  )
  expect <- tibble::tribble(
    ~chrom, ~start, ~end,
    "chr1", 0, 10
  )
  res <- bed_complement(bed, genome)
  expect_true(all(res == expect))
})

test_that("starting intervals are complemented (#78)", {
  genome <- tibble::tribble(
    ~chrom, ~size,
    "chr1", 100
  )
  bed <- tibble::tribble(
    ~chrom, ~start, ~end,
    "chr1", 0, 20
  )
  res <- bed_complement(bed, genome)
  expect_equal(nrow(res), 1)
  expect_equal(res$start, 20)
  expect_equal(res$end, 100)
})

test_that("non-overlapping genome chroms are in output (#78)", {
  genome <- tibble::tribble(
    ~chrom, ~size,
    "chr1", 100,
    "chr2", 100
  )
  bed <- tibble::tribble(
    ~chrom, ~start, ~end,
    "chr1", 10, 100
  )
  expected <- tibble::tribble(
    ~chrom, ~start, ~end,
    "chr1", 0, 10,
    "chr2", 0, 100
  )
  res <- bed_complement(bed, genome)
  expect_true(all(res == expected))
})

test_that("`x` intervals not in genome are ignored (#78)", {
  genome <- tibble::tribble(
    ~chrom, ~size,
    "chr1", 500
  )
  bed <- tibble::tribble(
    ~chrom, ~start, ~end,
    "chr2", 10, 100
  )
  expected <- tibble::tribble(
    ~chrom, ~start, ~end,
    "chr1", 0, 500
  )
  res <- bed_complement(bed, genome)
  expect_true(all(res == expected))
})

# from https://github.com/arq5x/bedtools2/blob/master/test/complement/test-complement.sh
test_that("ends are covered", {
  genome <- tibble::tribble(
    ~chrom, ~size,
    "chr1", 20
  )
  bed <- tibble::tribble(
    ~chrom, ~start, ~end,
    "chr1", 0, 1,
    "chr1", 19, 20
  )
  expected <- tibble::tribble(
    ~chrom, ~start, ~end,
    "chr1", 1, 19
  )
  res <- bed_complement(bed, genome)
  expect_true(all(res == expected))
})

test_that("entirety is covered", {
  genome <- tibble::tribble(
    ~chrom, ~size,
    "chr1", 20
  )
  bed <- tibble::tribble(
    ~chrom, ~start, ~end,
    "chr1", 0, 20
  )
  res <- bed_complement(bed, genome)
  expect_true(nrow(res) == 0)
})

test_that("nothing is covered", {
  genome <- tibble::tribble(
    ~chrom, ~size,
    "chr1", 20,
    "chr2", 20
  )
  bed <- tibble::tribble(
    ~chrom, ~start, ~end,
    "chr2", 0, 20
  )
  expected <- tibble::tribble(
    ~chrom, ~start, ~end,
    "chr1", 0, 20
  )
  res <- bed_complement(bed, genome)
  expect_true(all(res == expected))
})

test_that("Issue #356", {
  genome <- tibble::tribble(
    ~chrom, ~size,
    "chr1", 249250621
  )
  bed <- tibble::tribble(
    ~chrom, ~start, ~end, ~name,
    "chr1", 0, 10000, "telomere"
  )
  expected <- tibble::tribble(
    ~chrom, ~start, ~end,
    "chr1", 10000, 249250621
  )
  res <- bed_complement(bed, genome)
  expect_true(all(res == expected))
})
jayhesselberth/valr documentation built on April 8, 2024, 12:32 p.m.