1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00
ruby--ruby/test/-ext-/num2int/test_num2int.rb
akr 83f1be1bc3 * numeric.c (LONG_MIN_MINUS_ONE_IS_LESS_THAN): New macro.
(LLONG_MIN_MINUS_ONE_IS_LESS_THAN): Ditto.
  (rb_num2long): Use LONG_MIN_MINUS_ONE_IS_LESS_THAN.
  (rb_num2ulong): Ditto.
  (rb_num2ll): Use LLONG_MIN_MINUS_ONE_IS_LESS_THAN.
  (rb_num2ull): Ditto.

* test/-ext-/num2int/test_num2int.rb (asert_num2i_success): Test the
  value converted into a Float if Float can represent the value
  exactly.
  (asert_num2i_error): Ditto.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@39969 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-03-27 13:12:27 +00:00

142 lines
4 KiB
Ruby

require 'test/unit'
class TestNum2int < Test::Unit::TestCase
module Num2int
end
require '-test-/num2int/num2int'
SHRT_MIN = -32768
SHRT_MAX = 32767
USHRT_MAX = 65535
INT_MIN = -2147483648
INT_MAX = 2147483647
UINT_MAX = 4294967295
case [0].pack('L!').size
when 4
LONG_MAX = 2147483647
LONG_MIN = -2147483648
ULONG_MAX = 4294967295
when 8
LONG_MAX = 9223372036854775807
LONG_MIN = -9223372036854775808
ULONG_MAX = 18446744073709551615
end
LLONG_MAX = 9223372036854775807
LLONG_MIN = -9223372036854775808
ULLONG_MAX = 18446744073709551615
FIXNUM_MAX = LONG_MAX/2
FIXNUM_MIN = LONG_MIN/2
def asert_num2i_success(type, num, result=num)
method = "print_num2#{type}"
assert_output(result.to_s) do
Num2int.send(method, num)
end
if num.to_f.to_i == num
assert_output(result.to_s) do
Num2int.send(method, num.to_f)
end
end
end
def asert_num2i_error(type, num)
method = "print_num2#{type}"
assert_raise(RangeError) do
Num2int.send(method, num)
end
if num.to_f.to_i == num
assert_raise(RangeError) do
Num2int.send(method, num)
end
end
end
def test_num2short
asert_num2i_success(:short, SHRT_MIN)
asert_num2i_success(:short, SHRT_MAX)
asert_num2i_error(:short, SHRT_MIN-1)
asert_num2i_error(:short, SHRT_MAX+1)
end
def test_num2ushort
asert_num2i_success(:ushort, 0)
asert_num2i_success(:ushort, USHRT_MAX)
asert_num2i_success(:ushort, -1, USHRT_MAX)
asert_num2i_success(:ushort, SHRT_MIN, SHRT_MAX+1)
asert_num2i_error(:ushort, SHRT_MIN-1)
asert_num2i_error(:ushort, USHRT_MAX+1)
end
def test_num2int
asert_num2i_success(:int, INT_MIN)
asert_num2i_success(:int, INT_MAX)
asert_num2i_error(:int, INT_MIN-1)
asert_num2i_error(:int, INT_MAX+1)
end
def test_num2uint
asert_num2i_success(:uint, 0)
asert_num2i_success(:uint, UINT_MAX)
asert_num2i_success(:uint, -1, UINT_MAX)
asert_num2i_success(:uint, INT_MIN, INT_MAX+1)
asert_num2i_error(:uint, INT_MIN-1)
asert_num2i_error(:uint, UINT_MAX+1)
end
def test_num2long
#assert_output(LONG_MIN.to_s) do
# Num2int.print_num2long(LONG_MIN.to_f)
#end
asert_num2i_success(:long, LONG_MIN)
asert_num2i_success(:long, LONG_MAX)
asert_num2i_error(:long, LONG_MIN-1)
asert_num2i_error(:long, LONG_MAX+1)
asert_num2i_success(:long, FIXNUM_MIN)
asert_num2i_success(:long, FIXNUM_MIN-1)
asert_num2i_success(:long, FIXNUM_MAX)
asert_num2i_success(:long, FIXNUM_MAX+1)
end
def test_num2ulong
asert_num2i_success(:ulong, 0)
asert_num2i_success(:ulong, ULONG_MAX)
asert_num2i_success(:ulong, -1, ULONG_MAX)
asert_num2i_success(:ulong, LONG_MIN, LONG_MAX+1)
asert_num2i_error(:ulong, LONG_MIN-1)
asert_num2i_error(:ulong, ULONG_MAX+1)
asert_num2i_success(:ulong, FIXNUM_MIN, ULONG_MAX-FIXNUM_MAX)
asert_num2i_success(:ulong, FIXNUM_MIN-1, ULONG_MAX-FIXNUM_MAX-1)
asert_num2i_success(:ulong, FIXNUM_MAX, FIXNUM_MAX)
asert_num2i_success(:ulong, FIXNUM_MAX+1, FIXNUM_MAX+1)
end
def test_num2ll
asert_num2i_success(:ll, LLONG_MIN)
asert_num2i_success(:ll, LLONG_MAX)
asert_num2i_error(:ll, LLONG_MIN-1)
asert_num2i_error(:ll, LLONG_MAX+1)
asert_num2i_success(:ll, FIXNUM_MIN)
asert_num2i_success(:ll, FIXNUM_MIN-1)
asert_num2i_success(:ll, FIXNUM_MAX)
asert_num2i_success(:ll, FIXNUM_MAX+1)
end if defined?(Num2int.print_num2ll)
def test_num2ull
asert_num2i_success(:ull, 0)
asert_num2i_success(:ull, ULLONG_MAX)
asert_num2i_success(:ull, -1, ULLONG_MAX)
asert_num2i_success(:ull, LLONG_MIN, LLONG_MAX+1)
asert_num2i_error(:ull, LLONG_MIN-1)
asert_num2i_error(:ull, ULLONG_MAX+1)
asert_num2i_success(:ull, FIXNUM_MIN, ULLONG_MAX-FIXNUM_MAX)
asert_num2i_success(:ull, FIXNUM_MIN-1, ULLONG_MAX-FIXNUM_MAX-1)
asert_num2i_success(:ull, FIXNUM_MAX)
asert_num2i_success(:ull, FIXNUM_MAX+1)
end if defined?(Num2int.print_num2ull)
end