Hi Qiang, I think you're right -- I just took a peek and that looks like the offending bit. I'm going to strip it out, run tests and then commit if everything looks good.
Thanks! Kevin On Fri, Jan 2, 2015 at 6:26 PM, Qiang Kou <q...@umail.iu.edu> wrote: > It seems fixed after removing that line [1]. > >> library(Rcpp) >> sourceCpp("seteq.cpp") >> seteq1(c(1,2,3), c(3,2,1)) > [1] TRUE >> seteq1(c(1,2,3), c(3,2,1)) > [1] TRUE >> seteq1(c("a","b"), c("a","b")) > [1] TRUE >> seteq1(c(1,2,3), c(3,2)) > [1] FALSE >> seteq1(c("a","b"), c("a","b","k")) > [1] FALSE >> seteq1(c("a","b"), c("a","b","b")) > [1] TRUE > > [1] > https://github.com/RcppCore/Rcpp/blob/master/inst/include/Rcpp/sugar/functions/setdiff.h#L80 > > > On Fri, Jan 2, 2015 at 9:23 PM, Qiang Kou <q...@umail.iu.edu> wrote: >> >> I think the bug is from [1]. >> >> This line doesn't make much sense. >> >> Best, >> >> KK >> >> >> [1] >> https://github.com/RcppCore/Rcpp/blob/master/inst/include/Rcpp/sugar/functions/setdiff.h#L80 >> >> On Fri, Jan 2, 2015 at 9:22 PM, Kevin Ushey <kevinus...@gmail.com> wrote: >>> >>> 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 >> >> >> >> >> -- >> Qiang Kou >> q...@umail.iu.edu >> School of Informatics and Computing, Indiana University >> > > > > -- > Qiang Kou > q...@umail.iu.edu > School of Informatics and Computing, Indiana University > _______________________________________________ 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