tests/testthat/test_matrix_conversion_functs.R

context("Matrix conversion functions")

get_test_parameters <- function(slices) {
  n_row <- sample(2:20, size = 1)
  n_col <- sample(2:20, size = 1)
  p_zero <- runif(1)
  mat <- create_example_sparse_matrix(n_row, n_col, p_zero = p_zero)
  out <- list()
  out[["mat"]] <- mat
  if (slices) {
    out[["row_slice"]] <- sample(x = 1:n_row, size = 2, replace = FALSE) %>% sort()
    out[["col_slice"]] <-  sample(x = 1:n_col, size = 2, replace = FALSE) %>% sort()
  }
  return(out)
}

test_that("Extract columns from compressed sparse column", {
  for (i in 1:50) {
    supplies <- get_test_parameters(TRUE)
    mat <- supplies$mat; row_slice <- supplies$row_slice; col_slice <- supplies$col_slice
    mat_csc <- get_compressed_matrix_representation(mat, "column")
    expect_equal(mat, extract_column_from_csc_matrix(col_nos = 1:ncol(mat), csc_mat = mat_csc))
    expect_equal(mat[row_slice, col_slice], extract_column_from_csc_matrix(col_nos = col_slice, csc_mat = mat_csc, row_subset = row_slice))
    expect_equal(mat[row_slice[1],], extract_column_from_csc_matrix(col_nos = 1:ncol(mat), csc_mat = mat_csc, row_subset = row_slice[1]))
    expect_equal(mat[,col_slice[1]], extract_column_from_csc_matrix(col_nos = col_slice[1], csc_mat = mat_csc, row_subset = 1:nrow(mat)))
    expect_equal(mat[row_slice[1], col_slice[1]], extract_column_from_csc_matrix(col_nos = col_slice[1], csc_mat = mat_csc, row_subset = row_slice[1]))
  }
})

test_that("Extract rows from compressed sparse row", {
  for (i in 1:50) {
    supplies <- get_test_parameters(TRUE)
    mat <- supplies$mat; row_slice <- supplies$row_slice; col_slice <- supplies$col_slice
    mat_csr <- get_compressed_matrix_representation(mat, "row")
    expect_equal(mat, extract_row_from_csr_matrix(row_nos = 1:nrow(mat), csr_mat = mat_csr))
    expect_equal(mat[row_slice, col_slice], extract_row_from_csr_matrix(row_nos = row_slice, csr_mat = mat_csr, col_subset = col_slice))
    expect_equal(mat[row_slice[1],], extract_row_from_csr_matrix(row_nos = row_slice[1], csr_mat = mat_csr))
    expect_equal(mat[,col_slice[1]], extract_row_from_csr_matrix(row_nos = 1:nrow(mat), csr_mat = mat_csr, col_subset = col_slice[1]))
    expect_equal(mat[row_slice[1], col_slice[1]], extract_row_from_csr_matrix(row_nos = row_slice[1], csr_mat = mat_csr, col_subset = col_slice[1]))
  }
})

test_that("Flip sparse column to sparse row", {
  for (i in 1:50) {
    supplies <- get_test_parameters(FALSE)
    A <- supplies$mat
    A_csc <- get_compressed_matrix_representation(A, "column")
    A_csr <- flip_csc_matrix(A_csc)
    A_new <- extract_row_from_csr_matrix(row_nos = 1:nrow(A), csr_mat = A_csr, col_subset = 1:ncol(A))
    expect_equal(A, A_new)
  }
})

test_that("Flip sparse row to sparse column", {
  for (i in 1:50) {
    supplies <- get_test_parameters(FALSE)
    B <- supplies$mat
    B_csr <- get_compressed_matrix_representation(B, "row")
    B_csc <- flip_csr_matrix(B_csr)
    B_new <- extract_column_from_csc_matrix(col_nos = 1:ncol(B), csc_mat = B_csc)
  }
})
Timothy-Barry/ravel documentation built on Oct. 16, 2020, 12:40 a.m.