tests/testthat/test-raggedS.R

context("Testing raggedS helper functions")

test_that("raggedCoefS creates expected object", {
    
    ragA <- new("raggedCoefS", a=list(1, 2:3, 4:6),
                as=list(7, 8:9, 10:12), s=12)
    
    ragB <- new("raggedCoefS", a=list(1, 2:3, 4:6), p=c(1, 2, 3),
                as=list(7, 8:9, 10:12), ps=c(1,2,3), s=12)
    
    expect_warning(new("raggedCoefS", list(1, 2:3, 4:6),
                       list(7, 8:9, 10:12), c(1,2,3), s=12))
    
    expect_output(show(ragA))
    
    expect_s4_class(ragA, "raggedCoefS")
    expect_equal(slotNames(ragA), c("as", "ps", "s", "a", "p"))
    expect_equal(class(ragA@as), "list")
    expect_equal(class(ragA@a), "list")
    expect_equal(class(ragA@ps), "integer")
    expect_equal(class(ragA@p), "integer")
    expect_equal(class(ragA@s), "numeric")
    
})

test_that("subsetting raggedCoefS objects with '[[' works as expected", {
    ragA <- new("raggedCoefS", a=list(1, 2:3, 4:6),
                               as=list(7, 8:9, 10:12), s=12)
    ragged1 <- list(1, 2:3, 4:6)
    ragged2 <-list(7, 8:9, 10:12)
    
    expect_identical(ragA[[1]], (ragged1))
    expect_identical(ragA[[1]][[1]], (ragged1[[1]]))
    expect_identical(ragA[[1]][[2]], (ragged1[[2]]))
    expect_identical(ragA[[1]][[3]], (ragged1[[3]]))
    
    expect_identical(ragA[[2]], (ragged2))
    expect_identical(ragA[[2]][[1]], (ragged2[[1]]))
    expect_identical(ragA[[2]][[2]], (ragged2[[2]]))
    expect_identical(ragA[[2]][[3]], (ragged2[[3]]))
    
    expect_identical(ragA[[1,1]], (ragged1[[1]]))
    expect_identical(ragA[[1,2]], (ragged1[[2]]))
    expect_identical(ragA[[1,3]], (ragged1[[3]]))
    expect_identical(ragA[[1,1,1]], (ragged1[[c(1,1)]]))
    expect_identical(ragA[[1,2,1]], (ragged1[[c(2,1)]]))
    expect_identical(ragA[[1,2,2]], (ragged1[[c(2,2)]]))
    expect_identical(ragA[[1,3,1]], (ragged1[[c(3,1)]]))
    expect_identical(ragA[[1,3,2]], (ragged1[[c(3,2)]]))
    expect_identical(ragA[[1,3,3]], (ragged1[[c(3,3)]]))
    
    expect_identical(ragA[[2,1]], (ragged2[[1]]))
    expect_identical(ragA[[2,2]], (ragged2[[2]]))
    expect_identical(ragA[[2,3]], (ragged2[[3]]))
    expect_identical(ragA[[2,1,1]], (ragged2[[c(1,1)]]))
    expect_identical(ragA[[2,2,1]], (ragged2[[c(2,1)]]))
    expect_identical(ragA[[2,2,2]], (ragged2[[c(2,2)]]))
    expect_identical(ragA[[2,3,1]], (ragged2[[c(3,1)]]))
    expect_identical(ragA[[2,3,2]], (ragged2[[c(3,2)]]))
    expect_identical(ragA[[2,3,3]], (ragged2[[c(3,3)]]))
    
    expect_error(ragA[[3]])
    expect_error(ragA[[1,4]])
    expect_error(ragA[[2,4]])
    expect_error(ragA[[3,1]])
    expect_error(ragA[[3, 1, 1]])
    
    expect_error(ragA[[1:2]])
    
    expect_error(new("raggedCoefS", a=list(1, 2:3, 4:6), p = 1,
                             as=list(7, 8:9, 10:12), s=12))
    expect_error(new("raggedCoefS", a=list(1, 2:3, 4:6), ps = 1,
                    as=list(7, 8:9, 10:12), s=12))
})

