Different FixNum/BigNum boundaries as compared to MRI
-----------------------------------------------------

                 Key: JRUBY-1587
                 URL: http://jira.codehaus.org/browse/JRUBY-1587
             Project: JRuby
          Issue Type: Bug
          Components: Core Classes/Modules
    Affects Versions: JRuby 1.x
         Environment: Ubunty Linux 7.10 x32,
ruby 1.8.5 (2007-11-20 rev 4842) [i386-jruby1.1b1]
            Reporter: Vladimir Sizikov
            Priority: Minor


Hmm, this is a tricky one. :) It seems that JRuby and MRI have different limits 
to separate Fixnum and Bignum.

And from the official ruby docs: "A Fixnum holds Integer values that can be 
represented in a native machine word (minus 1 bit). If any operation on a 
Fixnum exceeds this range, the value is automatically converted to a Bignum.".

So, MRI uses 0x3fffffff as the biggest FixNum under 32bit environment.
And JRuby *always* uses 64bit value: jruby -e 'p (0x7fffffffffffffff + 
1).class' ---> Bignum.

The differences are easy to see:

1. ruby -e 'p (0x3fffffff + 1).class' ---> Bignum

2. jruby -e 'p (0x3fffffff + 1).class' ---> Fixnum

Also, this is a root cause for one test failure from rubinius specs:
(basically, division by 0.0 behaves differently in case of FixNum or BigNum).

Note: there is also a separate issue in the rubinius spec test, since the
0x3fffffff + 1 value is hardcoded there, which is not correct for 64bit 
systems, based on the official spec quoted above.

#>bin/mspec  -t jruby spec/core/bignum
.................F.E...............................................................

2)
Bignum#div does NOT raise ZeroDivisionError if other is zero and is a Float 
FAILED
Infinity:
/opt/work/rubinius/./spec/core/bignum/shared/divide.rb:17
/opt/work/rubinius/./spec/core/bignum/shared/divide.rb:17:in `it'
/opt/work/rubinius/spec/mini_rspec.rb:403:in `it'
/opt/work/rubinius/./spec/core/bignum/shared/divide.rb:17:in `it'
/opt/work/rubinius/./spec/core/bignum/shared/divide.rb:17:in `describe'
/opt/work/rubinius/spec/mini_rspec.rb:399:in `describe'
/opt/work/rubinius/./spec/core/bignum/shared/divide.rb:2:in `describe'
/opt/work/rubinius/./spec/core/bignum/shared/divide.rb:2:in `call'
/opt/work/rubinius/./spec/core/bignum/../../spec_helper.rb:154:in 
`it_behaves_like'
/opt/work/rubinius/./spec/core/bignum/div_spec.rb:6:in `it_behaves_like'
/opt/work/rubinius/./spec/core/bignum/div_spec.rb:5:in `describe'
/opt/work/rubinius/spec/mini_rspec.rb:399:in `describe'
/opt/work/rubinius/./spec/core/bignum/div_spec.rb:5:in `describe'
/opt/work/rubinius/./spec/core/bignum/div_spec.rb:5:in `load'
last_mspec.rb:11:in `load'
last_mspec.rb:1:in `each'
last_mspec.rb:6:in `each'


-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: 
http://jira.codehaus.org/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

---------------------------------------------------------------------
To unsubscribe from this list please visit:

    http://xircles.codehaus.org/manage_email

Reply via email to