library(testthat)
context("binSum")
library(PeakSegJoint)
test_that("binSum with negative chromStart", {
chromEnd <- 1:10
profile <- data.frame(chromStart=chromEnd-1L,
chromEnd,
count=1L)
bins <- binSum(profile,
bin.chromStart=-1L,
bin.size=3L,
n.bins=5L)
expect_equal(bins$count, c(2, 3, 3, 2))
})
test_that("binSum 1bp with constant 1 profile", {
profile <- data.frame(chromStart=0L,
chromEnd=10000L,
count=1L)
bins <- binSum(profile,
bin.chromStart=0L,
bin.size=1L,
n.bins=2000L)
expect_identical(bins$chromStart, 0:1999)
expect_identical(bins$chromEnd, 1:2000)
expect_identical(bins$count, rep(1, 2000))
expect_equal(bins$mean, rep(1, 2000))
})
test_that("binSum 2bp with constant 1 profile", {
profile <- data.frame(chromStart=0L,
chromEnd=10000L,
count=1L)
bins <- binSum(profile,
bin.chromStart=0L,
bin.size=2L,
n.bins=2000L)
expect_identical(bins$chromStart, as.integer(seq(0, by=2, l=2000)))
expect_identical(bins$chromEnd, as.integer(seq(2, by=2, l=2000)))
expect_identical(bins$count, rep(2, 2000))
expect_equal(bins$mean, rep(1, 2000))
})
test_that("binSum 3bp with non-constant profile", {
## bins of size 3bp.
## -1- -3- -5-
## -2- -4-
## 123456789012345 base index.
## --2---
## --1-
## --0-------
## Coverage profile.
profile <- data.frame(chromStart=as.integer(c(0, 6, 10)),
chromEnd=as.integer(c(6, 10, 10000)),
count=as.integer(c(2, 1, 0)))
bins <- binSum(profile,
bin.chromStart=0L,
bin.size=3L,
n.bins=2000L)
expect_identical(bins$chromStart, as.integer(seq(0, by=3, l=2000)))
expect_identical(bins$chromEnd, as.integer(seq(3, by=3, l=2000)))
expected.total <- rep(0, 2000)
expected.total[1:4] <- c(6, 6, 3, 1)
expect_identical(bins$count, expected.total)
expected.mean <- expected.total/3
expect_equal(bins$mean, expected.mean)
})
test_that("binSum 3bp with non-constant profile + 1000", {
## bins of size 3bp.
## -1- -3- -5-
## -2- -4-
## 123456789012345 base index + 1000.
## --2---
## --1-
## --0-------
## Coverage profile.
profile <- data.frame(chromStart=as.integer(c(0, 1000, 1006, 1010)),
chromEnd=as.integer(c(1000, 1006, 1010, 10000)),
count=as.integer(c(0, 2, 1, 0)))
bins <- binSum(profile,
bin.chromStart=1000L,
bin.size=3L,
n.bins=2000L)
expect_identical(bins$chromStart, as.integer(seq(1000, by=3, l=2000)))
expect_identical(bins$chromEnd, as.integer(seq(1003, by=3, l=2000)))
expected.total <- rep(0, 2000)
expected.total[1:4] <- c(6, 6, 3, 1)
expect_identical(bins$count, expected.total)
expected.mean <- expected.total/3
expect_equal(bins$mean, expected.mean)
})
test_that("binSum returns short data.frame if coverage ends", {
profile <- data.frame(chromStart=as.integer(c(0, 100)),
chromEnd=as.integer(c(100, 200)),
count=as.integer(c(10, 5)))
bins <- binSum(profile,
bin.chromStart=0L,
bin.size=10L,
n.bins=10L)
expect_equal(bins$mean, rep(10, 10))
bins <- binSum(profile,
bin.chromStart=0L,
bin.size=10L,
n.bins=20L)
expect_equal(bins$mean, rep(c(10, 5), each=10))
bins <- binSum(profile,
bin.chromStart=0L,
bin.size=10L,
n.bins=30L)
expect_equal(bins$mean, rep(c(10, 5), each=10))
bins <- binSum(profile,
bin.chromStart=0L,
bin.size=30L,
n.bins=10L)
expect_equal(bins$mean,
c(10, 10, 10, 200/30, 5, 5, 100/30))
expect_identical(bins$chromStart,
as.integer(c(0, 30, 60, 90, 120, 150, 180)))
expect_identical(bins$chromEnd,
as.integer(c(30, 60, 90, 120, 150, 180, 210)))
})
test_that("chromEnd <= chromStart is an error", {
bad <- data.frame(chromStart=as.integer(c(0, 10)),
chromEnd=as.integer(c(10, 5)),
count=0L)
expect_error({
binSum(bad, 0L, 30L, 10L)
}, "chromStart not less than chromEnd")
})
test_that("chromStart[i] < chromEnd[i-1] is an error", {
bad <- data.frame(chromStart=as.integer(c(0, 10)),
chromEnd=as.integer(c(15, 20)),
count=1L)
expect_error({
binSum(bad, 0L, 5L, 4L)
}, "chromStart before previous chromEnd")
})
test_that("gaps are treated as counts of 0", {
ok <- data.frame(chromStart=as.integer(c(0, 15)),
chromEnd=as.integer(c(10, 20)),
count=as.integer(c(1, 10)))
by2 <- binSum(ok, 0L, 2L, 10L)
expect_equal(by2$count, c(2, 2, 2, 2, 2,
0, 0, 10, 20, 20))
by3 <- binSum(ok, 0L, 3L, 7L)
expect_equal(by3$count, c(3, 3, 3, 1, 0, 30, 20))
by5 <- binSum(ok, 0L, 5L, 4L)
expect_equal(by5$count, c(5, 5, 0, 50))
by10 <- binSum(ok, 0L, 10L, 2L)
expect_equal(by10$count, c(10, 50))
big <- binSum(ok, 0L, 100L, 1L)
expect_equal(big$count, 60L)
two <- binSum(ok, 0L, 15L, 2L)
expect_equal(two$count, c(10, 50))
small <- binSum(ok, 0L, 16L, 2L)
expect_equal(small$count, c(20, 40))
})
test_that("no segfault", {
data(H3K36me3.TDH.other.chunk1)
some.counts <-
subset(H3K36me3.TDH.other.chunk1$counts,
43100000 < chromEnd & chromStart < 43205000)
param.values <-
c(2, 3, 5, 10, 15, 20, 25, 30, 50, 75, 100, 125, 150,
200, 300, 400, 500, 600)
for(param in param.values){
param.name <- paste(param)
param.int <- as.integer(param)
fit <- PeakSegJointHeuristic(some.counts, param.int)
}
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.