diff options
author | marcandre <marcandre@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2009-11-14 00:17:07 +0000 |
---|---|---|
committer | marcandre <marcandre@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2009-11-14 00:17:07 +0000 |
commit | 0853a5cc66fe780de66802d5ac5bf997c718291d (patch) | |
tree | 80305aeec998e79aab5fcb38927391049cc01134 /ext | |
parent | ee63030ea9a6783b35a6eec564437e5e4cf50bcb (diff) | |
download | ruby-0853a5cc66fe780de66802d5ac5bf997c718291d.tar.gz ruby-0853a5cc66fe780de66802d5ac5bf997c718291d.tar.xz ruby-0853a5cc66fe780de66802d5ac5bf997c718291d.zip |
* ext/bigdecimal/bigdecimal.c (BigDecimalCmp): Fix comparisons [ruby-core:26646]
* test/bigdecimal/test_bigdecimal.rb (class): Fix and improve tests.
git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@25765 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'ext')
-rw-r--r-- | ext/bigdecimal/bigdecimal.c | 10 |
1 files changed, 4 insertions, 6 deletions
diff --git a/ext/bigdecimal/bigdecimal.c b/ext/bigdecimal/bigdecimal.c index f4c22b506..38772f68f 100644 --- a/ext/bigdecimal/bigdecimal.c +++ b/ext/bigdecimal/bigdecimal.c @@ -724,23 +724,21 @@ BigDecimalCmp(VALUE self, VALUE r,char op) switch(op) { - case '*': f = rb_intern("<=>");break; - case '=': f = rb_intern("=="); break; - case '!': f = rb_intern("!="); break; + case '*': return rb_num_coerce_cmp(self,r,rb_intern("<=>")); + case '=': return RTEST(rb_num_coerce_cmp(self,r,rb_intern("=="))) ? Qtrue : Qfalse; case 'G': f = rb_intern(">="); break; case 'L': f = rb_intern("<="); break; case '>': case '<': f = (ID)op; break; } - return rb_num_coerce_cmp(self,r,f); + return rb_num_coerce_relop(self,r,f); } SAVE(b); e = VpComp(a, b); - if(e==999) return Qnil; + if(e==999) return (op == '*') ? Qnil : Qfalse; switch(op) { case '*': return INT2FIX(e); /* any op */ case '=': if(e==0) return Qtrue ; return Qfalse; - case '!': if(e!=0) return Qtrue ; return Qfalse; case 'G': if(e>=0) return Qtrue ; return Qfalse; case '>': if(e> 0) return Qtrue ; return Qfalse; case 'L': if(e<=0) return Qtrue ; return Qfalse; |