tests/testthat/test_symmetrize.R

context("symmetrize function")

test_that("function works for integer inputs", {
    
    # integers
    x = matrix(sample.int(100, 25), nrow = 5)
    x_old = x
    x_sym = symmetrize(x)
    
    expect_identical(x, x_old)
    
    for (i in 1:5) {
        for (j in 1:5) {
            expect_identical(x_sym[i,j], x_sym[j,i])
            if (i > j) 
                expect_identical(x_sym[i, j], x[j, i])
        }
    }
    
    x_sym_lo = symmetrize(x, FALSE)
    expect_identical(x, x_old)
    for (i in 1:5) {
        for (j in 1:5) {
            if (i > j) 
                expect_identical(x_sym_lo[j, i], x[i, j])
        }
    }

})

test_that("function works for numeric inputs", {
        
    x = matrix(rnorm(25), nrow = 5)
    x_old = x
    x_sym = symmetrize(x)
    
    expect_identical(x, x_old)
    
    for (i in 1:5) {
        for (j in 1:5) {
            expect_identical(x_sym[i,j], x_sym[j,i])
            if (i > j) 
                expect_identical(x_sym[i, j], x[j, i])
        }
    }
    
    x_sym_lo = symmetrize(x, FALSE)
    expect_identical(x, x_old)
    for (i in 1:5) {
        for (j in 1:5) {
            if (i > j) 
                expect_identical(x_sym_lo[j, i], x[i, j])
        }
    }
    
})

test_that("function works for logical input", {
    
    x = matrix(sample(c(F, T), 25, replace = T), nrow = 5)
    x_old = x
    x_sym = symmetrize(x)
    
    expect_identical(x, x_old)
    
    for (i in 1:5) {
        for (j in 1:5) {
            expect_identical(x_sym[i,j], x_sym[j,i])
            if (i > j) 
                expect_identical(x_sym[i, j], x[j, i])
        }
    }
    
    x_sym_lo = symmetrize(x, FALSE)
    expect_identical(x, x_old)
    for (i in 1:5) {
        for (j in 1:5) {
            if (i > j) 
                expect_identical(x_sym_lo[j, i], x[i, j])
        }
    }

})

test_that("function works for character input", {
    
    x = matrix(sample(letters[1:25], 25, replace = T), nrow = 5)
    x_old = x
    x_sym = symmetrize(x)
    
    expect_identical(x, x_old)
    
    for (i in 1:5) {
        for (j in 1:5) {
            expect_identical(x_sym[i,j], x_sym[j,i])
            if (i > j) 
                expect_identical(x_sym[i, j], x[j, i])
        }
    }
    
    x_sym_lo = symmetrize(x, FALSE)
    expect_identical(x, x_old)
    for (i in 1:5) {
        for (j in 1:5) {
            if (i > j) 
                expect_identical(x_sym_lo[j, i], x[i, j])
        }
    }

})

test_that("function throws appropriate errors", {
    
    expect_error(symmetrize(c(x)))
    expect_error(symmetrize(matrix(sample.int(100, 20), nrow = 5)))
    
})
baruuum/btoolbox documentation built on Aug. 17, 2020, 1:29 a.m.