diff --git a/ChangeLog b/ChangeLog index 366d88d5e..143af44fb 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2016-11-19 James J Balamuta + + * inst/unitTests/runit.environments.R: Added environment find unit tests + as well as a symbol access test for environment get. + * inst/unitTests/cpp/Environment.cpp: Idem + 2016-11-16 Dirk Eddelbuettel * DESCRIPTION: Release 0.12.8 diff --git a/inst/NEWS.Rd b/inst/NEWS.Rd index 2cfa62a35..4ffa69a2e 100644 --- a/inst/NEWS.Rd +++ b/inst/NEWS.Rd @@ -3,6 +3,13 @@ \newcommand{\ghpr}{\href{https://github.com/RcppCore/Rcpp/pull/#1}{##1}} \newcommand{\ghit}{\href{https://github.com/RcppCore/Rcpp/issues/#1}{##1}} +\section{Changes in Rcpp version 0.12.9 (2017-01-xx)}{ + \item Changes in Rcpp unit tests + \itemize{ + \item Added Environment::find unit tests and an Environment::get(Symbol) + test (James Balamuta in \ghpr{595} addressing issue \ghit{594}). + } +} \section{Changes in Rcpp version 0.12.8 (2016-11-16)}{ \itemize{ \item Changes in Rcpp API: diff --git a/inst/unitTests/cpp/Environment.cpp b/inst/unitTests/cpp/Environment.cpp index 1bce4b7ab..64fe2940a 100644 --- a/inst/unitTests/cpp/Environment.cpp +++ b/inst/unitTests/cpp/Environment.cpp @@ -37,6 +37,21 @@ SEXP runit_get( Environment env, std::string name){ return env.get( name ) ; } +// [[Rcpp::export]] +SEXP runit_get_symbol( Environment env, Symbol name){ + return env.get( name ) ; +} + +// [[Rcpp::export]] +SEXP runit_find( Environment env, std::string name){ + return env.find( name ) ; +} + +// [[Rcpp::export]] +SEXP runit_find_symbol( Environment env, Symbol name){ + return env.find( name ) ; +} + // [[Rcpp::export]] bool runit_exists( Environment env, std::string st){ return env.exists( st ) ; diff --git a/inst/unitTests/runit.environments.R b/inst/unitTests/runit.environments.R index 70871e1c6..2baec51b4 100644 --- a/inst/unitTests/runit.environments.R +++ b/inst/unitTests/runit.environments.R @@ -43,14 +43,44 @@ if (.runThisTest) { e <- new.env( ) e$a <- 1:10 e$b <- "foo" - - checkEquals( runit_get( e, "a" ), e$a, msg = "Environment::get()" ) - checkEquals( runit_get( e, "foobar" ), NULL, msg = "Environment::get()" ) + + # Access with string + checkEquals( runit_get( e, "a" ), e$a, msg = "Environment::get(string)" ) + checkEquals( runit_get( e, "foobar" ), NULL, msg = "Environment::get(string)" ) checkEquals( runit_get( asNamespace("Rcpp"), "CxxFlags"), Rcpp:::CxxFlags, - msg = "Environment(namespace)::get() " ) - - } - + msg = "Environment(namespace)::get(string) " ) + + # Access with Symbol constructed on call from string + checkEquals( runit_get_symbol( e, "a" ), e$a, msg = "Environment::get(Symbol)" ) + checkEquals( runit_get_symbol( e, "foobar" ), NULL, msg = "Environment::get(Symbol)" ) + checkEquals( runit_get_symbol( asNamespace("Rcpp"), "CxxFlags"), Rcpp:::CxxFlags, + msg = "Environment(namespace)::get(Symbol) " ) + + } + + test.environment.find <- function(){ + e <- new.env( ) + e$a <- 1:10 + e$b <- "foo" + bar <- "me" + + # Access with string + checkEquals( runit_find( e, "a" ), e$a, msg = "Environment::find(string)" ) + checkException( runit_find( e, "foobar" ), NULL, msg = "Environment::find(string) not found" ) + checkEquals( runit_find( e, "bar"), bar, msg = "Environment::find(string) inheritance" ) + checkEquals( runit_find( asNamespace("Rcpp"), "CxxFlags"), Rcpp:::CxxFlags, + msg = "Environment(namespace)::find(string)" ) + + # Access with Symbol constructed on call from string + checkEquals( runit_find_symbol( e, "a" ), e$a, msg = "Environment::find(Symbol)" ) + checkException( runit_find_symbol( e, "foobar" ), NULL, msg = "Environment::find(Symbol) not found" ) + checkEquals( runit_find_symbol( e, "bar"), bar, msg = "Environment::find(Symbol) inheritance" ) + checkEquals( runit_find_symbol( asNamespace("Rcpp"), "CxxFlags"), Rcpp:::CxxFlags, + msg = "Environment(namespace)::find(Symbol)" ) + + } + + test.environment.exists <- function(){ e <- new.env( ) e$a <- 1:10