1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
|
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 assert_num2i_success_internal(exp, func, arg)
mesg = "#{func}(#{arg.inspect})"
method = "print_#{func}".downcase
out = err = nil
assert_nothing_raised(mesg) {
out, err = capture_io { Num2int.send(method, arg) }
}
STDERR.puts err if err && !err.empty?
assert_equal(exp, out, mesg)
end
def assert_num2i_success(type, num, result=num)
func = "NUM2#{type}".upcase
assert_num2i_success_internal(result.to_s, func, num)
if num.to_f.to_i == num
assert_num2i_success_internal(result.to_s, func, num.to_f)
end
end
def assert_num2i_error_internal(func, arg)
method = "print_#{func}".downcase
assert_raise(RangeError, "#{func}(#{arg.inspect})") {
Num2int.send(method, arg)
}
end
def assert_num2i_error(type, num)
func = "NUM2#{type}".upcase
assert_num2i_error_internal(func, num)
if num.to_f.to_i == num
assert_num2i_error_internal(func, num.to_f)
end
end
def test_num2short
assert_num2i_success(:short, SHRT_MIN)
assert_num2i_success(:short, SHRT_MAX)
assert_num2i_error(:short, SHRT_MIN-1)
assert_num2i_error(:short, SHRT_MAX+1)
end
def test_num2ushort
assert_num2i_success(:ushort, 0)
assert_num2i_success(:ushort, USHRT_MAX)
assert_num2i_success(:ushort, -1, USHRT_MAX)
assert_num2i_success(:ushort, SHRT_MIN, SHRT_MAX+1)
assert_num2i_error(:ushort, SHRT_MIN-1)
assert_num2i_error(:ushort, USHRT_MAX+1)
end
def test_num2int
assert_num2i_success(:int, INT_MIN)
assert_num2i_success(:int, INT_MAX)
assert_num2i_error(:int, INT_MIN-1)
assert_num2i_error(:int, INT_MAX+1)
end
def test_num2uint
assert_num2i_success(:uint, 0)
assert_num2i_success(:uint, UINT_MAX)
assert_num2i_success(:uint, -1, UINT_MAX)
assert_num2i_success(:uint, INT_MIN, INT_MAX+1)
assert_num2i_error(:uint, INT_MIN-1)
assert_num2i_error(:uint, UINT_MAX+1)
end
def test_num2long
assert_num2i_success(:long, LONG_MIN)
assert_num2i_success(:long, LONG_MAX)
assert_num2i_error(:long, LONG_MIN-1)
assert_num2i_error(:long, LONG_MAX+1)
assert_num2i_success(:long, FIXNUM_MIN)
assert_num2i_success(:long, FIXNUM_MIN-1)
assert_num2i_success(:long, FIXNUM_MAX)
assert_num2i_success(:long, FIXNUM_MAX+1)
end
def test_num2ulong
assert_num2i_success(:ulong, 0)
assert_num2i_success(:ulong, ULONG_MAX)
assert_num2i_success(:ulong, -1, ULONG_MAX)
assert_num2i_success(:ulong, LONG_MIN, LONG_MAX+1)
assert_num2i_error(:ulong, LONG_MIN-1)
assert_num2i_error(:ulong, ULONG_MAX+1)
assert_num2i_success(:ulong, FIXNUM_MIN, ULONG_MAX-FIXNUM_MAX)
assert_num2i_success(:ulong, FIXNUM_MIN-1, ULONG_MAX-FIXNUM_MAX-1)
assert_num2i_success(:ulong, FIXNUM_MAX, FIXNUM_MAX)
assert_num2i_success(:ulong, FIXNUM_MAX+1, FIXNUM_MAX+1)
end
def test_num2ll
assert_num2i_success(:ll, LLONG_MIN)
assert_num2i_success(:ll, LLONG_MAX)
assert_num2i_error(:ll, LLONG_MIN-1)
assert_num2i_error(:ll, LLONG_MAX+1)
assert_num2i_success(:ll, FIXNUM_MIN)
assert_num2i_success(:ll, FIXNUM_MIN-1)
assert_num2i_success(:ll, FIXNUM_MAX)
assert_num2i_success(:ll, FIXNUM_MAX+1)
end if defined?(Num2int.print_num2ll)
def test_num2ull
assert_num2i_success(:ull, 0)
assert_num2i_success(:ull, ULLONG_MAX)
assert_num2i_success(:ull, -1, ULLONG_MAX)
assert_num2i_success(:ull, LLONG_MIN, LLONG_MAX+1)
assert_num2i_error(:ull, LLONG_MIN-1)
assert_num2i_error(:ull, ULLONG_MAX+1)
assert_num2i_success(:ull, FIXNUM_MIN, ULLONG_MAX-FIXNUM_MAX)
assert_num2i_success(:ull, FIXNUM_MIN-1, ULLONG_MAX-FIXNUM_MAX-1)
assert_num2i_success(:ull, FIXNUM_MAX)
assert_num2i_success(:ull, FIXNUM_MAX+1)
end if defined?(Num2int.print_num2ull)
end
|