test_that("subsetting raggedCoefS objects with '[' works as expected", {
    ragA <- new("raggedCoefS", a=list(1, 2:3, 4:6),
                as=list(7, 8:9, 10:12), s=12)
    
       m <- rbind(c(1, 0, 0, 7, 0, 0), 
                  c(2, 3, 0, 8, 9, 0), 
                  c(4, 5, 6, 10, 11, 12))
    
        
        expect_identical(ragA[1], (ragA[1,]))
        expect_identical(ragA[2], (ragA[2,]))
        expect_identical(ragA[3], (ragA[3,]))
                
        expect_identical(ragA[], (m))
        expect_identical(ragA[1], (m[1,]))
        expect_identical(ragA[2], (m[2,]))
        expect_identical(ragA[3], (m[3,]))
        
        expect_identical(ragA[1:2], (m[1:2, ]))
        expect_identical(ragA[2:3], (m[2:3, ]))
        expect_identical(ragA[c(1,3)], (m[c(1,3), ]))
        
        expect_identical(ragA[ , 1], (m[ , 1]))
        expect_identical(ragA[ , 2], (m[ , 2]))
        expect_identical(ragA[ , 3], (m[ , 3]))
        expect_identical(ragA[ , 4], (m[ , 4]))
        expect_identical(ragA[ , 5], (m[ , 5]))
        expect_identical(ragA[ , 6], (m[ , 6]))
        expect_identical(ragA[ , 2:3], (m[ , 2:3]))
        expect_identical(ragA[ , c(1,3,5)], (m[ , c(1,3,5)]))
        
        expect_identical(ragA[1,1], (m[1,1]))
        expect_identical(ragA[2,1], (m[2,1]))
        expect_identical(ragA[2,2], (m[2,2]))
        expect_identical(ragA[3,1], (m[3,1]))
        expect_identical(ragA[3,2], (m[3,2]))
        expect_identical(ragA[3,3], (m[3,3]))
        
        expect_equal(ragA[1,2], 0)
        expect_equal(ragA[1,3], 0)
        expect_equal(ragA[2,3], 0)
        
        expect_identical(ragA[1:2,1:2], (m[1:2,1:2]))
    
})

test_that("replacing parts of raggedCoefS objects with '[[<-' works as expected", {
    ragA <- new("raggedCoefS", a=list(1, 2:3, 4:6),
                as=list(7, 8:9, 10:12), s=12)
    ragged1 <- list(1, 2:3, 4:6)
    ragged2 <-list(7, 8:9, 10:12)
    
    ragB <- ragA
    ragA[[1]] <- ragged1
    ragA[[2]] <- ragged2
    expect_error(ragA[[3]] <- ragged1)
    
    ragB[[2]] <- ragA[[1]]
    expect_identical(ragB[[2]], (ragged1))
    ragB[[2]][[3]] <- ragA[[2]][[3]]
    expect_identical(ragB[[2,3]], (ragged2[[3]]))
    ragB[[2]][[3]][1:2] <- ragA[[1]][[3]][2:3]
    expect_identical(ragB[[2,3, 1:2]], (ragged1[[3]][2:3]))
    # replacement value should have same length as current value
    expect_error(ragB[[1]] <- c(22,33))
    expect_error(ragB[[1]][[1]] <- c(22,33))
    
    ragA[[1, 1, 1]] <- 10
    expect_error(ragA[[1, 1, 3]] <- c(1,2))
    expect_error(ragA[[2, 1, 3]] <- c(1,2))
    expect_error(ragA[[3, 1, 3]] <- c(1,2))
    
})

Try the mixAR package in your browser

Any scripts or data that you put into this service are public.

mixAR documentation built on May 3, 2022, 5:08 p.m.