context('Test that patch labelling handles corner cases')
test_that("Patch counting works and handles weird matrices", {
# Labelling
# Fail if not a logical matrix
expect_error(label(diag(10)))
# Fail if not a matrix
expect_error(label(seq.int(10)))
# Wrapping
a <- diag(5) > 0; a[5,1] <- TRUE
t <- label(a, wrap = FALSE)
expect_true((t[1,1] != t[5,1]) != t[5,5])
t <- label(a, wrap = TRUE)
expect_true((t[1,1] == t[5,1]) == t[5,5])
# Neighboring mask
nbm <- label(diag(5) > 0, nbmask = matrix(c(1,1,1,1,0,1,1,1,1),
ncol = 3, nrow = 3))
expect_true(unique(na.omit(as.vector(nbm))) == 1)
# Return things
expect_true( all(is.na(label(diag(10) == 2))) )
expect_true( unique(as.vector(label(diag(10) < 2))) == 1 )
# Patch counting
testlist <- list(diag(10) > 0, diag(10) > 0 )
expect_true( all(patchsizes(testlist, merge = TRUE) == 1) )
expect_error( patchsizes(diag(10)) )
# column/row vector patch counting
ex <- matrix(seq.int(5) > 2, ncol = 1)
expect_true(attr(label(ex), "psd") == 3)
expect_true(attr(label(t(ex)), "psd") == 3)
expect_true(all(dim(label(ex)) == dim(ex))) # Check that dims are equal
# Non-square matrix counting (width > height)
ex <- matrix(c(1, 0, 0, 1,
0, 0, 0, 1,
0, 0, 0, 1), byrow = TRUE, ncol = 4) > 0
test <- label(ex, wrap = TRUE)
expect_true(test[1,1] == test[2, 4])
test <- label(ex, wrap = FALSE)
expect_true(test[1,1] != test[2, 4])
expect_true(test[1,4] == test[2, 4])
# Non-square matrix counting (height > width)
ex <- matrix(c(1, 0, 0,
1, 0, 0,
1, 0, 0,
1, 0, 1), byrow = TRUE, ncol = 3) > 0
test <- label(ex, wrap = TRUE)
expect_true(test[1,1] == test[4, 3])
test <- label(ex, wrap = FALSE)
expect_true(test[1,1] != test[4, 3])
expect_true(test[4,1] == test[3, 1])
# Non-square matrix counting
ex <- matrix(c(1, 1, 1, 1,
0, 0, 0, 1,
0, 0, 0, 1), byrow = TRUE, ncol = 4) > 0
test <- label(ex)
expect_true(attr(test, "percolation"))
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.