context("Simulator ms")
test_that("parsing positions works", {
expect_equal(parse_ms_positions("positions: 0.0010 0.0474 0.3171"),
c(0.001, 0.0474, 0.3171))
expect_equal(parse_ms_positions("positions: 0.1 0.2 0.3 0.4 0.5"), 1:5 / 10)
expect_equal(parse_ms_positions("positions: 0.1"), 0.1)
expect_output(expect_error(parse_ms_positions("0.1 0.2 0.3")))
expect_output(expect_error(parse_ms_positions(" ")))
expect_output(expect_error(parse_ms_positions("segsites: 0")))
})
test_that("Parsing ms output works", {
sim_output <- tempfile("sim_output")
cat("ms 3 1 -t 1 -r 1 20 -T
30461 15911 34727
//
[2](2:0.865,(1:0.015,3:0.015):0.850);
[3](2:0.865,(1:0.015,3:0.015):0.850);
[4](2:1.261,(1:0.015,3:0.015):1.246);
[11](2:1.261,(1:0.015,3:0.015):1.246);
segsites: 5
positions: 0.2046 0.2234 0.2904 0.6209 0.9527
01100
10011
01100
//
[2](3:0.613,(1:0.076,2:0.076):0.537);
[18](3:0.460,(1:0.076,2:0.076):0.384);
segsites: 2
positions: 0.3718 0.8443
01
01
10
", file = sim_output)
output <- parse_ms_output(list(sim_output), 3, 2)
ss1 <- create_segsites(matrix(c(0, 1, 1, 0, 0,
1, 0, 0, 1, 1,
0, 1, 1, 0, 0), 3, 5, TRUE),
c(0.2046, 0.2234, 0.2904, 0.6209, 0.9527))
ss2 <- create_segsites(matrix(c(0, 0, 1, 1, 1, 0), 3, 2), c(0.3718, 0.8443))
trees1 <- c("[2](2:0.865,(1:0.015,3:0.015):0.850);",
"[3](2:0.865,(1:0.015,3:0.015):0.850);",
"[4](2:1.261,(1:0.015,3:0.015):1.246);",
"[11](2:1.261,(1:0.015,3:0.015):1.246);")
trees2 <- c("[2](3:0.613,(1:0.076,2:0.076):0.537);",
"[18](3:0.460,(1:0.076,2:0.076):0.384);")
expect_equal(output, list(seg_sites = list(ss1, ss2),
trees = list(trees1, trees2)))
expect_error(parse_ms_output(list(sim_output), 3, 1))
expect_error(parse_ms_output(list(sim_output), 3, 3))
output <- parse_ms_output(list(sim_output, sim_output), 3, 4)
expect_equal(output, list(seg_sites = list(ss1, ss2, ss1, ss2),
trees = list(trees1, trees2, trees1, trees2)))
output2 <- parse_ms_output(list(c(sim_output, sim_output)), 3, 4)
expect_equal(output, output2)
output <- parse_ms_output(list(c(sim_output, sim_output),
c(sim_output, sim_output)), 3, 8)
expect_equal(length(output$seg_sites), 8)
expect_equal(length(output$trees), 8)
expect_error(parse_ms_output(tempfile("test_ms_out"), 4, 4))
unlink(sim_output)
})
test_that("ms works with scientific notation", {
if (!has_ms()) skip("ms not installed")
ms <- get_simulator("ms")
model <- coal_model(5, 1, 1e8) + feat_recombination(1)
task <- ms$create_task(model, NULL, 1)
expect_true(grepl("100000000", task$get_arg("cmd")))
model <- coal_model(5, 1, 1000) + feat_recombination(1e8)
task <- ms$create_task(model, NULL, 1)
expect_true(grepl("100000000", task$get_arg("cmd")))
model <- coal_model(5, 1, 1000) + feat_mutation(1e8)
task <- ms$create_task(model, NULL, 1)
expect_true(grepl("100000000", task$get_arg("cmd")))
})
test_that("ms simulation works", {
if (!has_ms()) skip("ms not installed")
ms <- get_simulator("ms")
model <- coal_model(5, 10, 10) +
locus_averaged(5, 10) +
feat_mutation(1) +
feat_recombination(1) +
sumstat_seg_sites()
task <- ms$create_task(model, NULL, 1)
stats <- ms$simulate(model, task)
expect_is(stats, "list")
})
test_that("ms can simulate files", {
if (!has_ms()) skip("ms not installed")
ms <- get_simulator("ms")
folder <- tempfile("ms-filetest")
model <- coal_model(10, 1) +
feat_mutation(5) +
sumstat_file(folder)
task <- ms$create_task(model, NULL, 1)
stats <- ms$simulate(model, task)
expect_true(!is.null(stats$files))
unlink(stats$files)
unlink(folder, recursive = TRUE)
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.