// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // misc.cpp: Rcpp R/C++ interface class library -- misc unit tests // // Copyright (C) 2013 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 ; using namespace std; #include #include class simple { Rcpp::Dimension dd; public: simple(SEXP xp) : dd(xp) {} int nrow() const { return dd[0]; } int ncol() const { return dd[1]; } }; // [[Rcpp::export]] SEXP symbol_(){ return LogicalVector::create( Symbol( Rf_install("foobar") ) == Rf_install("foobar"), Symbol( Rf_mkChar("foobar") ) == Rf_install("foobar"), Symbol( Rf_mkString("foobar") ) == Rf_install("foobar"), Symbol( "foobar" ) == Rf_install("foobar") ) ; } // [[Rcpp::export]] Symbol symbol_ctor(SEXP x){ return Symbol(x); } // [[Rcpp::export]] List Argument_(){ Argument x("x"), y("y"); return List::create( x = 2, y = 3 ); } // [[Rcpp::export]] int Dimension_const( SEXP ia ){ simple ss(ia); return ss.nrow(); } // [[Rcpp::export]] SEXP evaluator_error(){ return Rcpp_eval( Rf_lang2( Rf_install("stop"), Rf_mkString( "boom" ) ) ) ; } // [[Rcpp::export]] SEXP evaluator_ok(SEXP x){ return Rcpp_eval( Rf_lang2( Rf_install("sample"), x ) ) ; } // [[Rcpp::export]] void exceptions_(){ throw std::range_error("boom") ; } // [[Rcpp::export]] LogicalVector has_iterator_( ){ return LogicalVector::create( (bool)Rcpp::traits::has_iterator< std::vector >::value, (bool)Rcpp::traits::has_iterator< std::list >::value, (bool)Rcpp::traits::has_iterator< std::deque >::value, (bool)Rcpp::traits::has_iterator< std::set >::value, (bool)Rcpp::traits::has_iterator< std::map >::value, (bool)Rcpp::traits::has_iterator< std::pair >::value, (bool)Rcpp::traits::has_iterator< Rcpp::Symbol >::value ); } // [[Rcpp::export]] void test_rcout(std::string tfile, std::string teststring){ // define and open testfile std::ofstream testfile(tfile.c_str()); // save output buffer of the Rcout stream std::streambuf* Rcout_buffer = Rcout.rdbuf(); // redirect ouput into testfile Rcout.rdbuf( testfile.rdbuf() ); // write a test string to the file Rcout << teststring << std::endl; // restore old output buffer Rcout.rdbuf(Rcout_buffer); // close testfile testfile.close(); } // [[Rcpp::export]] LogicalVector na_proxy(){ CharacterVector s("foo") ; return LogicalVector::create( NA_REAL == NA, NA_INTEGER == NA, NA_STRING == NA, true == NA, false == NA, 1.2 == NA, 12 == NA, "foo" == NA, s[0] == NA, NA == NA_REAL, NA == NA_INTEGER, NA == NA_STRING, NA == true, NA == false, NA == 1.2 , NA == 12 , NA == "foo", NA == s[0] ) ; } // [[Rcpp::export]] StretchyList stretchy_list(){ StretchyList out ; out.push_back( 1 ) ; out.push_front( "foo" ) ; out.push_back( 3.2 ) ; return out; } // [[Rcpp::export]] StretchyList named_stretchy_list(){ StretchyList out ; out.push_back( _["b"] = 1 ) ; out.push_front( _["a"] = "foo" ) ; out.push_back( _["c"] = 3.2 ) ; return out; } // [[Rcpp::export]] void test_stop_variadic(){ stop( "%s %d", "foo", 3 ) ; }