context("img_symmetry")
test_that("img_symmetry checks all options to be correct", {
expect_warning(img_symmetry(0, vertical = FALSE, horizontal = FALSE),
"Both optional arguments cannot be FALSE\\. Try setting option \\'vertical\\' or \\'horizontal\\' to TRUE\\. Returning NA\\.")
expect_error(img_symmetry(1:10),
"Invalid input \\(should be a matrix or a 3-dimensional array of numeric or integer values\\)")
})
test_that("img_symmetry only handles numeric matrices", {
expect_error(img_symmetry(matrix("foo", nrow = 10, ncol = 10)),
"Input img has to be a matrix or array of \\*numeric\\* or \\*integer\\* values")
expect_error(img_symmetry(1:10),
"Invalid input \\(should be a matrix or a 3-dimensional array of numeric or integer values\\)")
})
test_that("img_symmetry needs at least 4x4 pixels",{
img <- matrix(0, nrow = 3, ncol = 3)
expect_error(img_symmetry(img),
"Image too small\\. Try an image with at least 4 pixels in both image dimensions\\.")
})
test_that("img_symmetry needs variance in the image",{
img <- matrix(1:100, nrow = 10, ncol = 10)
# no variation in left half
img[,1:5]<-0
expect_error(img_symmetry(img),
"No variation in left image half\\. Computation not possible\\.")
# no variation in left half
img[,1:5]<-img[,6:10]
img[,6:10]<-0
expect_error(img_symmetry(img),
"No variation in right image half\\. Computation not possible\\.")
})
test_that("img_symmetry detects perfect symmetry", {
# construct sample image
# img1: perfectly symmetric image (both horiz. & vert.)
img1 <- matrix(0, nrow = 100, ncol = 100)
img1[41:60, 41:60] <- 1
# img perfectly symmetric
expect_equal(img_symmetry(img1), c(vertical = 1, horizontal = 1))
expect_equal(img_symmetry(img1, horizontal = FALSE), c(vertical = 1))
expect_equal(img_symmetry(img1, vertical = FALSE), c(horizontal = 1))
# RGB
img1 <- array(0, dim = c(9, 9, 3))
img1[3:7, 3:7, ] <- 1
expect_equal(img_symmetry(img1),
c(vertical = 0.2989 * 1 + 0.5870 * 1 + 0.1140 * 1,
horizontal = 0.2989 * 1 + 0.5870 * 1 + 0.1140 * 1))
expect_equal(img_symmetry(img1, horizontal = FALSE),
c(vertical = 0.2989 * 1 + 0.5870 * 1 + 0.1140 * 1))
expect_equal(img_symmetry(img1, vertical = FALSE),
c(horizontal = 0.2989 * 1 + 0.5870 * 1 + 0.1140 * 1))
expect_equal(img_symmetry(img1, per_channel = FALSE),
c(vertical = 0.2989 * 1 + 0.5870 * 1 + 0.1140 * 1,
horizontal = 0.2989 * 1 + 0.5870 * 1 + 0.1140 * 1))
})
test_that("img_symmetry detects horizontal symmetry", {
# construct sample image
# img2: horizontally symmetric image
img2 <- matrix(0, nrow = 50, ncol = 50)
img2[21:30, 16:30] <- 1
img2[11:40, 31:40] <- 1
# img perfectly horizontally symmetric
expect_lt(img_symmetry(img2)[1], c(vertical = 1))
expect_identical(img_symmetry(img2)[2], c(horizontal = 1))
})
test_that("img_symmetry detects vertical symmetry", {
# construct sample image
# img3: vertically symmetric image
img3 <- matrix(0, nrow = 50, ncol = 50)
img3[16:30, 21:30] <- 1
img3[31:40, 11:40] <- 1
# img perfectly vertically symmetric
expect_identical(img_symmetry(img3)[1], c(vertical = 1))
expect_lt(img_symmetry(img3)[2], c(horizontal = 1))
})
test_that("img_symmetry detects symmetry for inverted image", {
# img1
img1 <- matrix(0, nrow = 100, ncol = 100)
img1[41:60, 41:60] <- 1
# img2: inverse of image 1 (should have the same symmetry)
img2 <- 1 - img1
expect_equal(img_symmetry(img1), img_symmetry(img2))
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.