Hi Søren, Thanks for the bug report -- it looks like you're right, `setequal` is broken, and we never knew about it because we don't have any unit tests for it. Whoops!
I'll take a look at what's going on and commit a fix + tests soon -- for now, you can use the workaround with `setdiff` which appears to behave correctly. Cheers, Kevin On Fri, Jan 2, 2015 at 3:13 PM, Søren Højsgaard <sor...@math.aau.dk> wrote: > Dear all, > > There might be an error in setequal() from sugar. Consider this > > #include <Rcpp.h> > using namespace Rcpp; > > //[[Rcpp::export]] > bool seteq1(CharacterVector x, CharacterVector y){ > return setequal(x,y); > } > > //[[Rcpp::export]] > bool seteq2(CharacterVector x, CharacterVector y){ > return > (((CharacterVector) setdiff(x,y)).length()==0) & > (((CharacterVector) setdiff(y,x)).length()==0) ; > } > > The examples below does not give what I expect when calling seteq1 whereas > seteq2 gives what I expect. Am I completely wrong here? > > Regards > Søren > > seteq1(c(1,2,3), c(3,2,1)) > seteq1(c("a","b"), c("a","b")) > seteq1(c(1,2,3), c(3,2)) > seteq1(c("a","b"), c("a","b","k")) > > seteq2(c(1,2,3), c(3,2,1)) > seteq2(c("a","b"), c("a","b")) > seteq2(c(1,2,3), c(3,2)) > seteq2(c("a","b"), c("a","b","k")) > >> seteq1(c(1,2,3), c(3,2,1)) > [1] FALSE > >> seteq1(c("a","b"), c("a","b")) > [1] FALSE > >> seteq1(c(1,2,3), c(3,2)) > [1] FALSE > >> seteq1(c("a","b"), c("a","b","k")) > [1] FALSE > >> seteq2(c(1,2,3), c(3,2,1)) > [1] TRUE > >> seteq2(c("a","b"), c("a","b")) > [1] TRUE > >> seteq2(c(1,2,3), c(3,2)) > [1] FALSE > >> seteq2(c("a","b"), c("a","b","k")) > [1] FALSE > > _______________________________________________ > Rcpp-devel mailing list > Rcpp-devel@lists.r-forge.r-project.org > https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel _______________________________________________ Rcpp-devel mailing list Rcpp-devel@lists.r-forge.r-project.org https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel