#!/usr/bin/r -t
# -*- mode: R; ess-indent-level: 4; indent-tabs-mode: nil; -*-
#
# Copyright (C) 2012 Dirk Eddelbuettel and Romain Francois
#
# This file is part of Rcpp.
#
# Rcpp 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.
#
# Rcpp 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 Rcpp. If not, see <http://www.gnu.org/licenses/>.
.runThisTest <- Sys.getenv("RunAllRcppTests") == "yes"
if (.runThisTest) {
definitions <- function() {
list(
"vector_scalar_ops" = list(signature(x = "numeric"),
'
NumericVector xx(x);
NumericVector y1 = xx + 2.0; // NB does not work with ints as eg "+ 2L"
NumericVector y2 = 2 - xx;
NumericVector y3 = xx * 2.0;
NumericVector y4 = 2.0 / xx;
return List::create(y1, y2, y3, y4);
'
)
,
"vector_scalar_logical" = list(signature(x = "numeric"),
'
NumericVector xx(x);
LogicalVector y1 = xx < 2;
LogicalVector y2 = 2 > xx;
LogicalVector y3 = xx <= 2;
LogicalVector y4 = 2 != xx;
return List::create(y1, y2, y3, y4);
'
)
,
"vector_vector_ops" = list(signature(x = "numeric", y="numeric"),
'
NumericVector xx(x);
NumericVector yy(y);
NumericVector y1 = xx + yy;
NumericVector y2 = yy - xx;
NumericVector y3 = xx * yy;
NumericVector y4 = yy / xx;
return List::create(y1, y2, y3, y4);
'
)
,
"vector_vector_logical" = list(signature(x = "numeric", y="numeric"),
'
NumericVector xx(x);
NumericVector yy(y);
LogicalVector y1 = xx < yy;
LogicalVector y2 = xx > yy;
LogicalVector y3 = xx <= yy;
LogicalVector y4 = xx >= yy;
LogicalVector y5 = xx == yy;
LogicalVector y6 = xx != yy;
return List::create(y1, y2, y3, y4, y5, y6);
'
)
## ,
## "matrix_plus" = list(signature(x = "numeric"),
## '
## NumericMatrix xx(x);
## // -- fails to compile
## NumericMatrix yy = xx + 2;
## return yy;
## '
## )
)
}
.setUp <- function(){
if ( ! exists( ".rcpp.sugarOps", globalenv() ) ) {
fun <- Rcpp:::compile_unit_tests(definitions())
assign( ".rcpp.sugarOps", fun, globalenv() )
}
}
test.vector.scalar.ops <- function( ){
fx <- .rcpp.sugarOps$vector_scalar_ops
x <- rnorm(10)
checkEquals(fx(x), list(x + 2, 2 - x, x * 2, 2 / x), "sugar vector scalar operations")
}
test.vector.scalar.logical <- function( ){
fx <- .rcpp.sugarOps$vector_scalar_logical
x <- rnorm(10) + 2
checkEquals(fx(x), list(x < 2, 2 > x, x <= 2, 2 != x), "sugar vector scalar logical operations")
}
test.vector.vector.ops <- function( ){
fx <- .rcpp.sugarOps$vector_vector_ops
x <- rnorm(10)
y <- runif(10)
checkEquals(fx(x,y), list(x + y, y - x, x * y, y / x), "sugar vector vector operations")
}
test.vector.vector.logical <- function( ){
fx <- .rcpp.sugarOps$vector_vector_logical
x <- rnorm(10)
y <- runif(10)
checkEquals(fx(x,y), list(x < y, x > y, x <= y, x >= y, x == y, x != y), "sugar vector vector operations")
}
## test.matrix.plus <- function( ){
## fx <- .rcpp.sugarOps$matrix_plus
## x <- matrix(rnorm(10), 5, 2)
## checkEquals(fx(x) , x + 2)
## #checkEquals(fx(x) , x ) # DUMMY
## }
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.