// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*-
//
// language.cpp: Rcpp R/C++ interface class library -- Language unit tests
//
// 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 .
#include
using namespace Rcpp ;
// [[Rcpp::export]]
Language runit_language(SEXP x){ return Language(x) ; }
// [[Rcpp::export]]
Language runit_lang_variadic_1(){
return Language( "rnorm", 10, 0.0, 2.0 ) ;
}
// [[Rcpp::export]]
Language runit_lang_variadic_2(){
return Language( "rnorm", 10, Named("mean",0.0), 2.0 ) ;
}
// [[Rcpp::export]]
Language runit_lang_push_back(){
Language call("rnorm") ;
call.push_back( 10 ) ;
call.push_back( Named("mean", 0.0) ) ;
call.push_back( 2.0 ) ;
return call ;
}
// [[Rcpp::export]]
double runit_lang_square_rv(){
Language p("rnorm") ;
p.push_back( 1 ) ;
p.push_back( 10.0 ) ;
p.push_back( 20.0 ) ;
return p[2] ;
}
// [[Rcpp::export]]
Language runit_lang_square_lv(){
Language p("rnorm") ;
p.push_back( 1 ) ;
p.push_back( 10.0 ) ;
p.push_back( 20.0 ) ;
p[1] = "foobar" ;
p[2] = p[3] ;
return p ;
}
// [[Rcpp::export]]
SEXP runit_lang_fun( Function fun, IntegerVector x ){
Language call( fun );
call.push_back(x) ;
return Rcpp_fast_eval( call, R_GlobalEnv ) ;
}
// [[Rcpp::export]]
Language runit_lang_inputop(){
Language call( "rnorm" );
call << 10 << Named( "sd", 10 ) ;
return call ;
}
// [[Rcpp::export]]
List runit_lang_unarycall(IntegerVector x){
Language call( "seq", Named("from", 10 ), Named("to", 0 ) ) ;
List output( x.size() ) ;
std::transform(
x.begin(), x.end(),
output.begin(),
unary_call(call)
) ;
return output ;
}
// [[Rcpp::export]]
List runit_lang_unarycallindex(IntegerVector x){
Language call( "seq", 10, 0 ) ;
List output( x.size() ) ;
std::transform(
x.begin(), x.end(),
output.begin(),
unary_call(call,2)
) ;
return output ;
}
// [[Rcpp::export]]
List runit_lang_binarycall(IntegerVector x1, IntegerVector x2 ){
Language call( "seq", Named("from", 10 ), Named("to", 0 ) ) ;
List output( x1.size() ) ;
std::transform(
x1.begin(), x1.end(), x2.begin(),
output.begin(),
binary_call(call)
) ;
return output ;
}
// [[Rcpp::export]]
SEXP runit_lang_fixedcall(){
Language call( Function("rnorm"), 10 ) ;
std::vector< std::vector > result(10) ;
std::generate(
result.begin(), result.end(),
fixed_call< std::vector >(call)
) ;
return wrap( result );
}
// [[Rcpp::export]]
SEXP runit_lang_inenv( Environment env){
Language call( "sum", Symbol("y") ) ;
return call.eval( env ) ;
}
// [[Rcpp::export]]
Pairlist runit_pairlist(SEXP x){
return Pairlist(x) ;
}
// [[Rcpp::export]]
Pairlist runit_pl_variadic_1(){
return Pairlist( "rnorm", 10, 0.0, 2.0 ) ;
}
// [[Rcpp::export]]
Pairlist runit_pl_variadic_2(){
return Pairlist( "rnorm", 10, Named("mean",0.0), 2.0 ) ;
}
// [[Rcpp::export]]
Pairlist runit_pl_push_front(){
Pairlist p ;
p.push_front( 1 ) ;
p.push_front( 10.0 ) ;
p.push_front( "foo" ) ;
p.push_front( Named( "foobar", 10) ) ;
return p ;
}
// [[Rcpp::export]]
Pairlist runit_pl_push_back(){
Pairlist p ;
p.push_back( 1 ) ;
p.push_back( 10.0 ) ;
p.push_back( "foo" ) ;
p.push_back( Named( "foobar", 10) ) ;
return p ;
}
// [[Rcpp::export]]
Pairlist runit_pl_insert(){
Pairlist p ;
p.push_back( 1 ) ;
p.push_back( 10.0 ) ;
p.push_back( 20.0 ) ;
/* insert in 2nd position */
p.insert( 1, Named( "bla", "bla" ) ) ;
/* insert in front */
p.insert( 0, 30.0 ) ;
/* insert in back */
p.insert( 5, "foobar" ) ;
return p ;
}
// [[Rcpp::export]]
Pairlist runit_pl_replace(){
Pairlist p ;
p.push_back( 1 ) ;
p.push_back( 10.0 ) ;
p.push_back( 20.0 ) ;
p.replace( 0, Named( "first", 1 ) ) ;
p.replace( 1, 20.0 ) ;
p.replace( 2, false ) ;
return p ;
}
// [[Rcpp::export]]
int runit_pl_size(){
Pairlist p ;
p.push_back( 1 ) ;
p.push_back( 10.0 ) ;
p.push_back( 20.0 ) ;
return p.size() ;
}
// [[Rcpp::export]]
Pairlist runit_pl_remove_1(){
Pairlist p ;
p.push_back( 1 ) ;
p.push_back( 10.0 ) ;
p.push_back( 20.0 ) ;
p.remove( 0 ) ;
return p ;
}
// [[Rcpp::export]]
Pairlist runit_pl_remove_2(){
Pairlist p ;
p.push_back( 1 ) ;
p.push_back( 10.0 ) ;
p.push_back( 20.0 ) ;
p.remove( 2 ) ;
return p ;
}
// [[Rcpp::export]]
Pairlist runit_pl_remove_3(){
Pairlist p ;
p.push_back( 1 ) ;
p.push_back( 10.0 ) ;
p.push_back( 20.0 ) ;
p.remove( 1 ) ;
return p ;
}
// [[Rcpp::export]]
double runit_pl_square_1(){
Pairlist p ;
p.push_back( 1 ) ;
p.push_back( 10.0 ) ;
p.push_back( 20.0 ) ;
return p[1] ;
}
// [[Rcpp::export]]
Pairlist runit_pl_square_2(){
Pairlist p ;
p.push_back( 1 ) ;
p.push_back( 10.0 ) ;
p.push_back( 20.0 ) ;
p[1] = "foobar" ;
p[2] = p[0] ;
return p ;
}
// [[Rcpp::export]]
Formula runit_formula_(){
Formula f( "x ~ y + z" ) ;
return f;
}
// [[Rcpp::export]]
Formula runit_formula_SEXP(SEXP form){
Formula f(form) ;
return f;
}