genome <- tibble::tribble( ~chrom , ~size , "chr1" , 1000 , "chr2" , 1000 ) x <- tibble::tribble( ~chrom , ~start , ~end , "chr1" , 50 , 75 , "chr1" , 250 , 400 , "chr1" , 500 , 600 ) y <- tibble::tribble( ~chrom , ~start , ~end , "chr1" , 100 , 200 , "chr1" , 200 , 800 ) bed_projection(x, y, genome) bed_projection(x, y, genome, by_chrom = TRUE) test_that("basic projection test works", { # compare output to pbinom( )function # 2 of 3 hits, 7 of 10 chance # 1- pbinom because pval > .5 exp <- 1 - pbinom(2, 3, 7 / 10) res <- bed_projection(x, y, genome) expect_equal(res$p.value, exp) }) test_that("projection per chromosome works (by_chrom = TRUE)", { genome <- tibble::tribble( ~chrom , ~size , "chr1" , 2000 , "chr2" , 2000 ) x <- tibble::tribble( ~chrom , ~start , ~end , "chr1" , 100 , 200 , "chr1" , 250 , 400 , "chr1" , 500 , 600 , "chr1" , 1000 , 2000 , "chr2" , 100 , 200 ) y <- tibble::tribble( ~chrom , ~start , ~end , "chr1" , 150 , 175 , "chr1" , 525 , 575 , "chr1" , 1100 , 1200 , "chr1" , 1400 , 1600 , "chr2" , 100 , 1500 ) res <- bed_projection(x, y, genome, by_chrom = TRUE) expect_true(all(c("chr1", "chr2") %in% res$chrom)) }) test_that("report significant when intervals are underrepresented, .lower_tail = TRUE", { sig <- pbinom(0, 4, .7) genome <- tibble::tribble( ~chrom , ~size , "chr1" , 1000 , "chr2" , 1000 ) x <- tibble::tribble( ~chrom , ~start , ~end , "chr1" , 10 , 20 , "chr1" , 25 , 40 , "chr1" , 50 , 60 , "chr1" , 100 , 150 ) y <- tibble::tribble( ~chrom , ~start , ~end , "chr1" , 200 , 275 , "chr1" , 525 , 575 , "chr1" , 200 , 900 ) res <- bed_projection(x, y, genome) expect_true(res$lower_tail == TRUE) expect_true(res$p.value < .5) expect_true(res$p.value == sig) }) test_that("report significant when intervals are overrepresented, .lower_tail = FALSE", { sig <- 1 - pbinom(4, 4, .7) genome <- tibble::tribble( ~chrom , ~size , "chr1" , 1000 , "chr2" , 1000 ) x <- tibble::tribble( ~chrom , ~start , ~end , "chr1" , 200 , 225 , "chr1" , 250 , 400 , "chr1" , 500 , 600 , "chr1" , 300 , 350 ) y <- tibble::tribble( ~chrom , ~start , ~end , "chr1" , 200 , 275 , "chr1" , 525 , 575 , "chr1" , 200 , 900 ) res <- bed_projection(x, y, genome) expect_true(res$lower_tail == FALSE) expect_true(res$p.value < .5) expect_true(res$p.value == sig) })