#!/usr/bin/r -t
##
## Copyright (C) 2014 - 2022 Dirk Eddelbuettel
##
## This file is part of RcppArmadillo.
##
## RcppArmadillo is free software: you can redistribute it and/or modify it
## under the terms of the GNU General Public License as published by
## the Free Software Foundation, either version 2 of the License, or
## (at your option) any later version.
##
## RcppArmadillo is distributed in the hope that it will be useful, but
## WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
## GNU General Public License for more details.
##
## You should have received a copy of the GNU General Public License
## along with RcppArmadillo. If not, see .
if (!requireNamespace("Matrix", quietly=TRUE)) exit_file("No Matrix package")
suppressMessages(require(Matrix))
library(RcppArmadillo)
Rcpp::sourceCpp("cpp/sparse.cpp")
## setting up an example matrix -- using the fact that the as
## converter prefers sparse matrix objects create by the Matrix package
suppressMessages(require(Matrix))
## cf http://people.sc.fsu.edu/~jburkardt/data/st/st.html
mtxt <- c("11 0 0 14 0 16",
" 0 22 0 0 25 26",
" 0 0 33 34 0 36",
"41 0 43 44 0 46")
M <- as.matrix(read.table(text=mtxt))
dimnames(M) <- NULL
SM <- Matrix(M, sparse=TRUE)
#test.as.sparse <- function() {
expect_equal(SM, asSpMat(SM))#, msg="as")
#test.sparse.addition <- function() {
expect_equal(SM + SM, sparseAddition(SM))#, msg="addSparse")
#test.sparse.multiplication <- function() {
k <- 3
expect_equal(k*SM, sparseMultiplication(SM, k))#, msg="multSparse")
#test.sparse.fromTriplet <- function() {
mtxt <- c("0 0 1",
"0 2 0",
"3 0 0")
M <- as.matrix(read.table(text=mtxt))
dimnames(M) <- NULL
SM <- Matrix(M, sparse=TRUE)
spM <- fromTriplet(0:2, # rows
2:0, # cols
1:3) # values
expect_equal(SM, spM)#, msg="fromTriplet")
#test.sparse.transpose <- function() {
expect_equal(t(SM), sparseTranspose(SM))#, msg="transposeSparse")
#test.sparse.sqrt <- function() {
expect_equal(sqrt(SM), sparseSqrt(SM))#, msg="sqrtSparse")
#test.sparse.square <- function() {
expect_equal(SM^2, sparseSquare(SM))#, msg="squareSparse")
if (utils::packageVersion("Matrix") < "1.4-2") exit_file("Remainder needs Matrix 1.4-2 or later")
#test.sparse.iterators <- function() {
SM <- matrix(0, 5, 5)
diag(SM) <- 1:5
SM <- methods::as(methods::as(SM, "generalMatrix"), "CsparseMatrix")
spM <- sparseIterators(SM, -1.5)
diag(SM) <- diag(SM) - 1.5
expect_equal(SM, spM)#, msg="sparseIterators")
#test.sparse.list <- function() {
SM <- matrix(0, 5, 5)
diag(SM) <- 1:5
SM <- methods::as(methods::as(SM, "generalMatrix"), "CsparseMatrix")
l <- list(SM, SM)
expect_equal(l, sparseList(l))#, msg="sparseList")
#test.speye <- function() {
SM <- speye(4, 4)
SM2 <- sparseMatrix(i = c(1:4), j = c(1:4), x = 1)
expect_equal(SM, SM2)#, msg="speye")
SM <- speye(3, 5)
SM2 <- sparseMatrix(i = c(1:3), j = c(1:3), x = 1, dims = c(3, 5))
expect_equal(SM, SM2)#, msg="speye")
SM <- speye(5, 3)
SM2 <- sparseMatrix(i = c(1:3), j = c(1:3), x = 1, dims = c(5, 3))
expect_equal(SM, SM2)#, msg="speye")