tests/testthat/test-helpers.R

test_that("is_same_dim", {
    
    # sanity check
    testthat::expect_true(is_same_dim(array(1:12, c(3,4)), matrix(NA, nrow = 3, ncol = 4)))
    testthat::expect_false(is_same_dim(array(1:12, c(3,4)), matrix(NA, nrow = 3, ncol = 3)))
    testthat::expect_false(is_same_dim(array(1:12, c(3,4)), array(NA, c(3,4,1))))
    testthat::expect_false(is_same_dim(array(1:12, c(3,4)), array(NA, c(4, 3))))
    
    testthat::expect_false(is_same_dim(array(NA, c(3,4)), list()))
    testthat::expect_false(is_same_dim(array(NA, c(3,4)), data.frame()))
    testthat::expect_false(is_same_dim(array(NA, c(3,4)), NULL))
    testthat::expect_false(is_same_dim(array(NA, c(3,4)), 1))
    
    # number of margins <= 1
    testthat::expect_true(is_same_dim(1, 1))
    testthat::expect_false(is_same_dim(1, 1:3))
    testthat::expect_false(is_same_dim(1, 1:3))
    testthat::expect_true(is_same_dim(NULL, numeric()))
    
    # margin =1 but with dim
    x <- 1:5
    dim(x) <- 5
    testthat::expect_true(is_same_dim(x, 1:5))
    
})

test_that("operation_output_type", {
    double_type <- "float"
    options("filearray.operator.precision" = double_type)
    on.exit({
        options("filearray.operator.precision" = NULL)
    })
    
    # complex
    type1 <- "complex"
    for(type2 in c("complex", "double", "float", "integer", "logical")) {
        testthat::expect_equal(operation_output_type(type1, type2), type1)
    }
    testthat::expect_equal(operation_output_type(type1, 'raw', raw = "integer"), type1)
    testthat::expect_error(operation_output_type(type1, "raw"))
    
    # double/float
    type1 <- "double"
    for(type2 in c("double", "float", "integer", "logical")) {
        testthat::expect_equal(operation_output_type(type1, type2), double_type)
    }
    testthat::expect_equal(operation_output_type(type1, 'raw', raw = "integer"), double_type)
    testthat::expect_error(operation_output_type(type1, "raw"))
    
    type1 <- "float"
    for(type2 in c("double", "float", "integer", "logical")) {
        testthat::expect_equal(operation_output_type(type1, type2), double_type)
    }
    testthat::expect_equal(operation_output_type(type1, 'raw', raw = "integer"), double_type)
    testthat::expect_error(operation_output_type(type1, "raw"))
    
    # integer
    type1 <- "integer"
    for(type2 in c("integer", "logical")) {
        testthat::expect_equal(operation_output_type(type1, type2), type1)
    }
    testthat::expect_equal(operation_output_type(type1, 'raw', raw = "integer"), type1)
    testthat::expect_error(operation_output_type(type1, "raw"))
    
    # logical
    testthat::expect_equal(operation_output_type("logical", 'logical'), 'integer')
    testthat::expect_equal(operation_output_type("logical", 'logical', logical = "logical"), 'logical')
    testthat::expect_equal(operation_output_type('logical', 'raw', raw = "integer"), 'integer')
    testthat::expect_error(operation_output_type('logical', "raw"))
    
    # raw
    testthat::expect_equal(operation_output_type('raw', 'raw', raw = "integer"), 'integer')
    testthat::expect_error(operation_output_type('raw', "raw"))
    
})

test_that("fmap_buffer", {
    
    buffer_large <- get_buffer_size() * 16
    
    testthat::expect_equal(common_fmap_buffer_count(84, 12, 96), 1)
    testthat::expect_equal(common_fmap_buffer_count(84, 12, 97), 1)
    
    testthat::expect_equal(common_fmap_buffer_count(buffer_large*2, 12, 1024), 2)
    testthat::expect_equal(common_fmap_buffer_count(buffer_large*2 + 2, 12, 1024), 2)
    testthat::expect_equal(common_fmap_buffer_count(buffer_large*4096, buffer_large, 1024), 1024)
    testthat::expect_equal(common_fmap_buffer_count(buffer_large*2, 13, 1024), 1)
    
    expect_true(validate_fmap_buffer_count(12, input_lens = c(84, 12, 96)))
    expect_true(validate_fmap_buffer_count(1, input_lens = c(84, 12, 96)))
    expect_false(validate_fmap_buffer_count(15, input_lens = c(84, 12, 96)))
    expect_true(validate_fmap_buffer_count(1, input_lens = c(84, 12, 97)))
    
})

Try the filearray package in your browser

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

filearray documentation built on July 9, 2023, 5:53 p.m.