# example from docu (man file):
# T cells are CD3E+
obj <- rule(simulated_umis, "T", "CD3E", ">", .1)
# T cells are MS4A1-
obj <- rule(obj, "T", "MS4A1", "<", 1)
# Tregs are a subset of T cells:
obj <- rule(obj, "Treg", "FOXP3", ">", .1, parent="T")
test_that("rule Docu example works", {
expect_equal(tabulate(classify(obj, c("T", "Treg"))),
c(445, 42, 1413))
})
test_that("mixing CP10K and fractions works", {
obj2 <- rule(obj, "T", "MS4A1", "<", 1e-4, use_CP10K = FALSE)
expect_equal(classify(obj),
classify(obj2))
})
obj_min <- list(raw=t(matrix(rpois(12, .5),ncol=3)), embed=data.frame(u1=1:4, u2=4:1))
test_that("rule checks whether its inputs are NULL in a healthy way", {
null_error <- "rule does not accept NULL input for arguments: obj, class, feature and threshold."
expect_error( rule(obj=NULL, class = "a", feature="b", threshold=1), null_error )
expect_error( rule(obj=obj_min, class = NULL, feature="b", threshold=1), null_error )
expect_error( rule(obj=obj_min, class = "a", feature=NULL, threshold=1), null_error )
expect_error( rule(obj=obj_min, class = "a", feature="b", threshold=NULL),null_error )
})
test_that("rule verifies its inputs are of expected class", {
# correct classes give no error:
# I'm not testing this currently, because the obj structure is still changing.
# a wrong class in the input arguments gives error:
class_error <- "^Wrong format"
expect_error( rule(obj=obj_min, class = 42, feature="b", threshold=1),
"^class must be a single string")
expect_error( rule(obj=obj_min, class = "a", feature=42, threshold=1),
"^feature must be a single string")
expect_error( rule(obj=obj_min, class = "a", feature="b", threshold=1, operator=42),
"^operator must be a single string")
expect_error( rule(obj=obj_min, class = "a", feature="b", threshold="forty-two"),
"^threshold must be a single number")
expect_error( rule(obj=obj_min, class = "a", feature="b", threshold=42, parent=5),
"^parent must be NULL or a single string")
# currently I don't check obj:
# expect_error( rule(obj="lol", class = "a", feature="b", threshold=1), class_error )
})
test_that("rule has sanity checks in place.", {
expect_error( rule(obj=obj_min, class = "a", feature="b", t=.42, parent="a"),
"Class and parent cannot be the same.")
})
test_that("rule adds rules as intended", {
hasT <- rule(obj=simulated_umis, class="T", feature="CD3E", operator=">", threshold=42)
# class can't be added twice:
hasT <- rule(obj=hasT, class="T", feature="CD3E", operator=">", threshold=42)
expect_equal(hasT$classes,
data.frame(class="T", parent="..root.."))
hasB <- rule(obj=hasT, class="B", feature="MS4A1", operator="<", threshold=42)
hasM <- rule(obj=hasB, class="M", feature="MS4A1", operator="<", threshold=42)
# parent can be changed in retrospect:
hasM <- rule(obj=hasM, class="M", feature="MS4A1", operator="<", threshold=42,
parent="B")
expect_equal(hasM$classes, data.frame(class=c("T", "B", "M"),
parent=c("..root..","..root..", "B")))
})
test_that("rule can assign same feature to different classes.", {
obj <- simulated_umis
obj <- rule(obj, "T", "CD3E", ">", 42)
obj <- rule(obj, "B", "MS4A1",">", 42)
obj <- rule(obj, "B", "CD3E", "<", 42)
expect_equal(obj$rules,
data.frame(
class=c("T","B","B"),
feature= c("CD3E", "MS4A1", "CD3E"),
operator=c(">",">","<"),
threshold=42e-4 # e-4 makes it resemble internal CP10K value
))
})
test_that("rule moves modified rule to position of most recent rule.", {
x <- simulated_umis
x <- rule(x, "T", "CD3E", ">", 42)
x <- rule(x, "B", "MS4A1",">", 42)
x <- rule(x, "Treg", "FOXP3",">", 42, parent="T")
x <- rule(x, "T", "CD3E", "<", 41)
expect_equal(x$rules$class,
c("B", "Treg", "T")
)
})
test_that("Existing classes and existing features are handled correctly", {
hasT <- rule(obj=simulated_umis, class="T", feature="CD3E", operator="<",
threshold=9001)
hasT <- rule(obj=hasT, class="T", feature="CD3E", operator=">",
threshold=42)
expect_equal(hasT$classes, data.frame(class="T", parent="..root.."))
expect_equal(hasT$rules, data.frame(class="T",
feature="CD3E",
operator=">",
# e-4 makes it resemble internal CP10K value:
threshold=42e-4))
hasT <- rule(obj=hasT, class="T", feature="MS4A1", operator="<",
threshold=42)
expect_equal(hasT$classes, data.frame(class="T", parent="..root.."))
expect_equal(hasT$rules, data.frame(
class=c("T","T"),
feature=c("CD3E", "MS4A1"),
operator=c(">", "<"),
threshold=42e-4) ) # e-4 makes it resemble internal CP10K value
})
test_that("Existing feature is handled well even if obj is saved into variable.", {
x <- simulated_umis
x <- rule(x, "T", "CD3E", threshold = .1e-3)
x <- rule(x, "Treg", "FOXP3", threshold = .1e-3)
x <- rule(x, "T", "CD3E", threshold = .1e-3)
expect_true(is_rules(x$rules))
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.