ruby-decimal 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,40 @@
1
+
2
+ if test(?e, PROJ.test.file) or not PROJ.test.files.to_a.empty?
3
+ require 'rake/testtask'
4
+
5
+ namespace :test do
6
+
7
+ Rake::TestTask.new(:run) do |t|
8
+ t.libs = PROJ.libs
9
+ t.test_files = if test(?f, PROJ.test.file) then [PROJ.test.file]
10
+ else PROJ.test.files end
11
+ t.ruby_opts += PROJ.ruby_opts
12
+ t.ruby_opts += PROJ.test.opts
13
+ end
14
+
15
+ if HAVE_RCOV
16
+ desc 'Run rcov on the unit tests'
17
+ task :rcov => :clobber_rcov do
18
+ opts = PROJ.rcov.opts.dup << '-o' << PROJ.rcov.dir
19
+ opts = opts.join(' ')
20
+ files = if test(?f, PROJ.test.file) then [PROJ.test.file]
21
+ else PROJ.test.files end
22
+ files = files.join(' ')
23
+ sh "#{RCOV} #{files} #{opts}"
24
+ end
25
+
26
+ task :clobber_rcov do
27
+ rm_r 'coverage' rescue nil
28
+ end
29
+ end
30
+
31
+ end # namespace :test
32
+
33
+ desc 'Alias to test:run'
34
+ task :test => 'test:run'
35
+
36
+ task :clobber => 'test:clobber_rcov' if HAVE_RCOV
37
+
38
+ end
39
+
40
+ # EOF
@@ -0,0 +1,11 @@
1
+ require File.dirname(__FILE__) + '/test_flags.rb'
2
+ require File.dirname(__FILE__) + '/test_basic.rb'
3
+ require File.dirname(__FILE__) + '/test_dectest.rb'
4
+ require File.dirname(__FILE__) + '/test_exact.rb'
5
+ require File.dirname(__FILE__) + '/test_round.rb'
6
+ require File.dirname(__FILE__) + '/test_multithreading.rb'
7
+ require File.dirname(__FILE__) + '/test_comparisons.rb'
8
+ require File.dirname(__FILE__) + '/test_coercion.rb'
9
+ require File.dirname(__FILE__) + '/test_to_int.rb'
10
+ require File.dirname(__FILE__) + '/test_to_rf.rb'
11
+ require File.dirname(__FILE__) + '/test_define_conversions.rb'
@@ -0,0 +1,7 @@
1
+ require 'test/unit'
2
+ require File.dirname(__FILE__) + '/../lib/decimal'
3
+
4
+ def initialize_context
5
+ Decimal.context = Decimal::ExtendedContext
6
+ end
7
+
@@ -0,0 +1,398 @@
1
+ require File.dirname(__FILE__) + '/helper.rb'
2
+
3
+ def exp(x,c=nil)
4
+ i, lasts, s, fact, num = 0, 0, 1, 1, 1
5
+ Decimal.local_context(c) do
6
+ # result context
7
+ Decimal.local_context do |context|
8
+ # working context
9
+ context.precision += 2
10
+ context.rounding = Decimal::ROUND_HALF_EVEN
11
+ while s != lasts
12
+ lasts = s
13
+ i += 1
14
+ fact *= i
15
+ num *= x
16
+ s += num / fact
17
+ end
18
+ end
19
+ +s
20
+ end
21
+ end
22
+
23
+ def exp1(x, c=nil)
24
+ return Decimal(BigDecimal("NaN")) if x.infinite? || x.nan?
25
+ y = nil
26
+ ext = 2
27
+ Decimal.local_context(c) do |context|
28
+ n = (context.precision += ext)
29
+
30
+ one = Decimal("1")
31
+ x1 = one
32
+ y = one
33
+ d = y
34
+ z = one
35
+ i = 0
36
+ while d.nonzero? && ((m = n - (y.fractional_exponent - d.fractional_exponent).abs) > 0)
37
+ m = ext if m < ext
38
+ x1 *= x
39
+ i += 1
40
+ z *= i
41
+
42
+ #d = x1.divide(z,:precision=>m)
43
+ context.precision = m
44
+ d = x1/z
45
+ context.precision = n
46
+
47
+ y += d
48
+ end
49
+ end
50
+ return +y
51
+ end
52
+
53
+
54
+
55
+ class TestBasic < Test::Unit::TestCase
56
+
57
+
58
+ def setup
59
+ initialize_context
60
+ end
61
+
62
+
63
+ def test_basic
64
+
65
+ Decimal.context.precision = 4
66
+ assert_equal 4, Decimal.context.precision
67
+ assert_equal Decimal("0.3333"), Decimal(1)/Decimal(3)
68
+ Decimal.context.precision = 10
69
+ assert_equal 10, Decimal.context.precision
70
+ assert_equal Decimal("0.3333333333"), Decimal(1)/Decimal(3)
71
+ Decimal.local_context {
72
+ assert_equal 10, Decimal.context.precision
73
+ Decimal.context.precision = 3
74
+ assert_equal 3, Decimal.context.precision
75
+ assert_equal Decimal("0.333"), Decimal(1)/Decimal(3)
76
+ }
77
+ assert_equal 10, Decimal.context.precision
78
+ assert_equal "0.3333333333", (Decimal(1)/Decimal(3)).to_s
79
+ assert_equal Decimal("0.3333333333"), Decimal(1)/Decimal(3)
80
+
81
+ Decimal.local_context(:precision=>4) {
82
+ assert_equal 4, Decimal.context.precision
83
+ }
84
+ assert_equal 10, Decimal.context.precision
85
+
86
+ Decimal.context(:precision=>4) {
87
+ assert_equal 4, Decimal.context.precision
88
+ }
89
+ assert_equal 10, Decimal.context.precision
90
+
91
+ Decimal.local_context(Decimal::BasicContext) {
92
+ assert_equal :half_up, Decimal.context.rounding
93
+ assert_equal 9, Decimal.context.precision
94
+ }
95
+ assert_equal :half_even, Decimal.context.rounding
96
+ assert_equal 10, Decimal.context.precision
97
+
98
+ Decimal.context(Decimal::BasicContext) {
99
+ assert_equal :half_up, Decimal.context.rounding
100
+ assert_equal 9, Decimal.context.precision
101
+ }
102
+ assert_equal :half_even, Decimal.context.rounding
103
+ assert_equal 10, Decimal.context.precision
104
+
105
+ Decimal.local_context(Decimal::BasicContext, :precision=>4) {
106
+ assert_equal :half_up, Decimal.context.rounding
107
+ assert_equal 4, Decimal.context.precision
108
+ }
109
+ assert_equal :half_even, Decimal.context.rounding
110
+ assert_equal 10, Decimal.context.precision
111
+
112
+ Decimal.context(Decimal::BasicContext, :precision=>4) {
113
+ assert_equal :half_up, Decimal.context.rounding
114
+ assert_equal 4, Decimal.context.precision
115
+ }
116
+ assert_equal :half_even, Decimal.context.rounding
117
+ assert_equal 10, Decimal.context.precision
118
+
119
+
120
+ assert_equal Decimal("0."+"3"*100), Decimal(1)./(Decimal(3),Decimal.Context(:precision=>100))
121
+ assert_equal 10, Decimal.context.precision
122
+ assert_equal Decimal("0.33"), Decimal(1).divide(Decimal(3),Decimal.Context(:precision=>2))
123
+ assert_equal Decimal("0.3333333333"), Decimal(1)/Decimal(3)
124
+
125
+ assert_equal Decimal("11.0"), Decimal(11).abs
126
+ assert_equal Decimal("11.0"), Decimal(-11).abs
127
+ assert_equal Decimal("-11.0"), -Decimal(11)
128
+
129
+ assert_equal [-11,0], Decimal("-11").to_int_scale
130
+
131
+ assert_equal [-110,-1], Decimal("-11.0").to_int_scale
132
+ assert_equal [-11,-1], Decimal("-1.1").to_int_scale
133
+ assert_equal [-110,0], Decimal("-110").to_int_scale
134
+ assert_equal [110,-1], Decimal("11.0").to_int_scale
135
+ assert_equal [11,-1], Decimal("1.1").to_int_scale
136
+ assert_equal [110,0], Decimal("110").to_int_scale
137
+
138
+ assert_equal [-11,0], Decimal("-11.0").reduce.to_int_scale
139
+ assert_equal [-11,-1], Decimal("-1.1").reduce.to_int_scale
140
+ assert_equal [-11,1], Decimal("-110").reduce.to_int_scale
141
+ assert_equal [11,0], Decimal("11.0").reduce.to_int_scale
142
+ assert_equal [11,-1], Decimal("1.1").reduce.to_int_scale
143
+ assert_equal [11,1], Decimal("110").reduce.to_int_scale
144
+
145
+
146
+ assert_equal Decimal('2.1'), Decimal('2.1').remainder(Decimal('3'))
147
+ assert_equal Decimal('-2.1'), Decimal('-2.1').remainder(Decimal('3'))
148
+ assert_equal Decimal('2.1'), Decimal('2.1').remainder(Decimal('-3'))
149
+ assert_equal Decimal('-2.1'), Decimal('-2.1').remainder(Decimal('-3'))
150
+ assert_equal Decimal('1'), Decimal('10').remainder(Decimal('3'))
151
+ assert_equal Decimal('-1'), Decimal('-10').remainder(Decimal('3'))
152
+ assert_equal Decimal('1'), Decimal('10').remainder(Decimal('-3'))
153
+ assert_equal Decimal('-1'), Decimal('-10').remainder(Decimal('-3'))
154
+ assert_equal Decimal('0.2'), Decimal('10.2').remainder(Decimal('1'))
155
+ assert_equal Decimal('0.1'), Decimal('10').remainder(Decimal('0.3'))
156
+ assert_equal Decimal('1.0'), Decimal('3.6').remainder(Decimal('1.3'))
157
+ assert_equal Decimal('2'), Decimal('2').remainder(Decimal('3'))
158
+ assert_equal Decimal('1'), Decimal('10').remainder(Decimal('3'))
159
+ assert_equal Decimal('.1'), Decimal('1').remainder(Decimal('0.3'))
160
+
161
+ assert_equal Decimal('0'), Decimal('2.1').divide_int(Decimal('3'))
162
+ assert_equal Decimal('0'), Decimal('-2.1').divide_int(Decimal('3'))
163
+ assert_equal Decimal('0'), Decimal('2.1').divide_int(Decimal('-3'))
164
+ assert_equal Decimal('0'), Decimal('-2.1').divide_int(Decimal('-3'))
165
+ assert_equal Decimal('3'), Decimal('10').divide_int(Decimal('3'))
166
+ assert_equal Decimal('-3'), Decimal('-10').divide_int(Decimal('3'))
167
+ assert_equal Decimal('-3'), Decimal('10').divide_int(Decimal('-3'))
168
+ assert_equal Decimal('3'), Decimal('-10').divide_int(Decimal('-3'))
169
+ assert_equal Decimal('10'), Decimal('10.2').divide_int(Decimal('1'))
170
+ assert_equal Decimal('33'), Decimal('10').divide_int(Decimal('0.3'))
171
+ assert_equal Decimal('2'), Decimal('3.6').divide_int(Decimal('1.3'))
172
+ assert_equal Decimal('0'), Decimal('2').divide_int(Decimal('3'))
173
+ assert_equal Decimal('3'), Decimal('10').divide_int(Decimal('3'))
174
+ assert_equal Decimal('3'), Decimal('1').divide_int(Decimal('0.3'))
175
+
176
+ assert_equal Decimal('2.1'), Decimal('2.1').modulo(Decimal('3'))
177
+ assert_equal Decimal('0.9'), Decimal('-2.1').modulo(Decimal('3'))
178
+ assert_equal Decimal('-0.9'), Decimal('2.1').modulo(Decimal('-3'))
179
+ assert_equal Decimal('-2.1'), Decimal('-2.1').modulo(Decimal('-3'))
180
+ assert_equal Decimal('1'), Decimal('10').modulo(Decimal('3'))
181
+ assert_equal Decimal('2'), Decimal('-10').modulo(Decimal('3'))
182
+ assert_equal Decimal('-2'), Decimal('10').modulo(Decimal('-3'))
183
+ assert_equal Decimal('-1'), Decimal('-10').modulo(Decimal('-3'))
184
+ assert_equal Decimal('0.2'), Decimal('10.2').modulo(Decimal('1'))
185
+ assert_equal Decimal('0.1'), Decimal('10').modulo(Decimal('0.3'))
186
+ assert_equal Decimal('1.0'), Decimal('3.6').modulo(Decimal('1.3'))
187
+ assert_equal Decimal('2'), Decimal('2').modulo(Decimal('3'))
188
+ assert_equal Decimal('1'), Decimal('10').modulo(Decimal('3'))
189
+ assert_equal Decimal('.1'), Decimal('1').modulo(Decimal('0.3'))
190
+
191
+ assert_equal Decimal('0'), Decimal('2.1').div(Decimal('3'))
192
+ assert_equal Decimal('-1'), Decimal('-2.1').div(Decimal('3'))
193
+ assert_equal Decimal('-1'), Decimal('2.1').div(Decimal('-3'))
194
+ assert_equal Decimal('0'), Decimal('-2.1').div(Decimal('-3'))
195
+ assert_equal Decimal('3'), Decimal('10').div(Decimal('3'))
196
+ assert_equal Decimal('-4'), Decimal('-10').div(Decimal('3'))
197
+ assert_equal Decimal('-4'), Decimal('10').div(Decimal('-3'))
198
+ assert_equal Decimal('3'), Decimal('-10').div(Decimal('-3'))
199
+ assert_equal Decimal('10'), Decimal('10.2').div(Decimal('1'))
200
+ assert_equal Decimal('33'), Decimal('10').div(Decimal('0.3'))
201
+ assert_equal Decimal('2'), Decimal('3.6').div(Decimal('1.3'))
202
+ assert_equal Decimal('0'), Decimal('2').div(Decimal('3'))
203
+ assert_equal Decimal('3'), Decimal('10').div(Decimal('3'))
204
+ assert_equal Decimal('3'), Decimal('1').div(Decimal('0.3'))
205
+
206
+ assert_equal Decimal('-0.9'), Decimal('2.1').remainder_near(Decimal('3'))
207
+ assert_equal Decimal('-2'), Decimal('10').remainder_near(Decimal('6'))
208
+ assert_equal Decimal('1'), Decimal('10').remainder_near(Decimal('3'))
209
+ assert_equal Decimal('-1'), Decimal('-10').remainder_near(Decimal('3'))
210
+ assert_equal Decimal('0.2'), Decimal('10.2').remainder_near(Decimal('1'))
211
+ assert_equal Decimal('0.1'), Decimal('10').remainder_near(Decimal('0.3'))
212
+ assert_equal Decimal('-0.3'), Decimal('3.6').remainder_near(Decimal('1.3'))
213
+
214
+
215
+ assert_equal 2, Decimal('123.4567').adjusted_exponent
216
+ assert_equal 2, Decimal('123.45670').adjusted_exponent
217
+ assert_equal 2, Decimal.context.scaleb(Decimal('1.2345670'),2).adjusted_exponent
218
+ assert_equal 2, Decimal.context.scaleb(Decimal('1.2345670'),Decimal('2')).adjusted_exponent
219
+ assert_equal Decimal(2), Decimal.context.logb(Decimal('123.4567'))
220
+ assert_equal Decimal(2), Decimal.context.logb(Decimal('123.45670'))
221
+ assert_equal 3, Decimal('123.4567').fractional_exponent
222
+ assert_equal 3, Decimal('123.45670').fractional_exponent
223
+
224
+ assert_equal(-7, Decimal.context.normalized_integral_exponent(Decimal('123.4567')))
225
+ assert_equal(1234567000, Decimal.context.normalized_integral_significand(Decimal('123.4567')))
226
+
227
+ assert_equal 7, Decimal('123.4567').number_of_digits
228
+ assert_equal 8, Decimal('123.45670').number_of_digits
229
+ assert_equal 7, Decimal('123.45670').reduce.number_of_digits
230
+
231
+ assert_equal 1234567, Decimal('123.4567').integral_significand
232
+ assert_equal 12345670, Decimal('123.45670').integral_significand
233
+ assert_equal 1234567, Decimal('123.45670').reduce.integral_significand
234
+
235
+ assert_equal 2, Decimal('-123.4567').adjusted_exponent
236
+ assert_equal 2, Decimal('-123.45670').adjusted_exponent
237
+ assert_equal 2, Decimal.context.scaleb(Decimal('-1.2345670'),2).adjusted_exponent
238
+ assert_equal 2, Decimal.context.scaleb(Decimal('-1.2345670'),Decimal('2')).adjusted_exponent
239
+ assert_equal Decimal(2), Decimal.context.logb(Decimal('-123.4567'))
240
+ assert_equal Decimal(2), Decimal.context.logb(Decimal('-123.45670'))
241
+ assert_equal 3, Decimal('-123.4567').fractional_exponent
242
+ assert_equal 3, Decimal('-123.45670').fractional_exponent
243
+
244
+ assert_equal(-7, Decimal.context.normalized_integral_exponent(Decimal('-123.4567')))
245
+ assert_equal(1234567000, Decimal.context.normalized_integral_significand(Decimal('-123.4567')))
246
+
247
+ assert_equal 7, Decimal('-123.4567').number_of_digits
248
+ # assert_equal 9, Decimal('123.45670').number_of_digits # not with BigDecimal
249
+ assert_equal 7, Decimal('-123.45670').reduce.number_of_digits
250
+
251
+ assert_equal(1234567, Decimal('-123.4567').integral_significand)
252
+ #assert_equal(12345670, Decimal('-123.45670').integral_significand) # not with BigDecimal
253
+ assert_equal(1234567, Decimal('-123.45670').reduce.integral_significand)
254
+
255
+ x = Decimal('123.4567')
256
+ assert_equal x, Decimal(x.integral_significand)*10**x.integral_exponent
257
+ assert_equal x, Decimal(Decimal.context.normalized_integral_significand(x))*10**Decimal.context.normalized_integral_exponent(x)
258
+
259
+ assert_equal x, Decimal.context.scaleb(x.integral_significand, x.integral_exponent)
260
+ assert_equal x, Decimal.context.scaleb(Decimal.context.normalized_integral_significand(x),Decimal.context.normalized_integral_exponent(x))
261
+
262
+ x = Decimal('-123.4567')
263
+ assert_equal x.abs, Decimal(x.integral_significand)*10**x.integral_exponent
264
+ assert_equal x.abs, Decimal(Decimal.context.normalized_integral_significand(x))*10**Decimal.context.normalized_integral_exponent(x)
265
+
266
+ assert_equal x.abs, Decimal.context.scaleb(x.integral_significand, x.integral_exponent)
267
+ assert_equal x.abs, Decimal.context.scaleb(Decimal.context.normalized_integral_significand(x),Decimal.context.normalized_integral_exponent(x))
268
+
269
+ Decimal.context.precision = 3
270
+ Decimal.context.rounding = :half_up
271
+ assert_equal Decimal("100"), (+Decimal('100.4'))
272
+ assert_equal Decimal("101"), (+Decimal('101.4'))
273
+ assert_equal Decimal("101"), (+Decimal('100.5'))
274
+ assert_equal Decimal("102"), (+Decimal('101.5'))
275
+ assert_equal Decimal("-101"), (+Decimal('-100.5'))
276
+ assert_equal Decimal("-102"), (+Decimal('-101.5'))
277
+ assert_equal Decimal("-100"), (+Decimal('-100.4'))
278
+ assert_equal Decimal("-101"), (+Decimal('-101.4'))
279
+ Decimal.context.rounding = :half_even
280
+ assert_equal Decimal("100"), (+Decimal('100.5'))
281
+ assert_equal Decimal("101"), (+Decimal('100.51'))
282
+ assert_equal Decimal("101"), (+Decimal('100.6'))
283
+ assert_equal Decimal("102"), (+Decimal('101.5'))
284
+ assert_equal Decimal("101"), (+Decimal('101.4'))
285
+ assert_equal Decimal("-100"), (+Decimal('-100.5'))
286
+ assert_equal Decimal("-102"), (+Decimal('-101.5'))
287
+ assert_equal Decimal("-101"), (+Decimal('-101.4'))
288
+ Decimal.context.rounding = :half_down
289
+ assert_equal Decimal("100"), (+Decimal('100.5'))
290
+ assert_equal Decimal("101"), (+Decimal('101.5'))
291
+ assert_equal Decimal("-100"), (+Decimal('-100.5'))
292
+ assert_equal Decimal("-101"), (+Decimal('-101.5'))
293
+ Decimal.context.rounding = :down
294
+ assert_equal Decimal("100"), (+Decimal('100.9'))
295
+ assert_equal Decimal("101"), (+Decimal('101.9'))
296
+ assert_equal Decimal("-100"), (+Decimal('-100.9'))
297
+ assert_equal Decimal("-101"), (+Decimal('-101.9'))
298
+ Decimal.context.rounding = :up
299
+ assert_equal Decimal("101"), (+Decimal('100.1'))
300
+ assert_equal Decimal("102"), (+Decimal('101.1'))
301
+ assert_equal Decimal("-101"), (+Decimal('-100.1'))
302
+ assert_equal Decimal("-102"), (+Decimal('-101.1'))
303
+ Decimal.context.rounding = :floor
304
+ assert_equal Decimal("100"), (+Decimal('100.9'))
305
+ assert_equal Decimal("101"), (+Decimal('101.9'))
306
+ assert_equal Decimal("-101"), (+Decimal('-100.9'))
307
+ assert_equal Decimal("-102"), (+Decimal('-101.9'))
308
+ Decimal.context.rounding = :ceiling
309
+ assert_equal Decimal("101"), (+Decimal('100.1'))
310
+ assert_equal Decimal("102"), (+Decimal('101.1'))
311
+ assert_equal Decimal("-100"), (+Decimal('-100.1'))
312
+ assert_equal Decimal("-101"), (+Decimal('-101.1'))
313
+
314
+ end
315
+
316
+ def test_exp
317
+ Decimal.context.precision = 100
318
+ Decimal.context.rounding = :half_even
319
+ e_100 = "2.718281828459045235360287471352662497757247093699959574966967627724076630353547594571382178525166427"
320
+ assert_equal e_100, exp(Decimal(1)).to_s
321
+ assert_equal Decimal(e_100), exp(Decimal(1))
322
+ assert_equal e_100, exp1(Decimal(1)).to_s
323
+ assert_equal Decimal(e_100), exp1(Decimal(1))
324
+ end
325
+
326
+ def test_special
327
+ nan = Decimal(0)/Decimal(0)
328
+ inf_pos = Decimal(1)/Decimal(0)
329
+ inf_neg = Decimal(-1)/Decimal(0)
330
+ zero_pos = Decimal(0)
331
+ zero_neg = Decimal('-0')
332
+ pos = Decimal(1)
333
+ neg = Decimal(-1)
334
+
335
+ assert nan.nan?
336
+ assert nan.special?
337
+ assert !nan.zero?
338
+ assert !nan.finite?
339
+ assert !nan.infinite?
340
+ assert inf_pos.infinite?
341
+ assert !inf_pos.finite?
342
+ assert !inf_pos.nan?
343
+ assert inf_pos.special?
344
+ assert inf_neg.infinite?
345
+ assert !inf_neg.finite?
346
+ assert !inf_neg.nan?
347
+ assert inf_neg.special?
348
+ assert zero_pos.finite?
349
+ assert zero_neg.finite?
350
+ assert zero_pos.zero?
351
+ assert zero_neg.zero?
352
+ assert !pos.zero?
353
+ assert !neg.zero?
354
+ assert pos.nonzero?
355
+ assert neg.nonzero?
356
+
357
+ #assert nan.sign.nil?
358
+ assert_equal(+1, inf_pos.sign)
359
+ assert_equal(-1, inf_neg.sign)
360
+ assert_equal(+1, zero_pos.sign)
361
+ assert_equal(-1, zero_neg.sign)
362
+ assert_equal(+1, pos.sign)
363
+ assert_equal(-1, neg.sign)
364
+ end
365
+
366
+ def test_context_parameters
367
+ #Decimal.context = Decimal.Context
368
+ Decimal.context.precision = 3
369
+ Decimal.context.rounding = :half_even
370
+ x = Decimal(1)
371
+ y = Decimal(3)
372
+ assert_equal Decimal('0.333'), x.divide(y)
373
+ assert_equal Decimal('0.3333'), x.divide(y, Decimal.Context(:precision=>4))
374
+ assert_equal Decimal('0.333'), x.divide(y)
375
+ assert_equal Decimal('0.33333'), x.divide(y, :precision=>5)
376
+ end
377
+
378
+ def test_integer
379
+
380
+ %w{ 0 0E10 0E-10 12.0 12 120E-1 12.1E10 }.each do |x|
381
+ assert Decimal(x).integral?, "Decimal('#{x}').integral?"
382
+ end
383
+
384
+ [12, Rational(6,2)].each do |x|
385
+ assert Decimal(x).integral?, "Decimal(#{x}).integral?"
386
+ end
387
+
388
+ %w{ NaN Inf 12.1 121E-1 }.each do |x|
389
+ assert !Decimal(x).integral?, "!Decimal('#{x}').integral?"
390
+ end
391
+
392
+ [ Rational(121,10) ].each do |x|
393
+ assert !Decimal(x).integral?, "!Decimal(#{x}).integral?"
394
+ end
395
+
396
+ end
397
+
398
+ end