Nothing
context("Basic multilocus genotype tests")
data(Pinf, package = "poppr")
data(Aeut, package = "poppr")
data(partial_clone, package = "poppr")
data(nancycats, package = "adegenet")
amlg <- mlg.vector(Aeut)
pmlg <- mlg.vector(partial_clone)
nmlg <- mlg.vector(nancycats)
strata(Aeut) <- other(Aeut)$population_hierarchy[-1]
aclone <- as.genclone(Aeut)
atab <- mlg.table(Aeut, plot = FALSE)
ptab <- mlg.table(partial_clone, plot = FALSE)
ntab <- mlg.table(nancycats, plot = FALSE)
sim <- adegenet::glSim(10, 1e2, ploidy = 2, parallel = FALSE)
lu <- function(x) length(unique(x))
test_that("multilocus genotype vector is same length as samples", {
expect_equal(length(amlg), nInd(Aeut))
expect_equal(length(pmlg), nInd(partial_clone))
expect_equal(length(nmlg), nInd(nancycats))
expect_equal(lu(amlg), mlg(Aeut, quiet = TRUE))
expect_equal(lu(pmlg), mlg(partial_clone, quiet = TRUE))
expect_equal(lu(nmlg), mlg(nancycats, quiet = TRUE))
})
test_that("subsetting and resetting MLGs works", {
pmlg <- mlg.vector(Pinf)
pres <- mlg.vector(Pinf, reset = TRUE)
fullmlg <- mlg(Pinf[loc = locNames(Pinf)[-c(1:5)]], quiet = TRUE)
realmlg <- mlg(
Pinf[loc = locNames(Pinf)[-c(1:5)], mlg.reset = TRUE],
quiet = TRUE
)
expect_equal(pmlg, Pinf@mlg[])
expect_false(identical(pmlg, pres))
expect_equal(Pinf[mlg.reset = TRUE]@mlg[], pres)
expect_gt(fullmlg, realmlg)
mll(Pinf) <- "original"
expect_equal(mll(mll.reset(Pinf, TRUE)), pres)
mll.custom(Pinf) <- paste("MLL", mll(Pinf))
cmll <- as.numeric(as.character(mll(mll.reset(Pinf, "custom"))))
comll <- as.numeric(as.character(mll(mll.reset(
Pinf,
c("custom", "original")
))))
expect_equal(cmll, pmlg)
expect_equal(comll, pres)
})
context("Basic clone correction tests")
test_that("clone correction works for specified levels and throws errors", {
skip_on_cran()
strata(aclone) <- other(aclone)[[1]][-1]
ac <- aclone
indNames(ac) <- rep("", nInd(ac))
expect_equal(nmll(aclone), 119L)
expect_equal(nInd(clonecorrect(aclone, ~Pop)), 120L)
expect_equal(nInd(clonecorrect(ac, ~Pop)), 120L) # no sample names
expect_equal(nInd(clonecorrect(aclone, 1L)), 120L) # works with numeric input
expect_equal(nInd(clonecorrect(aclone, ~ Pop / Subpop)), 141L) # with formula
expect_equal(nInd(clonecorrect(aclone, NA)), 119L) # with nothing
# Errors for unexpected behavior.
expect_error(clonecorrect(1), "1 is not")
expect_error(clonecorrect(aclone, ~ field / sample), "field, sample")
expect_error(clonecorrect(aclone, 1L:4L), "NA")
strata(ac) <- NULL
expect_warning(clonecorrect(ac), "Strata is not set for ac")
})
context("mlg.table tests")
test_that("multilocus genotype matrix matches mlg.vector and data", {
expect_equal(nrow(atab), nPop(Aeut))
expect_equal(nrow(ptab), nPop(partial_clone))
expect_equal(nrow(ntab), nPop(nancycats))
expect_equal(ncol(atab), mlg(Aeut, quiet = TRUE))
expect_equal(ncol(ptab), mlg(partial_clone, quiet = TRUE))
expect_equal(ncol(ntab), mlg(nancycats, quiet = TRUE))
expect_equal(sum(atab), nInd(Aeut))
expect_equal(sum(ptab), nInd(partial_clone))
expect_equal(sum(ntab), nInd(nancycats))
})
test_that("multilocus genotype matrix works for custom mlgs", {
pc <- as.genclone(partial_clone)
mll.levels(pc) <- LETTERS
expect_identical(LETTERS, colnames(mlg.table(pc, plot = FALSE)))
mll(pc) <- "original"
expect_identical(ptab, mlg.table(pc, plot = FALSE))
})
test_that("multilocus genotype matrix can utilize strata", {
pcount <- mlg.table(Pinf, strata = ~Country, plot = FALSE)
pcont <- mlg.table(Pinf, strata = ~Continent, plot = FALSE)
expect_equal(nrow(pcount), 4)
expect_equal(nrow(pcont), 2)
})
test_that("mlg.table can take a subset of sublist and exclude", {
skip_on_cran()
expect_warning(
{
nm <- mlg.table(
Pinf,
strata = ~Country,
sublist = 1:4,
blacklist = 3,
plot = FALSE
)
},
'exclude = 3',
fixed = TRUE
)
nomex <- mlg.table(
Pinf,
strata = ~Country,
sublist = 1:4,
exclude = 3,
plot = FALSE
)
expect_identical(nm, nomex)
expect_equal(nrow(nomex), 3)
expect_true(!"Mexico" %in% rownames(nomex))
expect_true(all(rownames(nomex) %in% popNames(setPop(Pinf, ~Country))))
})
test_that("the parameter bar is deprecated in mlg.table", {
skip_on_cran()
expect_warning(mlg.table(partial_clone, bar = FALSE))
})
context("mll and nmll function tests")
test_that("mll and nmll works for genind objects", {
expect_warning(atest <- mll(Aeut, "original"))
nAeut <- nmll(Aeut)
expect_equal(atest, amlg)
expect_equal(nAeut, lu(amlg))
})
test_that("mll and nmll works for genlight objects", {
expect_warning(atest <- mll(sim, "original"))
nAeut <- nmll(sim)
expect_equal(atest, 1:10)
expect_equal(nAeut, 10)
})
test_that("mll can convert a numeric mlg slot to MLG", {
expect_is(Pinf@mlg, "integer")
mll(Pinf) <- "original"
expect_is(Pinf@mlg, "MLG")
})
context("MLG class printing")
test_that("MLG class can print expected", {
mll(Pinf) <- "original"
expect_output(show(Pinf@mlg), "86 original mlgs.")
mll(Pinf) <- "custom"
expect_output(show(Pinf@mlg), "86 custom mlgs.")
mll(Pinf) <- "contracted"
expect_output(
show(Pinf@mlg),
"86 contracted mlgs with a cutoff of 0 based on the function diss.dist"
)
mll(Pinf) <- "original"
})
context("mlg.crosspop tests")
test_that("mlg.crosspop will work with subsetted genclone objects", {
strata(Aeut) <- other(Aeut)$population_hierarchy
agc <- as.genclone(Aeut)
Athena <- popsub(agc, "Athena")
setPop(Athena) <- ~Subpop
expected_output <- structure(
list(
MLG.13 = structure(c(1L, 1L), .Names = c("8", "9")),
MLG.23 = structure(c(1L, 1L), .Names = c("4", "6")),
MLG.24 = structure(c(1L, 1L), .Names = c("9", "10")),
MLG.32 = structure(c(1L, 1L), .Names = c("7", "9")),
MLG.52 = structure(c(1L, 1L), .Names = c("5", "9")),
MLG.63 = structure(c(1L, 1L), .Names = c("1", "5"))
),
.Names = c("MLG.13", "MLG.23", "MLG.24", "MLG.32", "MLG.52", "MLG.63")
)
expected_mlgout <- c(13, 23, 24, 32, 52, 63)
expect_equal(x <- mlg.crosspop(Athena, quiet = TRUE), expected_output)
expect_equal(y <- mlg.crosspop(Athena, indexreturn = TRUE), expected_mlgout)
expect_warning(
z <- mlg.crosspop(Athena, mlgsub = c(14, 2:5), quiet = TRUE),
"The following multilocus genotypes are not defined in this dataset: 2, 3, 4, 5"
)
})
test_that("mlg.crosspop can take sublist and exclude", {
skip_on_cran()
strata(Aeut) <- other(Aeut)$population_hierarchy
agc <- as.genclone(Aeut)
Athena <- popsub(agc, "Athena")
setPop(Athena) <- ~Subpop
expectation <- structure(
list(
MLG.13 = structure(c(1L, 1L), .Names = c("8", "9")),
MLG.23 = structure(c(1L, 1L), .Names = c("4", "6")),
MLG.24 = structure(c(1L, 1L), .Names = c("9", "10")),
MLG.32 = structure(c(1L, 1L), .Names = c("7", "9")),
MLG.52 = structure(c(1L, 1L), .Names = c("5", "9"))
),
.Names = c("MLG.13", "MLG.23", "MLG.24", "MLG.32", "MLG.52")
)
expect_warning(
{
bres <- mlg.crosspop(
Athena,
sublist = 1:10,
blacklist = "1",
quiet = TRUE
)
},
'exclude = "1"',
fixed = TRUE
)
expect_output(
show(mlg.crosspop(Athena, exclude = 1)),
"MLG.13: \\(2 inds\\) 8 9"
)
expect_output(
show(mlg.crosspop(Athena, exclude = "1")),
"MLG.13: \\(2 inds\\) 8 9"
)
expect_output(
show(mlg.crosspop(Athena, sublist = 1:10, exclude = "1")),
"MLG.13: \\(2 inds\\) 8 9"
)
expect_equivalent(
mlg.crosspop(Athena, sublist = 1:10, exclude = "1", quiet = TRUE),
expectation
)
expect_equivalent(bres, expectation)
})
test_that("mlg.crosspop can return a data frame", {
skip_on_cran()
df <- mlg.crosspop(aclone, df = TRUE, quiet = TRUE)
expect_is(df, "data.frame")
expect_equal(nrow(df), 2L)
expect_equal(ncol(df), 3L)
})
test_that("mlg.crosspop works with custom mlgs", {
skip_on_cran()
pc <- as.genclone(partial_clone)
mll.custom(pc) <- LETTERS[mll(pc)]
ROSEBUD <- c("R", "O", "S", "E", "B", "U", "D")
rosebud <- mlg.crosspop(pc, mlgsub = ROSEBUD, quiet = TRUE)
expect_is(rosebud, "list")
expect_equal(length(rosebud), nchar("rosebud"))
expect_equal(mlg.crosspop(pc, mlgsub = ROSEBUD, indexreturn = TRUE), ROSEBUD)
})
test_that("mlg.crosspop will throw an error when no populations are present", {
skip_on_cran()
expect_error(n1 <- mlg.crosspop(Aeut[pop = 1]))
expect_error(n2 <- mlg.crosspop(Aeut, sublist = 1))
})
test_that("mlg.crosspop will send a message and return NULL if no cross-population MLGs are detected", {
skip_on_cran()
expect_message(n <- mlg.crosspop(nancycats))
expect_null(n)
})
test_that("mlg.crosspop will handle strata", {
skip_on_cran()
sp <- mlg.crosspop(aclone, strata = ~Subpop, quiet = TRUE)
expect_equal(length(sp), 17L)
})
context("mlg.id tests")
test_that("mlg.id Aeut works", {
expected_output <- structure(
list(
`1` = "055",
`2` = c("101", "103"),
`3` = "111",
`4` = "112",
`5` = "110",
`6` = "102",
`7` = "020",
`8` = "007",
`9` = "068",
`10` = "069",
`11` = "073",
`12` = "075",
`13` = c("072", "080"),
`14` = c("074", "076", "077"),
`15` = "079",
`16` = c("004", "009"),
`17` = c("003", "008"),
`18` = "095",
`19` = "094",
`20` = c("022", "023", "024", "025", "027", "028", "029", "030", "031"),
`21` = "060",
`22` = "043",
`23` = c("038", "059"),
`24` = c("084", "090"),
`25` = "063",
`26` = "005",
`27` = "071",
`28` = "032",
`29` = "078",
`30` = "026",
`31` = c("089", "092"),
`32` = c("065", "081"),
`33` = "053",
`34` = "051",
`35` = c("046", "048", "050"),
`36` = c("045", "047"),
`37` = "088",
`38` = "087",
`39` = "056",
`40` = "091",
`41` = "082",
`42` = "006",
`43` = "083",
`44` = "013",
`45` = "017",
`46` = "085",
`47` = "061",
`48` = "062",
`49` = "066",
`50` = "064",
`51` = "015",
`52` = c("052", "086"),
`53` = "002",
`54` = "115",
`55` = "151",
`56` = "113",
`57` = "042",
`58` = "109",
`59` = c("057", "159"),
`60` = c("067", "070"),
`61` = "058",
`62` = "049",
`63` = c("001", "054"),
`64` = "096",
`65` = "040",
`66` = c("033", "034", "036", "039", "041"),
`67` = "037",
`68` = "035",
`69` = c("145", "146", "148", "149"),
`70` = c("124", "126", "127", "131", "133"),
`71` = "156",
`72` = c("152", "154"),
`73` = "116",
`74` = c("139", "140", "141"),
`75` = c("134", "135", "137", "142", "147"),
`76` = c("125", "162"),
`77` = c("160", "168", "170"),
`78` = c("169", "177"),
`79` = "175",
`80` = c(
"107",
"108",
"117",
"120",
"121",
"122",
"164",
"167",
"172",
"183"
),
`81` = c("130", "182"),
`82` = "099",
`83` = "100",
`84` = "114",
`85` = "157",
`86` = "098",
`87` = c("158", "171"),
`88` = c("123", "166"),
`89` = "118",
`90` = c("128", "163"),
`91` = c("104", "173"),
`92` = "132",
`93` = "010",
`94` = "011",
`95` = "180",
`96` = c("138", "144"),
`97` = c("181", "184", "185", "186"),
`98` = "143",
`99` = c("136", "165"),
`100` = "150",
`101` = c("174", "187"),
`102` = "176",
`103` = c("178", "179"),
`104` = "129",
`105` = "153",
`106` = "119",
`107` = "161",
`108` = "097",
`109` = "093",
`110` = "018",
`111` = "021",
`112` = "012",
`113` = "016",
`114` = "019",
`115` = "155",
`116` = "106",
`117` = "105",
`118` = "014",
`119` = "044"
),
.Names = c(
"1",
"2",
"3",
"4",
"5",
"6",
"7",
"8",
"9",
"10",
"11",
"12",
"13",
"14",
"15",
"16",
"17",
"18",
"19",
"20",
"21",
"22",
"23",
"24",
"25",
"26",
"27",
"28",
"29",
"30",
"31",
"32",
"33",
"34",
"35",
"36",
"37",
"38",
"39",
"40",
"41",
"42",
"43",
"44",
"45",
"46",
"47",
"48",
"49",
"50",
"51",
"52",
"53",
"54",
"55",
"56",
"57",
"58",
"59",
"60",
"61",
"62",
"63",
"64",
"65",
"66",
"67",
"68",
"69",
"70",
"71",
"72",
"73",
"74",
"75",
"76",
"77",
"78",
"79",
"80",
"81",
"82",
"83",
"84",
"85",
"86",
"87",
"88",
"89",
"90",
"91",
"92",
"93",
"94",
"95",
"96",
"97",
"98",
"99",
"100",
"101",
"102",
"103",
"104",
"105",
"106",
"107",
"108",
"109",
"110",
"111",
"112",
"113",
"114",
"115",
"116",
"117",
"118",
"119"
)
)
x <- mlg.id(Aeut)
Avec <- mlg.vector(Aeut)
expect_equal(lapply(x, as.integer), lapply(expected_output, as.integer))
expect_equal(length(x), lu(Avec))
expect_equivalent(sapply(x, length), as.vector(table(Avec)))
expect_equal(names(x[1]), "1")
})
test_that("mlg.id Pinf works", {
expected_output <- structure(
list(
`1` = structure("PiEC06", .Names = "09"),
`4` = structure("PiMX03", .Names = "19"),
`5` = structure("PiMX04", .Names = "20"),
`6` = structure("PiMXT01", .Names = "56"),
`7` = structure("PiPE03", .Names = "67"),
`8` = structure("PiPE01", .Names = "65"),
`10` = structure("PiPE07", .Names = "71"),
`11` = structure("PiPE06", .Names = "70"),
`12` = structure(c("PiPE10", "PiPE26"), .Names = c("74", "85")),
`13` = structure("PiMX01", .Names = "17"),
`14` = structure("PiEC02", .Names = "07"),
`15` = structure("PiPE04", .Names = "68"),
`17` = structure(
c("PiCO01", "PiCO03", "PiCO04"),
.Names = c("01", "03", "04")
),
`19` = structure("PiEC03", .Names = "08"),
`21` = structure("PiMX42", .Names = "47"),
`22` = structure("PiEC01", .Names = "06"),
`23` = structure("PiPE09", .Names = "73"),
`24` = structure("PiCO02", .Names = "02"),
`25` = structure("PiPE05", .Names = "69"),
`30` = structure("PiMX07", .Names = "23"),
`33` = structure("PiMX20", .Names = "34"),
`34` = structure(
c("PiMX48", "PiMX49", "PiMX50"),
.Names = c("53", "54", "55")
),
`35` = structure("PiPE13", .Names = "77"),
`36` = structure(
c("PiPE11", "PiPE12", "PiPE14"),
.Names = c("75", "76", "78")
),
`37` = structure("PiMX06", .Names = "22"),
`38` = structure("PiMX02", .Names = "18"),
`39` = structure("PiMX12", .Names = "26"),
`40` = structure("PiMXT06", .Names = "61"),
`41` = structure("PiMX19", .Names = "33"),
`42` = structure("PiMX17", .Names = "31"),
`45` = structure("PiMX13", .Names = "27"),
`46` = structure("PiMX24", .Names = "38"),
`47` = structure(c("PiPE02", "PiPE08"), .Names = c("66", "72")),
`50` = structure("PiMX23", .Names = "37"),
`51` = structure("PiMX10", .Names = "24"),
`52` = structure("PiMX29", .Names = "43"),
`53` = structure("PiMX05", .Names = "21"),
`54` = structure("PiCO05", .Names = "05"),
`55` = structure("PiMXT07", .Names = "62"),
`56` = structure("PiMX11", .Names = "25"),
`57` = structure("PiMX26", .Names = "40"),
`58` = structure("PiMX22", .Names = "36"),
`59` = structure("PiMX14", .Names = "28"),
`61` = structure("PiMX18", .Names = "32"),
`62` = structure("PiMX15", .Names = "29"),
`63` = structure(
c("PiPE22", "PiPE24", "PiPE25"),
.Names = c("81", "83", "84")
),
`68` = structure("PiPE23", .Names = "82"),
`69` = structure("PiEC10", .Names = "12"),
`71` = structure("PiPE21", .Names = "80"),
`72` = structure("PiPE20", .Names = "79"),
`74` = structure("PiEC12", .Names = "14"),
`75` = structure(c("PiEC13", "PiEC14"), .Names = c("15", "16")),
`77` = structure("PiMX28", .Names = "42"),
`79` = structure("PiEC11", .Names = "13"),
`80` = structure("PiMX16", .Names = "30"),
`83` = structure("PiEC08", .Names = "11"),
`84` = structure("PiEC07", .Names = "10"),
`93` = structure("PiMX30", .Names = "44"),
`94` = structure("PiMX41", .Names = "46"),
`95` = structure("PiMX27", .Names = "41"),
`96` = structure("PiMX43", .Names = "48"),
`97` = structure(
c("PiMX44", "PiMX45", "PiMX46", "PiMX47"),
.Names = c("49", "50", "51", "52")
),
`98` = structure("PiMX25", .Names = "39"),
`99` = structure("PiMX40", .Names = "45"),
`104` = structure("PiMXT02", .Names = "57"),
`105` = structure("PiMXT05", .Names = "60"),
`106` = structure("PiPE27", .Names = "86"),
`109` = structure("PiMXT03", .Names = "58"),
`110` = structure("PiMX21", .Names = "35"),
`115` = structure("PiMXT04", .Names = "59"),
`116` = structure("PiMXt48", .Names = "63"),
`117` = structure("PiMXt68", .Names = "64")
),
.Names = c(
"1",
"4",
"5",
"6",
"7",
"8",
"10",
"11",
"12",
"13",
"14",
"15",
"17",
"19",
"21",
"22",
"23",
"24",
"25",
"30",
"33",
"34",
"35",
"36",
"37",
"38",
"39",
"40",
"41",
"42",
"45",
"46",
"47",
"50",
"51",
"52",
"53",
"54",
"55",
"56",
"57",
"58",
"59",
"61",
"62",
"63",
"68",
"69",
"71",
"72",
"74",
"75",
"77",
"79",
"80",
"83",
"84",
"93",
"94",
"95",
"96",
"97",
"98",
"99",
"104",
"105",
"106",
"109",
"110",
"115",
"116",
"117"
)
)
x <- mlg.id(Pinf)
Pvec <- mlg.vector(Pinf)
expect_equal(x, expected_output)
expect_equal(length(x), lu(Pvec))
expect_equivalent(sapply(x, length), as.vector(table(Pvec)))
expect_equal(names(x[1]), "1")
})
context("mll.reset tests")
test_that("mll.reset works with non-MLG class slots", {
skip_on_cran()
Pinf@mlg <- Pinf@mlg[]
expect_is(Pinf@mlg, "integer")
expect_error(mll.reset(Pinf), "please")
Pinf <- mll.reset(Pinf, TRUE)
expect_is(Pinf@mlg, "MLG")
})
test_that("mll.reset will reset filtered MLGs", {
skip_on_cran()
mlg.filter(Pinf, dist = dist) <- 3
Pinf.res <- mll.reset(Pinf, "contracted")
expect_lt(lu(mll(Pinf)), lu(mll(Pinf.res)))
expect_equal(mll(Pinf, "original"), mll(Pinf.res, "contracted"))
})
test_that("mll.reset will reset subset genclone with no MLG class", {
skip_on_cran()
data(monpop)
expect_equal(suppressWarnings(monpop %>% nmll()), 264L)
expect_equal(
suppressWarnings(monpop[loc = 1:2, mlg.reset = TRUE] %>% nmll()),
14L
)
expect_equal(
suppressWarnings(monpop[loc = 1:2] %>% mll.reset(TRUE) %>% nmll()),
14L
)
})
context("mlg.filter tests")
test_that("multilocus genotype filtering functions correctly", {
skip_on_cran()
# amlg <- mlg.vector(Aeut)
# pmlg <- mlg.vector(partial_clone)
# nmlg <- mlg.vector(nancycats)
adist <- diss.dist(Aeut)
pdist <- diss.dist(partial_clone)
ndist <- diss.dist(nancycats)
afilt <- function(thresh = 0, d = adist) {
mlg.filter(Aeut, thresh, distance = d)
}
pfilt <- function(thresh = 0, d = pdist) {
mlg.filter(partial_clone, thresh, distance = d)
}
nfilt <- function(thresh = 0, d = ndist) {
mlg.filter(nancycats, thresh, distance = d)
}
# No clustering should happen if the threshold is set to 0
expect_equal(lu(amlg), lu(afilt(0)))
expect_equal(lu(pmlg), lu(pfilt(0)))
expect_equal(lu(nmlg), lu(nfilt(0)))
# All clusters should be merged for an arbitrarily large threshold
expect_equal(1, lu(afilt(1000L)))
expect_equal(1, lu(pfilt(1000L)))
expect_equal(1, lu(pfilt(1000L)))
# The different methods of passing distance should produce the same results
adis <- diss.dist(missingno(Aeut, "mean", quiet = TRUE))
suppressWarnings({
pdis <- diss.dist(missingno(partial_clone, "mean", quiet = TRUE))
ndis <- diss.dist(missingno(nancycats, "mean", quiet = TRUE))
expect_equal(
mlg.filter(Aeut, 0.3, missing = "mean", distance = adis),
mlg.filter(Aeut, 0.3, missing = "mean", distance = diss.dist)
)
expect_equal(
mlg.filter(Aeut, 0.3, missing = "mean", distance = adis),
mlg.filter(Aeut, 0.3, missing = "mean", distance = "diss.dist")
)
expect_equal(
mlg.filter(nancycats, 0.3, missing = "mean", distance = ndis),
mlg.filter(nancycats, 0.3, missing = "mean", distance = diss.dist)
)
expect_equal(
mlg.filter(nancycats, 0.3, missing = "mean", distance = ndis),
mlg.filter(nancycats, 0.3, missing = "mean", distance = "diss.dist")
)
expect_equal(
mlg.filter(partial_clone, 0.3, missing = "mean", distance = pdis),
mlg.filter(partial_clone, 0.3, missing = "mean", distance = diss.dist)
)
expect_equal(
mlg.filter(partial_clone, 0.3, missing = "mean", distance = pdis),
mlg.filter(partial_clone, 0.3, missing = "mean", distance = "diss.dist")
)
})
})
context("misc. mlg tests")
test_that("mlg functions require genind/genlight objects", {
skip_on_cran()
expect_error(mlg(1:10))
expect_error(mlg.id(1:10))
expect_error(mlg.table(1:10))
})
test_that("a value of 1 is returned for a single row genind object", {
skip_on_cran()
expect_output(pcres.gi <- mlg(partial_clone[1]), "###")
expect_equal(pcres.gi, 1L)
})
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.