Nothing
context("meiosis")
test_that("create_parent works", {
expected_p1 <- list(mat=list(alleles=1L, locations=100.0),
pat=list(alleles=1L, locations=100.0))
expect_equal(create_parent(100, 1), expected_p1)
expected_p2 <- list(mat=list(alleles=2L, locations=100.0),
pat=list(alleles=2L, locations=100.0))
expect_equal(create_parent(100, 2), expected_p2)
expected_f1 <- list(mat=list(alleles=1L, locations=100.0),
pat=list(alleles=2L, locations=100.0))
expect_equal(create_parent(100, 1:2), expected_f1)
# numeric alleles converted to integers
expect_equal(create_parent(100, c(1.9, 2.9)), expected_f1)
# non-numeric alleles not allowed
expect_error(create_parent(100, "a"))
# can't have more than 2 alleles
expect_error(create_parent(100, 1:3))
# must have at least 1 allele
expect_error(create_parent(100, NULL))
expect_error(create_parent(100, numeric(0)))
})
test_that("check_individual works", {
expected_p1 <- list(mat=list(alleles=1L, locations=100.0),
pat=list(alleles=1L, locations=100.0))
expected_p2 <- list(mat=list(alleles=2L, locations=100.0),
pat=list(alleles=2L, locations=100.0))
expected_f1 <- list(mat=list(alleles=1L, locations=100.0),
pat=list(alleles=2L, locations=100.0))
# should be clean
expect_true(check_individual(expected_p1))
expect_true(check_individual(expected_p2))
expect_true(check_individual(expected_f1))
# no data
expect_error(check_individual(NULL))
expect_error(check_individual(list(mat=NULL, pat=NULL)))
# alleles not integers
z <- list(mat=list(alleles=1, locations=100),
pat=list(alleles=2, locations=100))
expect_error(check_individual(z))
z <- list(mat=list(alleles="a", locations=100),
pat=list(alleles="b", locations=100))
expect_error(check_individual(z))
# wrong orders
z <- list(mat=list(locations=100, alleles=1L),
pat=list(alleles=1L, locations=100))
expect_error(check_individual(z))
z <- list(mat=list(alleles=1L, locations=100),
pat=list(locations=100, alleles=1L))
expect_error(check_individual(z))
z <- list(pat=list(alleles=2L, locations=100),
mat=list(alleles=1L, locations=100))
expect_error(check_individual(z))
# locations not in order
z <- list(mat=list(alleles=c(2L, 1L), locations=c(5, 100)),
pat=list(alleles=c(1L, 2L), locations=c(100, 85)))
expect_error(check_individual(z))
z <- list(mat=list(alleles=c(2L, 1L), locations=c(500, 100)),
pat=list(alleles=c(1L, 2L), locations=c(100, 105)))
expect_error(check_individual(z))
})
test_that("simulations of meiosis and crosses work", {
# these are all rather contrived, but it's a start
seed <- 79251223
set.seed(seed)
expected <- c(36.1079982714728, 51.9751604413614, 204.360923892818)
expect_equal(sim_crossovers(300, 10, 0.3), expected)
allele <- ifelse(runif(1) < 0.5, 1L, 2L)
expect_equal(allele, 1L)
another_set <- sim_crossovers(300, 3, 0.01)
another_allele <- ifelse(runif(1) < 0.5, 1L, 2L)
expect_equal(another_allele, 2L)
p1 <- create_parent(300, 1)
p2 <- create_parent(300, 2)
f1 <- cross(p1, p2)
expect_equal(create_parent(300, 1:2), f1)
set.seed(seed)
expected2 <- list(alleles=c(1L, 2L, 1L, 2L), locations=c(expected, 300))
expect_equal(sim_meiosis(f1, m=10, p=0.3), expected2)
expected3 <- list(alleles=c(2L, 1L, 2L), locations=c(another_set, 300))
expect_equal(sim_meiosis(f1, m=3, p=0.01), expected3)
set.seed(seed)
f2 <- cross(f1, f1, m=10, p=0.3)
expected <- list(mat=expected2,
pat=list(alleles=c(1L, 2L, 1L),
locations=c(22.7139970986173, 234.89673093427, 300)))
expect_equal(f2, expected)
set.seed(seed)
junk <- sim_meiosis(f1, m=10, p=0.3)
f2 <- cross(f1, f1, m=3, p=0.01)
expected <- list(mat=expected3,
pat=list(alleles=c(2L, 1L, 2L, 1L),
locations=c(72.8879569564015, 194.954296317883, 285.253091622144, 300)))
expect_equal(f2, expected)
set.seed(seed)
p1 <- create_parent(300, 1:2)
p2 <- create_parent(300, 3:4)
f1a <- cross(p1, p2)
f2a <- cross(p1, p2)
sib <- cross(f1a, f2a)
expected <- list(mat=list(alleles=c(4L, 3L, 2L, 3L, 2L, 1L, 4L),
locations=c(113.656340399757,
119.926706166007, 151.954430225305, 188.945353589952,
214.686310663819, 242.297911760397, 300)),
pat=list(alleles=c(4L, 3L, 4L, 3L, 4L),
locations=c(130.161284795031, 178.185045230202, 224.519506352954,
250.761620071717, 300)))
expect_equal(sib, expected)
})
test_that("average no. crossovers match expectation", {
set.seed(82271836)
tol <- 0.01
n <- 10000
x <- replicate(n, sim_crossovers(L=100, m=0, p=0))
expect_equal(mean(sapply(x, length)), 1, tolerance=tol)
Lstar <- calc_Lstar(100, 0, 0)
x <- replicate(n, sim_crossovers(L=100, m=0, p=0, obligate_chiasma=TRUE, Lstar=Lstar))
expect_equal(mean(sapply(x, length)), 1, tolerance=tol)
x <- replicate(n, sim_crossovers(L=100, m=1, p=0))
expect_equal(mean(sapply(x, length)), 1, tolerance=tol)
Lstar <- calc_Lstar(100, 1, 0)
x <- replicate(n, sim_crossovers(L=100, m=1, p=0, obligate_chiasma=TRUE, Lstar=Lstar))
expect_equal(mean(sapply(x, length)), 1, tolerance=tol)
set.seed(82271836)
x <- replicate(n, sim_crossovers(L=100, m=10, p=0))
expect_equal(mean(sapply(x, length)), 1, tolerance=tol)
Lstar <- calc_Lstar(100, 10, 0)
x <- replicate(n, sim_crossovers(L=100, m=10, p=0, obligate_chiasma=TRUE, Lstar=Lstar))
expect_equal(mean(sapply(x, length)), 1, tolerance=tol)
x <- replicate(n, sim_crossovers(L=100, m=10, p=0.1))
expect_equal(mean(sapply(x, length)), 1, tolerance=tol)
Lstar <- calc_Lstar(100, 10, 0.1)
x <- replicate(n, sim_crossovers(L=100, m=10, p=0.1, obligate_chiasma=TRUE, Lstar=Lstar))
expect_equal(mean(sapply(x, length)), 1, tolerance=tol)
})
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.