long-decimal 1.00.01 → 1.00.02

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,3 @@
1
+ module LongDecimalSupport
2
+ VERSION = "1.00.02"
3
+ end
@@ -0,0 +1,22 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'long-decimal/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "long-decimal"
8
+ spec.version = LongDecimalSupport::VERSION
9
+ spec.authors = ["Karl Brodowsky"]
10
+ spec.email = ["karl_brodowsky@yahoo.com"]
11
+ spec.summary = %q{Fixed Point Decimal Numbers}
12
+ spec.description = %q{Decimal arbitrary precision fixed point numbers in pure Ruby.}
13
+ spec.homepage = "https://github.com/bk1/ruby-long-decimal"
14
+ spec.license = "LGPL or Ruby"
15
+ spec.files = "./Gemfile", "./LICENSE", "./README", "./Rakefile", "./lib/long-decimal-extra.rb", "./lib/long-decimal.rb", "./test/testlongdecimal.rb", "./test/testlongdeclib.rb", "./test/testrandlib.rb", "./test/testrandom.rb", "./test/testrandpower.rb", "./tex/long-decimal.pdf", "./tex/long-decimal.tex", "./long-decimal.gemspec", "./lib/long-decimal/version.rb"
16
+ spec.executables =
17
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
18
+ spec.require_paths = ["lib"]
19
+
20
+ spec.add_development_dependency "bundler", "~> 1.6"
21
+ spec.add_development_dependency "rake"
22
+ end
@@ -5,11 +5,20 @@
5
5
  # (C) Karl Brodowsky (IT Sky Consulting GmbH) 2006-2009
6
6
  #
7
7
  # CVS-ID: $Header: /var/cvs/long-decimal/long-decimal/test/testlongdecimal.rb,v 1.86 2011/01/16 22:16:59 bk1 Exp $
8
- # CVS-Label: $Name: RELEASE_1_00_00 $
8
+ # CVS-Label: $Name: $
9
9
  # Author: $Author: bk1 $ (Karl Brodowsky)
10
10
  #
11
11
 
12
- require 'test/unit'
12
+ $test_type = nil
13
+ if ((RUBY_VERSION.match /^1\./) || (RUBY_VERSION.match /^2\.0/)) then
14
+ require 'test/unit'
15
+ $test_type = :v20
16
+ else
17
+ require 'minitest/autorun'
18
+ require 'test/unit/assertions'
19
+ include Test::Unit::Assertions
20
+ $test_type = :v21
21
+ end
13
22
 
14
23
  # require "runit/testcase"
15
24
  # require "runit/cui/testrunner"
@@ -20,11 +29,20 @@ load "test/testlongdeclib.rb"
20
29
 
21
30
  LongMath.prec_overflow_handling = :warn_use_max
22
31
 
32
+ if ($test_type == :v20)
33
+ class UnitTest < Test::Unit::TestCase
34
+ end
35
+ else
36
+ class UnitTest < MiniTest::Test
37
+ end
38
+ end
39
+
23
40
  #
24
41
  # test class for LongDecimal and LongDecimalQuot
25
42
  #
26
- class TestLongDecimal_class < Test::Unit::TestCase # RUNIT::TestCase
43
+ class TestLongDecimal_class < UnitTest # RUNIT::TestCase
27
44
  include TestLongDecHelper
45
+ include LongDecimalRoundingMode
28
46
 
29
47
  @RCS_ID='-$Id: testlongdecimal.rb,v 1.86 2011/01/16 22:16:59 bk1 Exp $-'
30
48
 
@@ -186,6 +204,82 @@ class TestLongDecimal_class < Test::Unit::TestCase # RUNIT::TestCase
186
204
  assert((zr-xr).abs <= zr.unit, "zr-xr")
187
205
  end
188
206
 
207
+ #
208
+ # test exp2 of LongMath
209
+ #
210
+ def test_exp2
211
+ print "\ntest_exp2 [#{Time.now}]: "
212
+ 10.times do |i|
213
+ n = (i*i+i)/2
214
+ x = LongDecimal(n, 3*i)+LongMath.pi(20)
215
+ check_exp2_floated(x, n)
216
+
217
+ y = LongMath.exp2(x, n)
218
+ yy = LongMath.exp2(x, n + 5)
219
+ assert_equal(yy.round_to_scale(y.scale, LongDecimal::ROUND_HALF_DOWN), y, "x=#{x} y=#{y} yy=#{yy}")
220
+ z = LongMath.power(2, x, n)
221
+ assert_equal(z, y, "exp2 x=#{x} y=#{y} z=#{z} i=#{i} n=#{n}")
222
+ end
223
+
224
+ # random tests that have failed previously
225
+ check_exp2_floated(LongDecimal("-0.00147492625237084606064197462823289474038138852346725504592707365251736299180323394082648207114993022483949313246714392730651107673327728615912046468517225938833913598854936005"), 20)
226
+
227
+ end
228
+
229
+ #
230
+ # test the calculation of the exponential function where result is
231
+ # near zero
232
+ #
233
+ def test_exp2_near_zero
234
+ print "\ntest_exp2_near_zero [#{Time.now}]: "
235
+
236
+ x = LongDecimal(1, 100)
237
+ y = LongMath.log2(x, 100)
238
+ z = check_exp2_floated(y, 100)
239
+ assert_equal(x, z, "must be equal")
240
+ z = check_exp2_floated(y, 99)
241
+ assert(z.zero?, "must be zero")
242
+ z = check_exp2_floated(y * 100, 99)
243
+ assert(z.zero?, "must be zero")
244
+
245
+ end
246
+
247
+ #
248
+ # test exp10 of LongMath
249
+ #
250
+ def test_exp10
251
+ print "\ntest_exp10 [#{Time.now}]: "
252
+ 10.times do |i|
253
+ n = (i*i+i)/2
254
+ x = LongDecimal(n, 3*i)+LongMath.pi(20)
255
+ check_exp10_floated(x, n)
256
+
257
+ y = LongMath.exp10(x, n)
258
+ yy = LongMath.exp10(x, n + 5)
259
+ assert_equal(yy.round_to_scale(y.scale, LongDecimal::ROUND_HALF_DOWN), y, "x=#{x} y=#{y} yy=#{yy}")
260
+ z = LongMath.power(10, x, n)
261
+ assert_equal(z, y, "exp10 x=#{x} y=#{y} z=#{z} i=#{i} n=#{n}")
262
+ end
263
+ end
264
+
265
+ #
266
+ # test the calculation of the exponential function where result is
267
+ # near zero
268
+ #
269
+ def test_exp10_near_zero
270
+ print "\ntest_exp10_near_zero [#{Time.now}]: "
271
+
272
+ x = LongDecimal(1, 100)
273
+ y = LongMath.log10(x, 100)
274
+ z = check_exp10_floated(y, 100)
275
+ assert_equal(x, z, "must be equal")
276
+ z = check_exp10_floated(y, 99)
277
+ assert(z.zero?, "must be zero")
278
+ z = check_exp10_floated(y * 100, 99)
279
+ assert(z.zero?, "must be zero")
280
+
281
+ end
282
+
189
283
  #
190
284
  # test LongMath.log with non-LongDecimal arguments
191
285
  #
@@ -282,6 +376,410 @@ class TestLongDecimal_class < Test::Unit::TestCase # RUNIT::TestCase
282
376
  end
283
377
 
284
378
 
379
+ #
380
+ # test LongMath.power for bases that can be expressed as integer
381
+ #
382
+ def test_lm_power_xint
383
+ print "\ntest_lm_power_xint [#{Time.now}]: "
384
+
385
+ xx = LongMath.log(3, 40)
386
+ pi = LongMath.pi(40)
387
+ sq = LongMath.sqrt(5, 40)
388
+
389
+ check_power_xint(2, 700.01, 10)
390
+ check_power_xint(2, 100.001, 10)
391
+ check_power_xint(2, 1.000000001, 10)
392
+ check_power_xint(2, 0.01, 10)
393
+ check_power_xint(2, 1e-10, 10)
394
+ check_power_xint(2, 1e-90, 10)
395
+ check_power_xint(2, 0, 10)
396
+ check_power_xint(2, -1.000000001, 10)
397
+ check_power_xint(2, -100.001, 10)
398
+ check_power_xint(2, -700.01, 10)
399
+ check_power_xint(2, xx, 10)
400
+ check_power_xint(2, pi, 10)
401
+ check_power_xint(2, sq, 10)
402
+
403
+ check_power_xint(10, 308.01, 10)
404
+ check_power_xint(10, 100.001, 10)
405
+ check_power_xint(10, 1.000000001, 10)
406
+ check_power_xint(10, 0.01, 10)
407
+ check_power_xint(10, 1e-10, 10)
408
+ check_power_xint(10, 1e-90, 10)
409
+ check_power_xint(10, 0, 10)
410
+ check_power_xint(10, -1.000000001, 10)
411
+ check_power_xint(10, -100.001, 10)
412
+ check_power_xint(10, -308.01, 10)
413
+ check_power_xint(10, xx, 10)
414
+ check_power_xint(10, pi, 10)
415
+ check_power_xint(10, sq, 10)
416
+
417
+ check_power_xint(2, 700.01, 100)
418
+ check_power_xint(2, 100.001, 100)
419
+ check_power_xint(2, 1.000000001, 100)
420
+ check_power_xint(2, 0.01, 100)
421
+ check_power_xint(2, 1e-10, 100)
422
+ check_power_xint(2, 1e-90, 100)
423
+ check_power_xint(2, 0, 100)
424
+ check_power_xint(2, -1.000000001, 100)
425
+ check_power_xint(2, -100.001, 100)
426
+ check_power_xint(2, -700.01, 100)
427
+ check_power_xint(2, xx, 100)
428
+ check_power_xint(2, pi, 100)
429
+ check_power_xint(2, sq, 100)
430
+
431
+ check_power_xint(10, 308.01, 100)
432
+ check_power_xint(10, 100.001, 100)
433
+ check_power_xint(10, 1.000000001, 100)
434
+ check_power_xint(10, 0.01, 100)
435
+ check_power_xint(10, 1e-10, 100)
436
+ check_power_xint(10, 1e-90, 100)
437
+ check_power_xint(10, 0, 100)
438
+ check_power_xint(10, -1.000000001, 100)
439
+ check_power_xint(10, -100.001, 100)
440
+ check_power_xint(10, -308.01, 100)
441
+ check_power_xint(10, xx, 100)
442
+ check_power_xint(10, pi, 100)
443
+ check_power_xint(10, sq, 100)
444
+
445
+ check_power_xint(2, 700.01, 40)
446
+ check_power_xint(2, 100.001, 40)
447
+ check_power_xint(2, 1.000000001, 40)
448
+ check_power_xint(2, 0.01, 40)
449
+ check_power_xint(2, 1e-10, 40)
450
+ check_power_xint(2, 1e-90, 40)
451
+ check_power_xint(2, 0, 40)
452
+ check_power_xint(2, -1.000000001, 40)
453
+ check_power_xint(2, -100.001, 40)
454
+ check_power_xint(2, -700.01, 40)
455
+ check_power_xint(2, xx, 40)
456
+ check_power_xint(2, pi, 40)
457
+ check_power_xint(2, sq, 40)
458
+
459
+ check_power_xint(10, 308.01, 40)
460
+ check_power_xint(10, 100.001, 40)
461
+ check_power_xint(10, 1.000000001, 40)
462
+ check_power_xint(10, 0.01, 40)
463
+ check_power_xint(10, 1e-10, 40)
464
+ check_power_xint(10, 1e-90, 40)
465
+ check_power_xint(10, 0, 40)
466
+ check_power_xint(10, -1.000000001, 40)
467
+ check_power_xint(10, -100.001, 40)
468
+ check_power_xint(10, -308.01, 40)
469
+ check_power_xint(10, xx, 40)
470
+ check_power_xint(10, pi, 40)
471
+ check_power_xint(10, sq, 40)
472
+
473
+ end
474
+
475
+ #
476
+ # test LongMath.power for bases that can be expressed as integer
477
+ #
478
+ def test_lm_power_yint
479
+ print "\ntest_lm_power_yint [#{Time.now}] (2 min): "
480
+
481
+ xx = LongMath.log(3, 40)
482
+ pi = LongMath.pi(40)
483
+ sq = LongMath.sqrt(5, 40)
484
+
485
+ check_power_yint(xx, 400, 10)
486
+ check_power_yint(xx, 100, 10)
487
+ check_power_yint(xx, 1, 10)
488
+ check_power_yint(xx, 0, 10)
489
+ check_power_yint(xx, -1, 10)
490
+ check_power_yint(xx, -100, 10)
491
+ check_power_yint(xx, -400, 10)
492
+
493
+ check_power_yint(pi, 400, 10)
494
+ check_power_yint(pi, 100, 10)
495
+ check_power_yint(pi, 1, 10)
496
+ check_power_yint(pi, 0, 10)
497
+ check_power_yint(pi, -1, 10)
498
+ check_power_yint(pi, -100, 10)
499
+ check_power_yint(pi, -400, 10)
500
+
501
+ check_power_yint(sq, 400, 10)
502
+ check_power_yint(sq, 100, 10)
503
+ check_power_yint(sq, 1, 10)
504
+ check_power_yint(sq, 0, 10)
505
+ check_power_yint(sq, -1, 10)
506
+ check_power_yint(sq, -100, 10)
507
+ check_power_yint(sq, -400, 10)
508
+
509
+ check_power_yint(xx, 400, 100)
510
+ check_power_yint(xx, 100, 100)
511
+ check_power_yint(xx, 1, 100)
512
+ check_power_yint(xx, 0, 100)
513
+ check_power_yint(xx, -1, 100)
514
+ check_power_yint(xx, -100, 100)
515
+ check_power_yint(xx, -400, 100)
516
+
517
+ check_power_yint(pi, 400, 100)
518
+ check_power_yint(pi, 100, 100)
519
+ check_power_yint(pi, 1, 100)
520
+ check_power_yint(pi, 0, 100)
521
+ check_power_yint(pi, -1, 100)
522
+ check_power_yint(pi, -100, 100)
523
+ check_power_yint(pi, -400, 100)
524
+
525
+ check_power_yint(sq, 400, 100)
526
+ check_power_yint(sq, 100, 100)
527
+ check_power_yint(sq, 1, 100)
528
+ check_power_yint(sq, 0, 100)
529
+ check_power_yint(sq, -1, 100)
530
+ check_power_yint(sq, -100, 100)
531
+ check_power_yint(sq, -400, 100)
532
+
533
+ check_power_yint(xx, 400, 40)
534
+ check_power_yint(xx, 100, 40)
535
+ check_power_yint(xx, 1, 40)
536
+ check_power_yint(xx, 0, 40)
537
+ check_power_yint(xx, -1, 40)
538
+ check_power_yint(xx, -100, 40)
539
+ check_power_yint(xx, -400, 40)
540
+
541
+ check_power_yint(pi, 400, 40)
542
+ check_power_yint(pi, 100, 40)
543
+ check_power_yint(pi, 1, 40)
544
+ check_power_yint(pi, 0, 40)
545
+ check_power_yint(pi, -1, 40)
546
+ check_power_yint(pi, -100, 40)
547
+ check_power_yint(pi, -400, 40)
548
+
549
+ check_power_yint(sq, 400, 40)
550
+ check_power_yint(sq, 100, 40)
551
+ check_power_yint(sq, 1, 40)
552
+ check_power_yint(sq, 0, 40)
553
+ check_power_yint(sq, -1, 40)
554
+ check_power_yint(sq, -100, 40)
555
+ check_power_yint(sq, -400, 40)
556
+
557
+ end
558
+
559
+ #
560
+ # test LongMath.power for bases that can be expressed as integer
561
+ #
562
+ def test_lm_power_yhalfint
563
+ print "\ntest_lm_power_yhalfint [#{Time.now}] (10 min): "
564
+
565
+ xx = LongMath.log(3, 40)
566
+ pi = LongMath.pi(40)
567
+ sq = LongMath.sqrt(5, 40)
568
+
569
+ check_power_yhalfint(xx, 801, 10)
570
+ check_power_yhalfint(xx, 799, 10)
571
+ check_power_yhalfint(xx, 201, 10)
572
+ check_power_yhalfint(xx, 3, 10)
573
+ check_power_yhalfint(xx, 1, 10)
574
+ check_power_yhalfint(xx, -1, 10)
575
+ check_power_yhalfint(xx, -201, 10)
576
+ check_power_yhalfint(xx, -799, 10)
577
+ check_power_yhalfint(xx, -801, 10)
578
+
579
+ check_power_yhalfint(pi, 801, 10)
580
+ check_power_yhalfint(pi, 799, 10)
581
+ check_power_yhalfint(pi, 201, 10)
582
+ check_power_yhalfint(pi, 3, 10)
583
+ check_power_yhalfint(pi, 1, 10)
584
+ check_power_yhalfint(pi, -1, 10)
585
+ check_power_yhalfint(pi, -201, 10)
586
+ check_power_yhalfint(pi, -799, 10)
587
+ check_power_yhalfint(pi, -801, 10)
588
+
589
+ check_power_yhalfint(sq, 801, 10)
590
+ check_power_yhalfint(sq, 799, 10)
591
+ check_power_yhalfint(sq, 201, 10)
592
+ check_power_yhalfint(sq, 3, 10)
593
+ check_power_yhalfint(sq, 1, 10)
594
+ check_power_yhalfint(sq, -1, 10)
595
+ check_power_yhalfint(sq, -201, 10)
596
+ check_power_yhalfint(sq, -799, 10)
597
+ check_power_yhalfint(sq, -801, 10)
598
+
599
+ check_power_yhalfint(xx, 801, 40)
600
+ check_power_yhalfint(xx, 799, 40)
601
+ check_power_yhalfint(xx, 201, 40)
602
+ check_power_yhalfint(xx, 3, 40)
603
+ check_power_yhalfint(xx, 1, 40)
604
+ check_power_yhalfint(xx, -1, 40)
605
+ check_power_yhalfint(xx, -201, 40)
606
+ check_power_yhalfint(xx, -799, 40)
607
+ check_power_yhalfint(xx, -801, 40)
608
+
609
+ check_power_yhalfint(pi, 801, 40)
610
+ check_power_yhalfint(pi, 799, 40)
611
+ check_power_yhalfint(pi, 201, 40)
612
+ check_power_yhalfint(pi, 3, 40)
613
+ check_power_yhalfint(pi, 1, 40)
614
+ check_power_yhalfint(pi, -1, 40)
615
+ check_power_yhalfint(pi, -201, 40)
616
+ check_power_yhalfint(pi, -799, 40)
617
+ check_power_yhalfint(pi, -801, 40)
618
+
619
+ check_power_yhalfint(sq, 801, 40)
620
+ check_power_yhalfint(sq, 799, 40)
621
+ check_power_yhalfint(sq, 201, 40)
622
+ check_power_yhalfint(sq, 3, 40)
623
+ check_power_yhalfint(sq, 1, 40)
624
+ check_power_yhalfint(sq, -1, 40)
625
+ check_power_yhalfint(sq, -201, 40)
626
+ check_power_yhalfint(sq, -799, 40)
627
+ check_power_yhalfint(sq, -801, 40)
628
+
629
+ end
630
+
631
+ #
632
+ # test the calculation of the base-10-logarithm function
633
+ #
634
+ def test_log10
635
+ print "\ntest_log10 [#{Time.now}]: "
636
+ check_log10_floated(10**2000, 30)
637
+ check_log10_floated(100, 30)
638
+ check_log10_floated(1, 30)
639
+ check_log10_floated(0.01, 30)
640
+ check_log10_floated(1e-10, 30)
641
+ check_log10_floated(1e-90, 30)
642
+ check_log10_floated(1e-300, 30)
643
+ check_log10_floated(LongDecimal(1, 2000), 30)
644
+
645
+ check_log10_exact(10**2000, 2000, 30)
646
+ check_log10_exact(10**0, 0, 30)
647
+ check_log10_exact(10**1, 1, 30)
648
+ check_log10_exact(10**10, 10, 30)
649
+
650
+ # random tests that have failed
651
+ check_log10_floated(LongDecimal("587.00000000000000000095700000000000000000000000000000000000000000000000000000000000000000000001206"), 21)
652
+ check_log10_floated(LongDecimal("543.0000002480000900000000000000000000000000000000000000000000000000000000000000000000847"), 2)
653
+ check_log10_floated(LongDecimal("180.0000000000000000003570000000000000000000000000000000000000000000000577000000000000000000000000000637"), 2)
654
+ check_log10_floated(LongDecimal("0.0000000000000000000000000000000000000000180000000063000000000000000000000000000000000025"), 74)
655
+ check_log10_floated(LongDecimal("0.0000000000000000000000000006200000000000000000000000000000000000000000000000007940000015"), 74)
656
+ check_log10_floated(LongDecimal("0.00000000000000000000000000000000000000000032900000000000000000000233000000000000000000000000000000254"), 10)
657
+ check_log10_floated(LongDecimal("0.00000000000000000000000233000000094800000000000000000000000000000000000000000000000000000000000000682"), 100)
658
+ check_log10_floated(LongDecimal("0.000000000000000000000000000000000000097000000041500000000000000000784"), 97)
659
+ check_log10_floated(LongDecimal("185.000025300000000000000006320000000000000000000000000000737"), 27)
660
+ check_log10_floated(LongDecimal("0.00000000000000000000000000000302000000000000000000000000000000000000000000000000000000060673"), 100)
661
+ check_log10_floated(LongDecimal("442.000000000000045300000000000000000000000000000000000000000000000000000000000000000000000721000000000752"), 97)
662
+ check_log10_floated(LongDecimal("0.001030927835051546391752577284408545010096715910298651428936221023301883588097777204212461151695109779555577162172"), 62)
663
+
664
+ end
665
+
666
+ #
667
+ # test the calculation of the base-10-logarithm function
668
+ #
669
+ def test_log2
670
+ print "\ntest_log2 [#{Time.now}]: "
671
+ check_log2_floated(10**2000, 30)
672
+ check_log2_floated(2**2000, 30)
673
+ check_log2_floated(100, 30)
674
+ check_log2_floated(1, 30)
675
+ check_log2_floated(0.01, 30)
676
+ check_log2_floated(1e-10, 30)
677
+ check_log2_floated(1e-90, 30)
678
+ check_log2_floated(1e-300, 30)
679
+ check_log2_floated(LongDecimal(1, 2000), 30)
680
+
681
+ check_log2_exact(2**2000, 2000, 30)
682
+ check_log2_exact(2**0, 0, 30)
683
+ check_log2_exact(2**1, 1, 30)
684
+ check_log2_exact(2**10, 10, 30)
685
+
686
+ # random tests that have failed
687
+ check_log2_floated(LongDecimal("341.00000739000000000000000000000000000000000000000000000000000000000000171"), 3)
688
+ check_log2_floated(LongDecimal("504.00000000000000000000000000000000000000000000000000000000000000000000000000000000000327400000000000828"), 1)
689
+ check_log2_floated(LongDecimal("0.0033222591362126245847176079734219269102990032888157967351353737817463383406363175903135730345286354858609181999523961456225622835123748782987926188031081"), 48)
690
+ check_log2_floated(LongDecimal("0.000802000000000000000000197000000000000000000000302"), 84)
691
+ check_log2_floated(LongDecimal("0.00000000000000000000000000000000000000000000000000000000000000000000000452000000000069480"), 3)
692
+ check_log2_floated(LongDecimal("0.0000000000000000000000000000000000000000000000000000930000000000000000000000000983000000000000300"), 61)
693
+ check_log2_floated(LongDecimal("0.000000000000000000000000000000000000000000000000000000000086000133000000000000000000000000947"), 106)
694
+ check_log2_floated(LongDecimal("0.00000000000000000000000000000276000000000000000000000000000000000008560000000000000000000000000000161"), 81)
695
+
696
+ end
697
+
698
+ #
699
+ # test the calculation of the base-x-logarithm of sqrt(x)
700
+ #
701
+ def test_log_2_10_of_sqrt
702
+ print "\ntest_log_2_10_of_sqrt [#{Time.now}]: "
703
+ # n = 125
704
+ n = 30
705
+ m = 5
706
+ x2 = LongMath.sqrt(2, n)
707
+ x10 = LongMath.sqrt(10, n)
708
+
709
+ (2*m).times do |i|
710
+ check_log2_floated(x2, n+m-i)
711
+ check_log10_floated(x10, n+m-i)
712
+ end
713
+
714
+ y2 = check_log2_floated(x2, n)
715
+ assert((y2*2).one?, "xe=#{x2} ye=#{y2}")
716
+ y10 = check_log10_floated(x10, n)
717
+ assert((y10*2).one?, "xe=#{x10} ye=#{y10}")
718
+
719
+ end
720
+
721
+ #
722
+ # test LongMath.power with non-LongDecimal arguments
723
+ #
724
+ def test_non_ld_power
725
+ print "\ntest_non_ld_power [#{Time.now}]: "
726
+ xi = 77
727
+ yi = 88
728
+ zi = LongMath.power(xi, yi, 35)
729
+ wi = (LongMath.log(zi, 40) / LongMath.log(xi, 40)).round_to_scale(30, LongMath::ROUND_HALF_EVEN)
730
+ assert(wi.is_int?, "wi=#{wi} not int (zi=#{zi})")
731
+ assert_equal(yi, wi.to_i, "zi=#{zi} wi=#{wi}")
732
+ zj = LongMath.power_internal(xi, yi, 35)
733
+ assert_equal(zi, zj, "internal power should yield the same result zi=#{zi} zj=#{zj}")
734
+
735
+ xf = 77.0
736
+ yf = 88.0
737
+ zf = LongMath.power(xf, yf, 35)
738
+ wf = (LongMath.log(zf, 40) / LongMath.log(xf, 40)).round_to_scale(30, LongMath::ROUND_HALF_EVEN)
739
+ assert(wf.is_int?, "wf=#{wf} not int (zf=#{zf} wi=#{wi} zi=#{zi}")
740
+ assert_equal(yf, wf.to_i, "yf=#{yf} wf=#{yf}")
741
+
742
+ xr = Rational(224, 225)
743
+ yr = Rational(168, 169)
744
+ zr = LongMath.power(xr, yr, 35)
745
+ wr = (LongMath.log(zr, 40) / LongMath.log(xr, 40)).round_to_scale(30, LongMath::ROUND_HALF_EVEN)
746
+ assert((yr-wr).abs <= wr.unit, "wr-yr")
747
+ end
748
+
749
+ #
750
+ # test the calculation of the power-function of LongMath
751
+ #
752
+ def test_lm_power
753
+ print "\ntest_lm_power [#{Time.now}]: "
754
+ check_power_floated(1.001, 1.001, 10)
755
+ check_power_floated(1.001, 2.001, 10)
756
+ check_power_floated(2.001, 1.001, 10)
757
+ check_power_floated(2.001, 2.001, 10)
758
+ check_power_floated(100.001, 10.001, 10)
759
+ check_power_floated(10.001, 100.001, 10)
760
+ check_power_floated(10.001, 100.001, 100)
761
+ check_power_floated(1e-20, 1.01, 19)
762
+ check_power_floated(1.01, 1e-20, 19)
763
+ check_power_floated(1e-20, 1.01, 20)
764
+ check_power_floated(1.01, 1e-20, 20)
765
+ check_power_floated(1e-20, 1.01, 21)
766
+ check_power_floated(1.01, 1e-20, 21)
767
+
768
+ check_power_floated(1.001, -1.001, 10)
769
+ check_power_floated(1.001, -2.001, 10)
770
+ check_power_floated(2.001, -1.001, 10)
771
+ check_power_floated(2.001, -2.001, 10)
772
+ check_power_floated(100.001, -10.001, 10)
773
+ check_power_floated(10.001, -100.001, 10)
774
+ check_power_floated(1e-20, -1.01, 19)
775
+ check_power_floated(1.01, -1e-20, 19)
776
+ check_power_floated(1e-20, -1.01, 20)
777
+ check_power_floated(1.01, -1e-20, 20)
778
+ check_power_floated(1e-20, -1.01, 21)
779
+ check_power_floated(1.01, -1e-20, 21)
780
+
781
+ end
782
+
285
783
 
286
784
  #
287
785
  # test calculation of pi
@@ -331,15 +829,15 @@ class TestLongDecimal_class < Test::Unit::TestCase # RUNIT::TestCase
331
829
 
332
830
  l = LongDecimal(s)
333
831
  pi = LongMath.pi 200
334
- assert_equal(l.round_to_scale(200, LongMath::ROUND_HALF_EVEN), pi, "200 digits")
832
+ assert_equal(l.round_to_scale(200, ROUND_HALF_EVEN), pi, "200 digits")
335
833
  pi = LongMath.pi 201
336
- assert_equal(l.round_to_scale(201, LongMath::ROUND_HALF_EVEN), pi, "201 digits")
834
+ assert_equal(l.round_to_scale(201, ROUND_HALF_EVEN), pi, "201 digits")
337
835
  pi = LongMath.pi 199
338
- assert_equal(l.round_to_scale(199, LongMath::ROUND_HALF_EVEN), pi, "199 digits")
836
+ assert_equal(l.round_to_scale(199, ROUND_HALF_EVEN), pi, "199 digits")
339
837
  pi = LongMath.pi 201
340
- assert_equal(l.round_to_scale(201, LongMath::ROUND_HALF_EVEN), pi, "201 digits")
838
+ assert_equal(l.round_to_scale(201, ROUND_HALF_EVEN), pi, "201 digits")
341
839
  pi = LongMath.pi 1000
342
- assert_equal(l.round_to_scale(1000, LongMath::ROUND_HALF_EVEN), pi, "1000 digits")
840
+ assert_equal(l.round_to_scale(1000, ROUND_HALF_EVEN), pi, "1000 digits")
343
841
  end
344
842
 
345
843
  #
@@ -649,7 +1147,6 @@ class TestLongDecimal_class < Test::Unit::TestCase # RUNIT::TestCase
649
1147
  y = Complex(yr, yi)
650
1148
  z = x/y
651
1149
  msg = "x=#{x} y=#{y} z=#{z} xr=#{xr.inspect} (#{tw_c}) xi=#{xi.inspect} (#{fi_c}) yr=#{yr.inspect} (#{th_c}) yi=#{yi.inspect} (#{fo_c})"
652
- # puts msg
653
1150
  if (xr.kind_of? Integer) && (xi.kind_of? Integer) && (yr.kind_of? Integer) && (yi.kind_of? Integer) # && ! LongDecimal::RUNNING_19
654
1151
  # ruby 1.9 creates rational result even from integers, ruby 1.8 uses integers as results.
655
1152
  zc = (x.cdiv y)
@@ -733,7 +1230,12 @@ class TestLongDecimal_class < Test::Unit::TestCase # RUNIT::TestCase
733
1230
  zb = Complex(BigDecimal("2.4"),BigDecimal("-3.2"))
734
1231
  zf = Complex(2.4,-3.2)
735
1232
  zl = Complex(LongDecimal("2.4"),LongDecimal("-3.2"))
736
- zi = Complex(2, -4)
1233
+ zi = nil
1234
+ if ($test_type == :v20)
1235
+ zi = Complex(2, -4)
1236
+ else
1237
+ zi = zr
1238
+ end
737
1239
  twenties.each do |x|
738
1240
  threes.each do |yr|
739
1241
  fours.each do |yi|
@@ -930,7 +1432,7 @@ class TestLongDecimal_class < Test::Unit::TestCase # RUNIT::TestCase
930
1432
  f = 224.225
931
1433
  l = LongDecimal(f, 4)
932
1434
  assert_equal("0.0224225", l.to_s, "l=#{l.inspect} f=#{f.inspect}")
933
- assert_equal(l, (f/10000).to_ld(7), "to_ld")
1435
+ assert_equal(l, (f/10000).to_ld(7), "to_ld l=#{l} f=#{f}")
934
1436
  end
935
1437
 
936
1438
  #
@@ -1118,23 +1620,23 @@ class TestLongDecimal_class < Test::Unit::TestCase # RUNIT::TestCase
1118
1620
  def test_round_to_scale_up
1119
1621
  print "\ntest_round_to_scale_up [#{Time.now}]: "
1120
1622
  l = LongDecimal("2.21")
1121
- r = l.round_to_scale(1, LongDecimal::ROUND_UP)
1623
+ r = l.round_to_scale(1, ROUND_UP)
1122
1624
  assert_equal("2.3", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
1123
1625
  assert_equal("2.21", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
1124
1626
  l = LongDecimal("-2.21")
1125
- r = l.round_to_scale(1, LongDecimal::ROUND_UP)
1627
+ r = l.round_to_scale(1, ROUND_UP)
1126
1628
  assert_equal("-2.3", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
1127
1629
  assert_equal("-2.21", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
1128
1630
  l = LongDecimal("2.20")
1129
- r = l.round_to_scale(1, LongDecimal::ROUND_UP)
1631
+ r = l.round_to_scale(1, ROUND_UP)
1130
1632
  assert_equal("2.2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
1131
1633
  assert_equal("2.20", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
1132
1634
  l = LongDecimal("-2.20")
1133
- r = l.round_to_scale(1, LongDecimal::ROUND_UP)
1635
+ r = l.round_to_scale(1, ROUND_UP)
1134
1636
  assert_equal("-2.2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
1135
1637
  assert_equal("-2.20", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
1136
1638
  l = LongDecimal("2.24")
1137
- r = l.round_to_scale(4, LongDecimal::ROUND_UP)
1639
+ r = l.round_to_scale(4, ROUND_UP)
1138
1640
  assert_equal("2.2400", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
1139
1641
  end
1140
1642
 
@@ -1144,23 +1646,23 @@ class TestLongDecimal_class < Test::Unit::TestCase # RUNIT::TestCase
1144
1646
  def test_round_to_scale_down
1145
1647
  print "\ntest_round_to_scale_down [#{Time.now}]: "
1146
1648
  l = LongDecimal("2.29")
1147
- r = l.round_to_scale(1, LongDecimal::ROUND_DOWN)
1649
+ r = l.round_to_scale(1, ROUND_DOWN)
1148
1650
  assert_equal("2.2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
1149
1651
  assert_equal("2.29", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
1150
1652
  l = LongDecimal("-2.29")
1151
- r = l.round_to_scale(1, LongDecimal::ROUND_DOWN)
1653
+ r = l.round_to_scale(1, ROUND_DOWN)
1152
1654
  assert_equal("-2.2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
1153
1655
  assert_equal("-2.29", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
1154
1656
  l = LongDecimal("2.20")
1155
- r = l.round_to_scale(1, LongDecimal::ROUND_DOWN)
1657
+ r = l.round_to_scale(1, ROUND_DOWN)
1156
1658
  assert_equal("2.2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
1157
1659
  assert_equal("2.20", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
1158
1660
  l = LongDecimal("-2.20")
1159
- r = l.round_to_scale(1, LongDecimal::ROUND_DOWN)
1661
+ r = l.round_to_scale(1, ROUND_DOWN)
1160
1662
  assert_equal("-2.2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
1161
1663
  assert_equal("-2.20", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
1162
1664
  l = LongDecimal("2.24")
1163
- r = l.round_to_scale(4, LongDecimal::ROUND_DOWN)
1665
+ r = l.round_to_scale(4, ROUND_DOWN)
1164
1666
  assert_equal("2.2400", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
1165
1667
  end
1166
1668
 
@@ -1170,23 +1672,23 @@ class TestLongDecimal_class < Test::Unit::TestCase # RUNIT::TestCase
1170
1672
  def test_round_to_scale_ceiling
1171
1673
  print "\ntest_round_to_scale_ceiling [#{Time.now}]: "
1172
1674
  l = LongDecimal("2.21")
1173
- r = l.round_to_scale(1, LongDecimal::ROUND_CEILING)
1675
+ r = l.round_to_scale(1, ROUND_CEILING)
1174
1676
  assert_equal("2.3", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
1175
1677
  assert_equal("2.21", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
1176
1678
  l = LongDecimal("-2.29")
1177
- r = l.round_to_scale(1, LongDecimal::ROUND_CEILING)
1679
+ r = l.round_to_scale(1, ROUND_CEILING)
1178
1680
  assert_equal("-2.2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
1179
1681
  assert_equal("-2.29", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
1180
1682
  l = LongDecimal("2.20")
1181
- r = l.round_to_scale(1, LongDecimal::ROUND_CEILING)
1683
+ r = l.round_to_scale(1, ROUND_CEILING)
1182
1684
  assert_equal("2.2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
1183
1685
  assert_equal("2.20", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
1184
1686
  l = LongDecimal("-2.20")
1185
- r = l.round_to_scale(1, LongDecimal::ROUND_CEILING)
1687
+ r = l.round_to_scale(1, ROUND_CEILING)
1186
1688
  assert_equal("-2.2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
1187
1689
  assert_equal("-2.20", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
1188
1690
  l = LongDecimal("2.24")
1189
- r = l.round_to_scale(4, LongDecimal::ROUND_CEILING)
1691
+ r = l.round_to_scale(4, ROUND_CEILING)
1190
1692
  assert_equal("2.2400", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
1191
1693
  end
1192
1694
 
@@ -1196,23 +1698,23 @@ class TestLongDecimal_class < Test::Unit::TestCase # RUNIT::TestCase
1196
1698
  def test_round_to_scale_floor
1197
1699
  print "\ntest_round_to_scale_floor [#{Time.now}]: "
1198
1700
  l = LongDecimal("2.29")
1199
- r = l.round_to_scale(1, LongDecimal::ROUND_FLOOR)
1701
+ r = l.round_to_scale(1, ROUND_FLOOR)
1200
1702
  assert_equal("2.2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
1201
1703
  assert_equal("2.29", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
1202
1704
  l = LongDecimal("-2.21")
1203
- r = l.round_to_scale(1, LongDecimal::ROUND_FLOOR)
1705
+ r = l.round_to_scale(1, ROUND_FLOOR)
1204
1706
  assert_equal("-2.3", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
1205
1707
  assert_equal("-2.21", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
1206
1708
  l = LongDecimal("2.20")
1207
- r = l.round_to_scale(1, LongDecimal::ROUND_FLOOR)
1709
+ r = l.round_to_scale(1, ROUND_FLOOR)
1208
1710
  assert_equal("2.2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
1209
1711
  assert_equal("2.20", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
1210
1712
  l = LongDecimal("-2.20")
1211
- r = l.round_to_scale(1, LongDecimal::ROUND_FLOOR)
1713
+ r = l.round_to_scale(1, ROUND_FLOOR)
1212
1714
  assert_equal("-2.2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
1213
1715
  assert_equal("-2.20", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
1214
1716
  l = LongDecimal("2.24")
1215
- r = l.round_to_scale(4, LongDecimal::ROUND_FLOOR)
1717
+ r = l.round_to_scale(4, ROUND_FLOOR)
1216
1718
  assert_equal("2.2400", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
1217
1719
  end
1218
1720
 
@@ -1222,39 +1724,39 @@ class TestLongDecimal_class < Test::Unit::TestCase # RUNIT::TestCase
1222
1724
  def test_round_to_scale_half_up
1223
1725
  print "\ntest_round_to_scale_half_up [#{Time.now}]: "
1224
1726
  l = LongDecimal("2.20")
1225
- r = l.round_to_scale(1, LongDecimal::ROUND_HALF_UP)
1727
+ r = l.round_to_scale(1, ROUND_HALF_UP)
1226
1728
  assert_equal("2.2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
1227
1729
  assert_equal("2.20", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
1228
1730
  l = LongDecimal("2.21")
1229
- r = l.round_to_scale(1, LongDecimal::ROUND_HALF_UP)
1731
+ r = l.round_to_scale(1, ROUND_HALF_UP)
1230
1732
  assert_equal("2.2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
1231
1733
  assert_equal("2.21", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
1232
1734
  l = LongDecimal("2.25")
1233
- r = l.round_to_scale(1, LongDecimal::ROUND_HALF_UP)
1735
+ r = l.round_to_scale(1, ROUND_HALF_UP)
1234
1736
  assert_equal("2.3", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
1235
1737
  assert_equal("2.25", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
1236
1738
  l = LongDecimal("2.29")
1237
- r = l.round_to_scale(1, LongDecimal::ROUND_HALF_UP)
1739
+ r = l.round_to_scale(1, ROUND_HALF_UP)
1238
1740
  assert_equal("2.3", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
1239
1741
  assert_equal("2.29", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
1240
1742
  l = LongDecimal("-2.20")
1241
- r = l.round_to_scale(1, LongDecimal::ROUND_HALF_UP)
1743
+ r = l.round_to_scale(1, ROUND_HALF_UP)
1242
1744
  assert_equal("-2.2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
1243
1745
  assert_equal("-2.20", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
1244
1746
  l = LongDecimal("-2.21")
1245
- r = l.round_to_scale(1, LongDecimal::ROUND_HALF_UP)
1747
+ r = l.round_to_scale(1, ROUND_HALF_UP)
1246
1748
  assert_equal("-2.2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
1247
1749
  assert_equal("-2.21", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
1248
1750
  l = LongDecimal("-2.25")
1249
- r = l.round_to_scale(1, LongDecimal::ROUND_HALF_UP)
1751
+ r = l.round_to_scale(1, ROUND_HALF_UP)
1250
1752
  assert_equal("-2.3", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
1251
1753
  assert_equal("-2.25", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
1252
1754
  l = LongDecimal("-2.29")
1253
- r = l.round_to_scale(1, LongDecimal::ROUND_HALF_UP)
1755
+ r = l.round_to_scale(1, ROUND_HALF_UP)
1254
1756
  assert_equal("-2.3", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
1255
1757
  assert_equal("-2.29", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
1256
1758
  l = LongDecimal("2.24")
1257
- r = l.round_to_scale(4, LongDecimal::ROUND_HALF_UP)
1759
+ r = l.round_to_scale(4, ROUND_HALF_UP)
1258
1760
  assert_equal("2.2400", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
1259
1761
  end
1260
1762
 
@@ -1264,123 +1766,123 @@ class TestLongDecimal_class < Test::Unit::TestCase # RUNIT::TestCase
1264
1766
  def test_round_to_scale_half_down
1265
1767
  print "\ntest_round_to_scale_half_down [#{Time.now}]: "
1266
1768
  l = LongDecimal("2.20")
1267
- r = l.round_to_scale(1, LongDecimal::ROUND_HALF_DOWN)
1769
+ r = l.round_to_scale(1, ROUND_HALF_DOWN)
1268
1770
  assert_equal("2.2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
1269
1771
  assert_equal("2.20", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
1270
1772
  l = LongDecimal("2.21")
1271
- r = l.round_to_scale(1, LongDecimal::ROUND_HALF_DOWN)
1773
+ r = l.round_to_scale(1, ROUND_HALF_DOWN)
1272
1774
  assert_equal("2.2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
1273
1775
  assert_equal("2.21", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
1274
1776
  l = LongDecimal("2.25")
1275
- r = l.round_to_scale(1, LongDecimal::ROUND_HALF_DOWN)
1777
+ r = l.round_to_scale(1, ROUND_HALF_DOWN)
1276
1778
  assert_equal("2.2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
1277
1779
  assert_equal("2.25", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
1278
1780
  l = LongDecimal("2.29")
1279
- r = l.round_to_scale(1, LongDecimal::ROUND_HALF_DOWN)
1781
+ r = l.round_to_scale(1, ROUND_HALF_DOWN)
1280
1782
  assert_equal("2.3", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
1281
1783
  assert_equal("2.29", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
1282
1784
  l = LongDecimal("-2.20")
1283
- r = l.round_to_scale(1, LongDecimal::ROUND_HALF_DOWN)
1785
+ r = l.round_to_scale(1, ROUND_HALF_DOWN)
1284
1786
  assert_equal("-2.2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
1285
1787
  assert_equal("-2.20", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
1286
1788
  l = LongDecimal("-2.21")
1287
- r = l.round_to_scale(1, LongDecimal::ROUND_HALF_DOWN)
1789
+ r = l.round_to_scale(1, ROUND_HALF_DOWN)
1288
1790
  assert_equal("-2.2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
1289
1791
  assert_equal("-2.21", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
1290
1792
  l = LongDecimal("-2.25")
1291
- r = l.round_to_scale(1, LongDecimal::ROUND_HALF_DOWN)
1793
+ r = l.round_to_scale(1, ROUND_HALF_DOWN)
1292
1794
  assert_equal("-2.2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
1293
1795
  assert_equal("-2.25", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
1294
1796
  l = LongDecimal("-2.29")
1295
- r = l.round_to_scale(1, LongDecimal::ROUND_HALF_DOWN)
1797
+ r = l.round_to_scale(1, ROUND_HALF_DOWN)
1296
1798
  assert_equal("-2.3", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
1297
1799
  assert_equal("-2.29", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
1298
1800
  l = LongDecimal("2.24")
1299
- r = l.round_to_scale(4, LongDecimal::ROUND_HALF_DOWN)
1801
+ r = l.round_to_scale(4, ROUND_HALF_DOWN)
1300
1802
  assert_equal("2.2400", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
1301
1803
  end
1302
1804
 
1303
1805
  #
1304
1806
  # test rounding with ROUND_HALF_CEILING
1305
1807
  #
1306
- def test_round_to_scale_half_up
1307
- print "\ntest_round_to_scale_half_up [#{Time.now}]: "
1808
+ def test_round_to_scale_half_ceiling
1809
+ print "\ntest_round_to_scale_half_ceiling [#{Time.now}]: "
1308
1810
  l = LongDecimal("2.20")
1309
- r = l.round_to_scale(1, LongDecimal::ROUND_HALF_CEILING)
1811
+ r = l.round_to_scale(1, ROUND_HALF_CEILING)
1310
1812
  assert_equal("2.2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
1311
1813
  assert_equal("2.20", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
1312
1814
  l = LongDecimal("2.21")
1313
- r = l.round_to_scale(1, LongDecimal::ROUND_HALF_CEILING)
1815
+ r = l.round_to_scale(1, ROUND_HALF_CEILING)
1314
1816
  assert_equal("2.2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
1315
1817
  assert_equal("2.21", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
1316
1818
  l = LongDecimal("2.25")
1317
- r = l.round_to_scale(1, LongDecimal::ROUND_HALF_CEILING)
1819
+ r = l.round_to_scale(1, ROUND_HALF_CEILING)
1318
1820
  assert_equal("2.3", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
1319
1821
  assert_equal("2.25", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
1320
1822
  l = LongDecimal("2.29")
1321
- r = l.round_to_scale(1, LongDecimal::ROUND_HALF_CEILING)
1823
+ r = l.round_to_scale(1, ROUND_HALF_CEILING)
1322
1824
  assert_equal("2.3", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
1323
1825
  assert_equal("2.29", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
1324
1826
  l = LongDecimal("-2.20")
1325
- r = l.round_to_scale(1, LongDecimal::ROUND_HALF_CEILING)
1827
+ r = l.round_to_scale(1, ROUND_HALF_CEILING)
1326
1828
  assert_equal("-2.2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
1327
1829
  assert_equal("-2.20", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
1328
1830
  l = LongDecimal("-2.21")
1329
- r = l.round_to_scale(1, LongDecimal::ROUND_HALF_CEILING)
1831
+ r = l.round_to_scale(1, ROUND_HALF_CEILING)
1330
1832
  assert_equal("-2.2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
1331
1833
  assert_equal("-2.21", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
1332
1834
  l = LongDecimal("-2.25")
1333
- r = l.round_to_scale(1, LongDecimal::ROUND_HALF_CEILING)
1835
+ r = l.round_to_scale(1, ROUND_HALF_CEILING)
1334
1836
  assert_equal("-2.2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
1335
1837
  assert_equal("-2.25", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
1336
1838
  l = LongDecimal("-2.29")
1337
- r = l.round_to_scale(1, LongDecimal::ROUND_HALF_CEILING)
1839
+ r = l.round_to_scale(1, ROUND_HALF_CEILING)
1338
1840
  assert_equal("-2.3", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
1339
1841
  assert_equal("-2.29", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
1340
1842
  l = LongDecimal("2.24")
1341
- r = l.round_to_scale(4, LongDecimal::ROUND_HALF_CEILING)
1843
+ r = l.round_to_scale(4, ROUND_HALF_CEILING)
1342
1844
  assert_equal("2.2400", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
1343
1845
  end
1344
1846
 
1345
1847
  #
1346
1848
  # test rounding with ROUND_HALF_FLOOR
1347
1849
  #
1348
- def test_round_to_scale_half_down
1349
- print "\ntest_round_to_scale_half_down [#{Time.now}]: "
1850
+ def test_round_to_scale_half_floor
1851
+ print "\ntest_round_to_scale_half_floor [#{Time.now}]: "
1350
1852
  l = LongDecimal("2.20")
1351
- r = l.round_to_scale(1, LongDecimal::ROUND_HALF_FLOOR)
1853
+ r = l.round_to_scale(1, ROUND_HALF_FLOOR)
1352
1854
  assert_equal("2.2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
1353
1855
  assert_equal("2.20", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
1354
1856
  l = LongDecimal("2.21")
1355
- r = l.round_to_scale(1, LongDecimal::ROUND_HALF_FLOOR)
1857
+ r = l.round_to_scale(1, ROUND_HALF_FLOOR)
1356
1858
  assert_equal("2.2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
1357
1859
  assert_equal("2.21", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
1358
1860
  l = LongDecimal("2.25")
1359
- r = l.round_to_scale(1, LongDecimal::ROUND_HALF_FLOOR)
1861
+ r = l.round_to_scale(1, ROUND_HALF_FLOOR)
1360
1862
  assert_equal("2.2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
1361
1863
  assert_equal("2.25", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
1362
1864
  l = LongDecimal("2.29")
1363
- r = l.round_to_scale(1, LongDecimal::ROUND_HALF_FLOOR)
1865
+ r = l.round_to_scale(1, ROUND_HALF_FLOOR)
1364
1866
  assert_equal("2.3", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
1365
1867
  assert_equal("2.29", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
1366
1868
  l = LongDecimal("-2.20")
1367
- r = l.round_to_scale(1, LongDecimal::ROUND_HALF_FLOOR)
1869
+ r = l.round_to_scale(1, ROUND_HALF_FLOOR)
1368
1870
  assert_equal("-2.2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
1369
1871
  assert_equal("-2.20", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
1370
1872
  l = LongDecimal("-2.21")
1371
- r = l.round_to_scale(1, LongDecimal::ROUND_HALF_FLOOR)
1873
+ r = l.round_to_scale(1, ROUND_HALF_FLOOR)
1372
1874
  assert_equal("-2.2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
1373
1875
  assert_equal("-2.21", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
1374
1876
  l = LongDecimal("-2.25")
1375
- r = l.round_to_scale(1, LongDecimal::ROUND_HALF_FLOOR)
1877
+ r = l.round_to_scale(1, ROUND_HALF_FLOOR)
1376
1878
  assert_equal("-2.3", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
1377
1879
  assert_equal("-2.25", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
1378
1880
  l = LongDecimal("-2.29")
1379
- r = l.round_to_scale(1, LongDecimal::ROUND_HALF_FLOOR)
1881
+ r = l.round_to_scale(1, ROUND_HALF_FLOOR)
1380
1882
  assert_equal("-2.3", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
1381
1883
  assert_equal("-2.29", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
1382
1884
  l = LongDecimal("2.24")
1383
- r = l.round_to_scale(4, LongDecimal::ROUND_HALF_FLOOR)
1885
+ r = l.round_to_scale(4, ROUND_HALF_FLOOR)
1384
1886
  assert_equal("2.2400", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
1385
1887
  end
1386
1888
 
@@ -1390,64 +1892,755 @@ class TestLongDecimal_class < Test::Unit::TestCase # RUNIT::TestCase
1390
1892
  def test_round_to_scale_half_even
1391
1893
  print "\ntest_round_to_scale_half_even [#{Time.now}]: "
1392
1894
  l = LongDecimal("2.20")
1393
- r = l.round_to_scale(1, LongDecimal::ROUND_HALF_EVEN)
1895
+ r = l.round_to_scale(1, ROUND_HALF_EVEN)
1394
1896
  assert_equal("2.2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
1395
1897
  assert_equal("2.20", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
1396
1898
  l = LongDecimal("2.21")
1397
- r = l.round_to_scale(1, LongDecimal::ROUND_HALF_EVEN)
1899
+ r = l.round_to_scale(1, ROUND_HALF_EVEN)
1398
1900
  assert_equal("2.2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
1399
1901
  assert_equal("2.21", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
1400
1902
  l = LongDecimal("2.25")
1401
- r = l.round_to_scale(1, LongDecimal::ROUND_HALF_EVEN)
1903
+ r = l.round_to_scale(1, ROUND_HALF_EVEN)
1402
1904
  assert_equal("2.2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
1403
1905
  assert_equal("2.25", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
1404
1906
  l = LongDecimal("2.35")
1405
- r = l.round_to_scale(1, LongDecimal::ROUND_HALF_EVEN)
1907
+ r = l.round_to_scale(1, ROUND_HALF_EVEN)
1406
1908
  assert_equal("2.4", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
1407
1909
  assert_equal("2.35", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
1408
1910
  l = LongDecimal("2.29")
1409
- r = l.round_to_scale(1, LongDecimal::ROUND_HALF_EVEN)
1911
+ r = l.round_to_scale(1, ROUND_HALF_EVEN)
1410
1912
  assert_equal("2.3", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
1411
1913
  assert_equal("2.29", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
1412
1914
  l = LongDecimal("-2.20")
1413
- r = l.round_to_scale(1, LongDecimal::ROUND_HALF_EVEN)
1915
+ r = l.round_to_scale(1, ROUND_HALF_EVEN)
1414
1916
  assert_equal("-2.2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
1415
1917
  assert_equal("-2.20", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
1416
1918
  l = LongDecimal("-2.21")
1417
- r = l.round_to_scale(1, LongDecimal::ROUND_HALF_EVEN)
1919
+ r = l.round_to_scale(1, ROUND_HALF_EVEN)
1418
1920
  assert_equal("-2.2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
1419
1921
  assert_equal("-2.21", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
1420
1922
  l = LongDecimal("-2.25")
1421
- r = l.round_to_scale(1, LongDecimal::ROUND_HALF_EVEN)
1923
+ r = l.round_to_scale(1, ROUND_HALF_EVEN)
1422
1924
  assert_equal("-2.2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
1423
1925
  assert_equal("-2.25", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
1424
1926
  l = LongDecimal("-2.35")
1425
- r = l.round_to_scale(1, LongDecimal::ROUND_HALF_EVEN)
1927
+ r = l.round_to_scale(1, ROUND_HALF_EVEN)
1426
1928
  assert_equal("-2.4", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
1427
1929
  assert_equal("-2.35", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
1428
1930
  l = LongDecimal("-2.29")
1429
- r = l.round_to_scale(1, LongDecimal::ROUND_HALF_EVEN)
1931
+ r = l.round_to_scale(1, ROUND_HALF_EVEN)
1430
1932
  assert_equal("-2.3", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
1431
1933
  assert_equal("-2.29", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
1432
1934
  l = LongDecimal("2.24")
1433
- r = l.round_to_scale(4, LongDecimal::ROUND_HALF_EVEN)
1935
+ r = l.round_to_scale(4, ROUND_HALF_EVEN)
1434
1936
  assert_equal("2.2400", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
1435
1937
  end
1436
1938
 
1939
+ #
1940
+ # test rounding with ROUND_HALF_ODD
1941
+ #
1942
+ def test_round_to_scale_half_odd
1943
+ print "\ntest_round_to_scale_half_odd [#{Time.now}]: "
1944
+ l = LongDecimal("2.20")
1945
+ r = l.round_to_scale(1, ROUND_HALF_ODD)
1946
+ assert_equal("2.2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
1947
+ assert_equal("2.20", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
1948
+ l = LongDecimal("2.21")
1949
+ r = l.round_to_scale(1, ROUND_HALF_ODD)
1950
+ assert_equal("2.2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
1951
+ assert_equal("2.21", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
1952
+ l = LongDecimal("2.25")
1953
+ r = l.round_to_scale(1, ROUND_HALF_ODD)
1954
+ assert_equal("2.3", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
1955
+ assert_equal("2.25", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
1956
+ l = LongDecimal("2.35")
1957
+ r = l.round_to_scale(1, ROUND_HALF_ODD)
1958
+ assert_equal("2.3", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
1959
+ assert_equal("2.35", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
1960
+ l = LongDecimal("2.29")
1961
+ r = l.round_to_scale(1, ROUND_HALF_ODD)
1962
+ assert_equal("2.3", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
1963
+ assert_equal("2.29", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
1964
+ l = LongDecimal("-2.20")
1965
+ r = l.round_to_scale(1, ROUND_HALF_ODD)
1966
+ assert_equal("-2.2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
1967
+ assert_equal("-2.20", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
1968
+ l = LongDecimal("-2.21")
1969
+ r = l.round_to_scale(1, ROUND_HALF_ODD)
1970
+ assert_equal("-2.2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
1971
+ assert_equal("-2.21", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
1972
+ l = LongDecimal("-2.25")
1973
+ r = l.round_to_scale(1, ROUND_HALF_ODD)
1974
+ assert_equal("-2.3", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
1975
+ assert_equal("-2.25", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
1976
+ l = LongDecimal("-2.35")
1977
+ r = l.round_to_scale(1, ROUND_HALF_ODD)
1978
+ assert_equal("-2.3", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
1979
+ assert_equal("-2.35", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
1980
+ l = LongDecimal("-2.29")
1981
+ r = l.round_to_scale(1, ROUND_HALF_ODD)
1982
+ assert_equal("-2.3", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
1983
+ assert_equal("-2.29", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
1984
+ l = LongDecimal("2.24")
1985
+ r = l.round_to_scale(4, ROUND_HALF_ODD)
1986
+ assert_equal("2.2400", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
1987
+ end
1988
+
1989
+ #
1990
+ # test rounding with ROUND_GEOMETRIC_*
1991
+ #
1992
+ def test_round_to_scale_geometric_common
1993
+ print "\ntest_round_to_scale_geometric_common [#{Time.now}]: "
1994
+ ALL_ROUNDING_MODES.each do |rounding_mode|
1995
+ if (rounding_mode.major == MAJOR_GEOMETRIC)
1996
+ l = LongDecimal("0.00")
1997
+ r = l.round_to_scale(1, rounding_mode)
1998
+ assert_equal("0.0", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
1999
+ assert_equal("0.00", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2000
+ l = LongDecimal("0.01")
2001
+ r = l.round_to_scale(1, rounding_mode)
2002
+ assert_equal("0.1", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2003
+ assert_equal("0.01", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2004
+ l = LongDecimal("0.000001")
2005
+ r = l.round_to_scale(1, rounding_mode)
2006
+ assert_equal("0.1", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2007
+ assert_equal("0.000001", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2008
+ r = l.round_to_scale(0, rounding_mode)
2009
+ assert_equal("1", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2010
+ assert_equal("0.000001", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2011
+ l = LongDecimal("0.099999")
2012
+ r = l.round_to_scale(1, rounding_mode)
2013
+ assert_equal("0.1", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2014
+ assert_equal("0.099999", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2015
+ l = LongDecimal("-0.01")
2016
+ r = l.round_to_scale(1, rounding_mode)
2017
+ assert_equal("-0.1", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2018
+ assert_equal("-0.01", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2019
+ l = LongDecimal("-0.000001")
2020
+ r = l.round_to_scale(1, rounding_mode)
2021
+ assert_equal("-0.1", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2022
+ assert_equal("-0.000001", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2023
+ r = l.round_to_scale(0, rounding_mode)
2024
+ assert_equal("-1", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2025
+ l = LongDecimal("-0.099999")
2026
+ r = l.round_to_scale(1, rounding_mode)
2027
+ assert_equal("-0.1", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2028
+ assert_equal("-0.099999", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2029
+ l = LongDecimal("1.414213562373095048801688724209698078569671875376948073176679737990732478462107038850387534327641")
2030
+ r = l.round_to_scale(0, rounding_mode)
2031
+ assert_equal("1", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2032
+ assert_equal("1.414213562373095048801688724209698078569671875376948073176679737990732478462107038850387534327641", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2033
+ l = LongDecimal("1.414213562373095048801688724209698078569671875376948073176679737990732478462107038850387534327642")
2034
+ r = l.round_to_scale(0, rounding_mode)
2035
+ assert_equal("2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2036
+ assert_equal("1.414213562373095048801688724209698078569671875376948073176679737990732478462107038850387534327642", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2037
+ l = LongDecimal("-1.414213562373095048801688724209698078569671875376948073176679737990732478462107038850387534327641")
2038
+ r = l.round_to_scale(0, rounding_mode)
2039
+ assert_equal("-1", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2040
+ assert_equal("-1.414213562373095048801688724209698078569671875376948073176679737990732478462107038850387534327641", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2041
+ l = LongDecimal("-1.414213562373095048801688724209698078569671875376948073176679737990732478462107038850387534327642")
2042
+ r = l.round_to_scale(0, rounding_mode)
2043
+ assert_equal("-2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2044
+ assert_equal("-1.414213562373095048801688724209698078569671875376948073176679737990732478462107038850387534327642", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2045
+
2046
+ l = LongDecimal("2.20")
2047
+ r = l.round_to_scale(1, rounding_mode)
2048
+ assert_equal("2.2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2049
+ assert_equal("2.20", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2050
+ l = LongDecimal("2.21")
2051
+ r = l.round_to_scale(1, rounding_mode)
2052
+ assert_equal("2.2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2053
+ assert_equal("2.21", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2054
+ l = LongDecimal("2.25")
2055
+ r = l.round_to_scale(1, rounding_mode)
2056
+ assert_equal("2.3", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2057
+ assert_equal("2.25", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2058
+ l = LongDecimal("2.29")
2059
+ r = l.round_to_scale(1, rounding_mode)
2060
+ assert_equal("2.3", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2061
+ assert_equal("2.29", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2062
+ l = LongDecimal("-2.20")
2063
+ r = l.round_to_scale(1, rounding_mode)
2064
+ assert_equal("-2.2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2065
+ assert_equal("-2.20", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2066
+ l = LongDecimal("-2.21")
2067
+ r = l.round_to_scale(1, rounding_mode)
2068
+ assert_equal("-2.2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2069
+ assert_equal("-2.21", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2070
+ l = LongDecimal("-2.25")
2071
+ r = l.round_to_scale(1, rounding_mode)
2072
+ assert_equal("-2.3", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2073
+ assert_equal("-2.25", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2074
+ l = LongDecimal("-2.29")
2075
+ r = l.round_to_scale(1, rounding_mode)
2076
+ assert_equal("-2.3", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2077
+ assert_equal("-2.29", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2078
+ l = LongDecimal("2.24")
2079
+ r = l.round_to_scale(4, rounding_mode)
2080
+ assert_equal("2.2400", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2081
+ end
2082
+ end
2083
+ end
2084
+
2085
+ #
2086
+ # test rounding with ROUND_HARMONIC_*
2087
+ #
2088
+ def test_round_to_scale_harmonic_common
2089
+ print "\ntest_round_to_scale_harmonic_common [#{Time.now}]: "
2090
+ ALL_ROUNDING_MODES.each do |rounding_mode|
2091
+ if (rounding_mode.major == MAJOR_HARMONIC)
2092
+ l = LongDecimal("0.00")
2093
+ r = l.round_to_scale(1, rounding_mode)
2094
+ assert_equal("0.0", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2095
+ assert_equal("0.00", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2096
+ l = LongDecimal("0.01")
2097
+ r = l.round_to_scale(1, rounding_mode)
2098
+ assert_equal("0.1", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2099
+ assert_equal("0.01", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2100
+ l = LongDecimal("0.000001")
2101
+ r = l.round_to_scale(1, rounding_mode)
2102
+ assert_equal("0.1", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2103
+ assert_equal("0.000001", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2104
+ r = l.round_to_scale(0, rounding_mode)
2105
+ assert_equal("1", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2106
+ assert_equal("0.000001", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2107
+ l = LongDecimal("0.099999")
2108
+ r = l.round_to_scale(1, rounding_mode)
2109
+ assert_equal("0.1", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2110
+ assert_equal("0.099999", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2111
+ l = LongDecimal("-0.01")
2112
+ r = l.round_to_scale(1, rounding_mode)
2113
+ assert_equal("-0.1", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2114
+ assert_equal("-0.01", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2115
+ l = LongDecimal("-0.000001")
2116
+ r = l.round_to_scale(1, rounding_mode)
2117
+ assert_equal("-0.1", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2118
+ assert_equal("-0.000001", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2119
+ r = l.round_to_scale(0, rounding_mode)
2120
+ assert_equal("-1", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2121
+ l = LongDecimal("-0.099999")
2122
+ r = l.round_to_scale(1, rounding_mode)
2123
+ assert_equal("-0.1", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2124
+ assert_equal("-0.099999", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2125
+
2126
+ # harmonic mean of 1 and 2 is 4/3
2127
+ l = LongDecimal("1.33333333333333333333333333333333333333333333")
2128
+ r = l.round_to_scale(0, rounding_mode)
2129
+ assert_equal("1", r.to_s, "l=#{l.inspect} r=#{r.inspect} rounding_mode=#{rounding_mode}")
2130
+ assert_equal("1.33333333333333333333333333333333333333333333", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2131
+ l = LongDecimal("1.33333333333333333333333333333333333333333334")
2132
+ r = l.round_to_scale(0, rounding_mode)
2133
+ assert_equal("2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2134
+ assert_equal("1.33333333333333333333333333333333333333333334", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2135
+ l = LongDecimal("-1.33333333333333333333333333333333333333333333")
2136
+ r = l.round_to_scale(0, rounding_mode)
2137
+ assert_equal("-1", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2138
+ assert_equal("-1.33333333333333333333333333333333333333333333", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2139
+ l = LongDecimal("-1.33333333333333333333333333333333333333333334")
2140
+ r = l.round_to_scale(0, rounding_mode)
2141
+ assert_equal("-2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2142
+ assert_equal("-1.33333333333333333333333333333333333333333334", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2143
+
2144
+ l = LongDecimal("2.20")
2145
+ r = l.round_to_scale(1, rounding_mode)
2146
+ assert_equal("2.2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2147
+ assert_equal("2.20", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2148
+ l = LongDecimal("2.21")
2149
+ r = l.round_to_scale(1, rounding_mode)
2150
+ assert_equal("2.2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2151
+ assert_equal("2.21", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2152
+ l = LongDecimal("2.25")
2153
+ r = l.round_to_scale(1, rounding_mode)
2154
+ assert_equal("2.3", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2155
+ assert_equal("2.25", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2156
+ l = LongDecimal("2.29")
2157
+ r = l.round_to_scale(1, rounding_mode)
2158
+ assert_equal("2.3", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2159
+ assert_equal("2.29", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2160
+ l = LongDecimal("-2.20")
2161
+ r = l.round_to_scale(1, rounding_mode)
2162
+ assert_equal("-2.2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2163
+ assert_equal("-2.20", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2164
+ l = LongDecimal("-2.21")
2165
+ r = l.round_to_scale(1, rounding_mode)
2166
+ assert_equal("-2.2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2167
+ assert_equal("-2.21", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2168
+ l = LongDecimal("-2.25")
2169
+ r = l.round_to_scale(1, rounding_mode)
2170
+ assert_equal("-2.3", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2171
+ assert_equal("-2.25", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2172
+ l = LongDecimal("-2.29")
2173
+ r = l.round_to_scale(1, rounding_mode)
2174
+ assert_equal("-2.3", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2175
+ assert_equal("-2.29", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2176
+ l = LongDecimal("2.24")
2177
+ r = l.round_to_scale(4, rounding_mode)
2178
+ assert_equal("2.2400", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2179
+ end
2180
+ end
2181
+ end
2182
+
2183
+ #
2184
+ # test rounding with ROUND_HARMONIC_UP
2185
+ #
2186
+ def test_round_to_scale_harmonic_up
2187
+ print "\ntest_round_to_scale_harmonic_up [#{Time.now}]: "
2188
+ l = LongDecimal("2.39")
2189
+ r = l.round_to_scale(0, ROUND_HARMONIC_UP)
2190
+ assert_equal("2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2191
+ assert_equal("2.39", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2192
+ l = LongDecimal("2.40")
2193
+ r = l.round_to_scale(0, ROUND_HARMONIC_UP)
2194
+ assert_equal("3", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2195
+ assert_equal("2.40", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2196
+ l = LongDecimal("2.41")
2197
+ r = l.round_to_scale(0, ROUND_HARMONIC_UP)
2198
+ assert_equal("3", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2199
+ assert_equal("2.41", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2200
+ l = LongDecimal("-2.39")
2201
+ r = l.round_to_scale(0, ROUND_HARMONIC_UP)
2202
+ assert_equal("-2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2203
+ assert_equal("-2.39", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2204
+ l = LongDecimal("-2.40")
2205
+ r = l.round_to_scale(0, ROUND_HARMONIC_UP)
2206
+ assert_equal("-3", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2207
+ assert_equal("-2.40", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2208
+ l = LongDecimal("12.47999")
2209
+ r = l.round_to_scale(0, ROUND_HARMONIC_UP)
2210
+ assert_equal("12", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2211
+ assert_equal("12.47999", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2212
+ l = LongDecimal("12.48")
2213
+ r = l.round_to_scale(0, ROUND_HARMONIC_UP)
2214
+ assert_equal("13", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2215
+ assert_equal("12.48", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2216
+ l = LongDecimal("12.48001")
2217
+ r = l.round_to_scale(0, ROUND_HARMONIC_UP)
2218
+ assert_equal("13", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2219
+ assert_equal("12.48001", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2220
+ end
2221
+
2222
+ #
2223
+ # test rounding with ROUND_HARMONIC_DOWN
2224
+ #
2225
+ def test_round_to_scale_harmonic_down
2226
+ print "\ntest_round_to_scale_harmonic_down [#{Time.now}]: "
2227
+ l = LongDecimal("2.39")
2228
+ r = l.round_to_scale(0, ROUND_HARMONIC_DOWN)
2229
+ assert_equal("2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2230
+ assert_equal("2.39", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2231
+ l = LongDecimal("2.40")
2232
+ r = l.round_to_scale(0, ROUND_HARMONIC_DOWN)
2233
+ assert_equal("2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2234
+ assert_equal("2.40", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2235
+ l = LongDecimal("2.41")
2236
+ r = l.round_to_scale(0, ROUND_HARMONIC_DOWN)
2237
+ assert_equal("3", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2238
+ assert_equal("2.41", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2239
+ l = LongDecimal("-2.39")
2240
+ r = l.round_to_scale(0, ROUND_HARMONIC_DOWN)
2241
+ assert_equal("-2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2242
+ assert_equal("-2.39", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2243
+ l = LongDecimal("-2.40")
2244
+ r = l.round_to_scale(0, ROUND_HARMONIC_DOWN)
2245
+ assert_equal("-2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2246
+ assert_equal("-2.40", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2247
+ l = LongDecimal("12.47999")
2248
+ r = l.round_to_scale(0, ROUND_HARMONIC_DOWN)
2249
+ assert_equal("12", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2250
+ assert_equal("12.47999", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2251
+ l = LongDecimal("12.48")
2252
+ r = l.round_to_scale(0, ROUND_HARMONIC_DOWN)
2253
+ assert_equal("12", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2254
+ assert_equal("12.48", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2255
+ l = LongDecimal("12.48001")
2256
+ r = l.round_to_scale(0, ROUND_HARMONIC_DOWN)
2257
+ assert_equal("13", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2258
+ assert_equal("12.48001", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2259
+ end
2260
+
2261
+ #
2262
+ # test rounding with ROUND_HARMONIC_CEILING
2263
+ #
2264
+ def test_round_to_scale_harmonic_ceiling
2265
+ print "\ntest_round_to_scale_harmonic_ceiling [#{Time.now}]: "
2266
+ l = LongDecimal("2.39")
2267
+ r = l.round_to_scale(0, ROUND_HARMONIC_CEILING)
2268
+ assert_equal("2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2269
+ assert_equal("2.39", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2270
+ l = LongDecimal("2.40")
2271
+ r = l.round_to_scale(0, ROUND_HARMONIC_CEILING)
2272
+ assert_equal("3", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2273
+ assert_equal("2.40", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2274
+ l = LongDecimal("2.41")
2275
+ r = l.round_to_scale(0, ROUND_HARMONIC_CEILING)
2276
+ assert_equal("3", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2277
+ assert_equal("2.41", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2278
+ l = LongDecimal("-2.39")
2279
+ r = l.round_to_scale(0, ROUND_HARMONIC_CEILING)
2280
+ assert_equal("-2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2281
+ assert_equal("-2.39", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2282
+ l = LongDecimal("-2.40")
2283
+ r = l.round_to_scale(0, ROUND_HARMONIC_CEILING)
2284
+ assert_equal("-2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2285
+ assert_equal("-2.40", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2286
+ l = LongDecimal("12.47999")
2287
+ r = l.round_to_scale(0, ROUND_HARMONIC_CEILING)
2288
+ assert_equal("12", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2289
+ assert_equal("12.47999", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2290
+ l = LongDecimal("12.48")
2291
+ r = l.round_to_scale(0, ROUND_HARMONIC_CEILING)
2292
+ assert_equal("13", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2293
+ assert_equal("12.48", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2294
+ l = LongDecimal("12.48001")
2295
+ r = l.round_to_scale(0, ROUND_HARMONIC_CEILING)
2296
+ assert_equal("13", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2297
+ assert_equal("12.48001", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2298
+ end
2299
+
2300
+ #
2301
+ # test rounding with ROUND_HARMONIC_FLOOR
2302
+ #
2303
+ def test_round_to_scale_harmonic_floor
2304
+ print "\ntest_round_to_scale_harmonic_floor [#{Time.now}]: "
2305
+ l = LongDecimal("2.39")
2306
+ r = l.round_to_scale(0, ROUND_HARMONIC_FLOOR)
2307
+ assert_equal("2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2308
+ assert_equal("2.39", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2309
+ l = LongDecimal("2.40")
2310
+ r = l.round_to_scale(0, ROUND_HARMONIC_FLOOR)
2311
+ assert_equal("2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2312
+ assert_equal("2.40", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2313
+ l = LongDecimal("2.41")
2314
+ r = l.round_to_scale(0, ROUND_HARMONIC_FLOOR)
2315
+ assert_equal("3", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2316
+ assert_equal("2.41", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2317
+ l = LongDecimal("-2.39")
2318
+ r = l.round_to_scale(0, ROUND_HARMONIC_FLOOR)
2319
+ assert_equal("-2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2320
+ assert_equal("-2.39", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2321
+ l = LongDecimal("-2.40")
2322
+ r = l.round_to_scale(0, ROUND_HARMONIC_FLOOR)
2323
+ assert_equal("-3", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2324
+ assert_equal("-2.40", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2325
+ l = LongDecimal("12.47999")
2326
+ r = l.round_to_scale(0, ROUND_HARMONIC_FLOOR)
2327
+ assert_equal("12", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2328
+ assert_equal("12.47999", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2329
+ l = LongDecimal("12.48")
2330
+ r = l.round_to_scale(0, ROUND_HARMONIC_FLOOR)
2331
+ assert_equal("12", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2332
+ assert_equal("12.48", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2333
+ l = LongDecimal("12.48001")
2334
+ r = l.round_to_scale(0, ROUND_HARMONIC_FLOOR)
2335
+ assert_equal("13", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2336
+ assert_equal("12.48001", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2337
+ end
2338
+
2339
+ #
2340
+ # test rounding with ROUND_HARMONIC_EVEN
2341
+ #
2342
+ def test_round_to_scale_harmonic_even
2343
+ print "\ntest_round_to_scale_harmonic_even [#{Time.now}]: "
2344
+ l = LongDecimal("2.39")
2345
+ r = l.round_to_scale(0, ROUND_HARMONIC_EVEN)
2346
+ assert_equal("2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2347
+ assert_equal("2.39", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2348
+ l = LongDecimal("2.40")
2349
+ r = l.round_to_scale(0, ROUND_HARMONIC_EVEN)
2350
+ assert_equal("2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2351
+ assert_equal("2.40", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2352
+ l = LongDecimal("2.41")
2353
+ r = l.round_to_scale(0, ROUND_HARMONIC_EVEN)
2354
+ assert_equal("3", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2355
+ assert_equal("2.41", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2356
+ l = LongDecimal("-2.39")
2357
+ r = l.round_to_scale(0, ROUND_HARMONIC_EVEN)
2358
+ assert_equal("-2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2359
+ assert_equal("-2.39", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2360
+ l = LongDecimal("-2.40")
2361
+ r = l.round_to_scale(0, ROUND_HARMONIC_EVEN)
2362
+ assert_equal("-2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2363
+ assert_equal("-2.40", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2364
+ l = LongDecimal("12.47999")
2365
+ r = l.round_to_scale(0, ROUND_HARMONIC_EVEN)
2366
+ assert_equal("12", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2367
+ assert_equal("12.47999", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2368
+ l = LongDecimal("12.48")
2369
+ r = l.round_to_scale(0, ROUND_HARMONIC_EVEN)
2370
+ assert_equal("12", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2371
+ assert_equal("12.48", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2372
+ l = LongDecimal("12.48001")
2373
+ r = l.round_to_scale(0, ROUND_HARMONIC_EVEN)
2374
+ assert_equal("13", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2375
+ assert_equal("12.48001", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2376
+ end
2377
+
2378
+ #
2379
+ # test rounding with ROUND_HARMONIC_ODD
2380
+ #
2381
+ def test_round_to_scale_harmonic_even
2382
+ print "\ntest_round_to_scale_harmonic_even [#{Time.now}]: "
2383
+ l = LongDecimal("2.39")
2384
+ r = l.round_to_scale(0, ROUND_HARMONIC_ODD)
2385
+ assert_equal("2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2386
+ assert_equal("2.39", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2387
+ l = LongDecimal("2.40")
2388
+ r = l.round_to_scale(0, ROUND_HARMONIC_ODD)
2389
+ assert_equal("3", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2390
+ assert_equal("2.40", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2391
+ l = LongDecimal("2.41")
2392
+ r = l.round_to_scale(0, ROUND_HARMONIC_ODD)
2393
+ assert_equal("3", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2394
+ assert_equal("2.41", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2395
+ l = LongDecimal("-2.39")
2396
+ r = l.round_to_scale(0, ROUND_HARMONIC_ODD)
2397
+ assert_equal("-2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2398
+ assert_equal("-2.39", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2399
+ l = LongDecimal("-2.40")
2400
+ r = l.round_to_scale(0, ROUND_HARMONIC_ODD)
2401
+ assert_equal("-3", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2402
+ assert_equal("-2.40", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2403
+ l = LongDecimal("12.47999")
2404
+ r = l.round_to_scale(0, ROUND_HARMONIC_ODD)
2405
+ assert_equal("12", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2406
+ assert_equal("12.47999", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2407
+ l = LongDecimal("12.48")
2408
+ r = l.round_to_scale(0, ROUND_HARMONIC_ODD)
2409
+ assert_equal("13", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2410
+ assert_equal("12.48", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2411
+ l = LongDecimal("12.48001")
2412
+ r = l.round_to_scale(0, ROUND_HARMONIC_ODD)
2413
+ assert_equal("13", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2414
+ assert_equal("12.48001", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2415
+ end
2416
+
2417
+ #
2418
+ # test rounding with ROUND_QUADRATIC_*
2419
+ #
2420
+ def test_round_to_scale_quadratic_common
2421
+ print "\ntest_round_to_scale_quadratic_common [#{Time.now}]: "
2422
+ ALL_ROUNDING_MODES.each do |rounding_mode|
2423
+ if (rounding_mode.major == MAJOR_QUADRATIC)
2424
+ l = LongDecimal("0.00")
2425
+ r = l.round_to_scale(1, rounding_mode)
2426
+ assert_equal("0.0", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2427
+ assert_equal("0.00", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2428
+ l = LongDecimal("0.01")
2429
+ r = l.round_to_scale(1, rounding_mode)
2430
+ assert_equal("0.0", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2431
+ assert_equal("0.01", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2432
+ l = LongDecimal("0.000001")
2433
+ r = l.round_to_scale(1, rounding_mode)
2434
+ assert_equal("0.0", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2435
+ assert_equal("0.000001", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2436
+ r = l.round_to_scale(0, rounding_mode)
2437
+ assert_equal("0", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2438
+ assert_equal("0.000001", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2439
+ l = LongDecimal("0.099999")
2440
+ r = l.round_to_scale(1, rounding_mode)
2441
+ assert_equal("0.1", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2442
+ assert_equal("0.099999", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2443
+ l = LongDecimal("-0.01")
2444
+ r = l.round_to_scale(1, rounding_mode)
2445
+ assert_equal("0.0", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2446
+ assert_equal("-0.01", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2447
+ l = LongDecimal("-0.000001")
2448
+ r = l.round_to_scale(1, rounding_mode)
2449
+ assert_equal("0.0", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2450
+ assert_equal("-0.000001", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2451
+ r = l.round_to_scale(0, rounding_mode)
2452
+ assert_equal("0", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2453
+ l = LongDecimal("-0.099999")
2454
+ r = l.round_to_scale(1, rounding_mode)
2455
+ assert_equal("-0.1", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2456
+ assert_equal("-0.099999", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2457
+
2458
+ # sqrt(2) is the quadratic mean of 0 and 2: 0.7071067811865475244008443621048490392848359376884740365883398689953662392310535194251937671638207864
2459
+ l = LongDecimal("0.7071067811")
2460
+ r = l.round_to_scale(0, rounding_mode)
2461
+ assert_equal("0", r.to_s, "l=#{l.inspect} r=#{r.inspect} rounding_mode=#{rounding_mode}")
2462
+ assert_equal("0.7071067811", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2463
+ l = LongDecimal("0.7071067812")
2464
+ r = l.round_to_scale(0, rounding_mode)
2465
+ assert_equal("1", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2466
+ assert_equal("0.7071067812", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2467
+ l = LongDecimal("-0.7071067811")
2468
+ r = l.round_to_scale(0, rounding_mode)
2469
+ assert_equal("0", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2470
+ assert_equal("-0.7071067811", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2471
+ l = LongDecimal("-0.7071067812")
2472
+ r = l.round_to_scale(0, rounding_mode)
2473
+ assert_equal("-1", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2474
+ assert_equal("-0.7071067812", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2475
+
2476
+ l = LongDecimal("1.5811388300")
2477
+ r = l.round_to_scale(0, rounding_mode)
2478
+ assert_equal("1", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2479
+ assert_equal("1.5811388300", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2480
+ l = LongDecimal("1.5811388301")
2481
+ r = l.round_to_scale(0, rounding_mode)
2482
+ assert_equal("2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2483
+ assert_equal("1.5811388301", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2484
+
2485
+ l = LongDecimal("2.20")
2486
+ r = l.round_to_scale(1, rounding_mode)
2487
+ assert_equal("2.2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2488
+ assert_equal("2.20", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2489
+ l = LongDecimal("2.21")
2490
+ r = l.round_to_scale(1, rounding_mode)
2491
+ assert_equal("2.2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2492
+ assert_equal("2.21", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2493
+ l = LongDecimal("2.25")
2494
+ r = l.round_to_scale(1, rounding_mode)
2495
+ assert_equal("2.2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2496
+ assert_equal("2.25", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2497
+ l = LongDecimal("2.29")
2498
+ r = l.round_to_scale(1, rounding_mode)
2499
+ assert_equal("2.3", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2500
+ assert_equal("2.29", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2501
+ l = LongDecimal("-2.20")
2502
+ r = l.round_to_scale(1, rounding_mode)
2503
+ assert_equal("-2.2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2504
+ assert_equal("-2.20", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2505
+ l = LongDecimal("-2.21")
2506
+ r = l.round_to_scale(1, rounding_mode)
2507
+ assert_equal("-2.2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2508
+ assert_equal("-2.21", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2509
+ l = LongDecimal("-2.25")
2510
+ r = l.round_to_scale(1, rounding_mode)
2511
+ assert_equal("-2.2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2512
+ assert_equal("-2.25", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2513
+ l = LongDecimal("-2.29")
2514
+ r = l.round_to_scale(1, rounding_mode)
2515
+ assert_equal("-2.3", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2516
+ assert_equal("-2.29", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2517
+ l = LongDecimal("2.24")
2518
+ r = l.round_to_scale(4, rounding_mode)
2519
+ assert_equal("2.2400", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2520
+ end
2521
+ end
2522
+ end
2523
+
2524
+ #
2525
+ # test rounding with ROUND_CUBIC_*
2526
+ #
2527
+ def test_round_to_scale_cubic_common
2528
+ print "\ntest_round_to_scale_cubic_common [#{Time.now}]: "
2529
+ ALL_ROUNDING_MODES.each do |rounding_mode|
2530
+ if (rounding_mode.major == MAJOR_CUBIC)
2531
+ l = LongDecimal("0.00")
2532
+ r = l.round_to_scale(1, rounding_mode)
2533
+ assert_equal("0.0", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2534
+ assert_equal("0.00", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2535
+ l = LongDecimal("0.01")
2536
+ r = l.round_to_scale(1, rounding_mode)
2537
+ assert_equal("0.0", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2538
+ assert_equal("0.01", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2539
+ l = LongDecimal("0.000001")
2540
+ r = l.round_to_scale(1, rounding_mode)
2541
+ assert_equal("0.0", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2542
+ assert_equal("0.000001", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2543
+ r = l.round_to_scale(0, rounding_mode)
2544
+ assert_equal("0", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2545
+ assert_equal("0.000001", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2546
+ l = LongDecimal("0.099999")
2547
+ r = l.round_to_scale(1, rounding_mode)
2548
+ assert_equal("0.1", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2549
+ assert_equal("0.099999", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2550
+ l = LongDecimal("-0.01")
2551
+ r = l.round_to_scale(1, rounding_mode)
2552
+ assert_equal("0.0", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2553
+ assert_equal("-0.01", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2554
+ l = LongDecimal("-0.000001")
2555
+ r = l.round_to_scale(1, rounding_mode)
2556
+ assert_equal("0.0", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2557
+ assert_equal("-0.000001", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2558
+ r = l.round_to_scale(0, rounding_mode)
2559
+ assert_equal("0", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2560
+ l = LongDecimal("-0.099999")
2561
+ r = l.round_to_scale(1, rounding_mode)
2562
+ assert_equal("-0.1", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2563
+ assert_equal("-0.099999", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2564
+
2565
+ l = LongDecimal("0.7937005259")
2566
+ r = l.round_to_scale(0, rounding_mode)
2567
+ assert_equal("0", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2568
+ assert_equal("0.7937005259", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2569
+ l = LongDecimal("0.7937005260")
2570
+ r = l.round_to_scale(0, rounding_mode)
2571
+ assert_equal("1", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2572
+ assert_equal("0.7937005260", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2573
+ l = LongDecimal("-0.7937005259")
2574
+ r = l.round_to_scale(0, rounding_mode)
2575
+ assert_equal("0", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2576
+ assert_equal("-0.7937005259", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2577
+ l = LongDecimal("-0.7937005260")
2578
+ r = l.round_to_scale(0, rounding_mode)
2579
+ assert_equal("-1", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2580
+ assert_equal("-0.7937005260", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2581
+
2582
+ l = LongDecimal("1.6509636244")
2583
+ r = l.round_to_scale(0, rounding_mode)
2584
+ assert_equal("1", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2585
+ assert_equal("1.6509636244", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2586
+ l = LongDecimal("1.6509636245")
2587
+ r = l.round_to_scale(0, rounding_mode)
2588
+ assert_equal("2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2589
+ assert_equal("1.6509636245", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2590
+
2591
+ l = LongDecimal("2.20")
2592
+ r = l.round_to_scale(1, rounding_mode)
2593
+ assert_equal("2.2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2594
+ assert_equal("2.20", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2595
+ l = LongDecimal("2.21")
2596
+ r = l.round_to_scale(1, rounding_mode)
2597
+ assert_equal("2.2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2598
+ assert_equal("2.21", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2599
+ l = LongDecimal("2.25")
2600
+ r = l.round_to_scale(1, rounding_mode)
2601
+ assert_equal("2.2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2602
+ assert_equal("2.25", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2603
+ l = LongDecimal("2.29")
2604
+ r = l.round_to_scale(1, rounding_mode)
2605
+ assert_equal("2.3", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2606
+ assert_equal("2.29", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2607
+ l = LongDecimal("-2.20")
2608
+ r = l.round_to_scale(1, rounding_mode)
2609
+ assert_equal("-2.2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2610
+ assert_equal("-2.20", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2611
+ l = LongDecimal("-2.21")
2612
+ r = l.round_to_scale(1, rounding_mode)
2613
+ assert_equal("-2.2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2614
+ assert_equal("-2.21", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2615
+ l = LongDecimal("-2.25")
2616
+ r = l.round_to_scale(1, rounding_mode)
2617
+ assert_equal("-2.2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2618
+ assert_equal("-2.25", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2619
+ l = LongDecimal("-2.29")
2620
+ r = l.round_to_scale(1, rounding_mode)
2621
+ assert_equal("-2.3", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2622
+ assert_equal("-2.29", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
2623
+ l = LongDecimal("2.24")
2624
+ r = l.round_to_scale(4, rounding_mode)
2625
+ assert_equal("2.2400", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
2626
+ end
2627
+ end
2628
+ end
2629
+
1437
2630
  #
1438
2631
  # test rounding with ROUND_UNNECESSARY
1439
2632
  #
1440
2633
  def test_round_to_scale_unnecessary
1441
2634
  print "\ntest_round_to_scale_unnecessary [#{Time.now}]: "
1442
2635
  l = LongDecimal("2.24")
1443
- r = l.round_to_scale(4, LongDecimal::ROUND_UNNECESSARY)
2636
+ r = l.round_to_scale(4, ROUND_UNNECESSARY)
1444
2637
  assert_equal("2.2400", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
1445
2638
  l = LongDecimal("2.2400")
1446
- r = l.round_to_scale(2, LongDecimal::ROUND_UNNECESSARY)
2639
+ r = l.round_to_scale(2, ROUND_UNNECESSARY)
1447
2640
  assert_equal("2.24", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
1448
2641
  begin
1449
2642
  l = LongDecimal("2.24")
1450
- r = l.round_to_scale(1, LongDecimal::ROUND_UNNECESSARY)
2643
+ r = l.round_to_scale(1, ROUND_UNNECESSARY)
1451
2644
  assert_fail("should not have succeeded l=#{l.inspect} r=#{r.inspect}")
1452
2645
  rescue ArgumentError
1453
2646
  # ignored
@@ -1458,23 +2651,23 @@ class TestLongDecimal_class < Test::Unit::TestCase # RUNIT::TestCase
1458
2651
  # test rounding of int to remainder set
1459
2652
  #
1460
2653
  def test_int_round_to_one_allowed_remainder
1461
- print "\ntest_int_round_to_one_allowed_remainder [#{Time.now}] (20min): "
2654
+ print "\ntest_int_round_to_one_allowed_remainder [#{Time.now}] (20sec): "
1462
2655
  $stdout.flush
1463
2656
  2.upto 20 do |modulus|
1464
2657
  0.upto modulus-1 do |r|
2658
+ print "."
1465
2659
  n = 3*modulus
1466
2660
  (-n).upto n do |i|
1467
2661
  text = "i=#{i} n=#{n} m=#{modulus} r=#{r}"
1468
- print ":"
1469
2662
  $stdout.flush
1470
2663
 
1471
- i_rounded = check_round_to_one_remainder(i, r, modulus, LongDecimalRoundingMode::ROUND_UP, LongDecimalRoundingMode::ZERO_ROUND_TO_PLUS)
2664
+ i_rounded = check_round_to_one_remainder(i, r, modulus, ROUND_UP, ZERO_ROUND_TO_PLUS)
1472
2665
  assert(i_rounded.abs >= i.abs, "i_r=#{i_rounded} " + text)
1473
2666
  if (i == 0) then
1474
2667
  assert(i_rounded >= 0, "i_r=#{i_rounded} " + text)
1475
2668
  end
1476
2669
 
1477
- i_rounded = check_round_to_one_remainder(i, r, modulus, LongDecimalRoundingMode::ROUND_DOWN, LongDecimalRoundingMode::ZERO_ROUND_TO_PLUS)
2670
+ i_rounded = check_round_to_one_remainder(i, r, modulus, ROUND_DOWN, ZERO_ROUND_TO_PLUS)
1478
2671
  if (i > 0)
1479
2672
  assert(i_rounded <= i, "i_r=#{i_rounded} " + text)
1480
2673
  elsif (i < 0)
@@ -1485,39 +2678,75 @@ class TestLongDecimal_class < Test::Unit::TestCase # RUNIT::TestCase
1485
2678
  raise("i=#{i} i_r=#{i_rounded}")
1486
2679
  end
1487
2680
 
1488
- i_rounded = check_round_to_one_remainder(i, r, modulus, LongDecimalRoundingMode::ROUND_CEILING, LongDecimalRoundingMode::ZERO_ROUND_TO_PLUS)
2681
+ i_rounded = check_round_to_one_remainder(i, r, modulus, ROUND_CEILING, ZERO_ROUND_TO_PLUS)
1489
2682
  assert(i_rounded >= i, "i_r=#{i_rounded} " + text)
1490
2683
 
1491
- i_rounded = check_round_to_one_remainder(i, r, modulus, LongDecimalRoundingMode::ROUND_FLOOR, LongDecimalRoundingMode::ZERO_ROUND_TO_PLUS)
2684
+ i_rounded = check_round_to_one_remainder(i, r, modulus, ROUND_FLOOR, ZERO_ROUND_TO_PLUS)
1492
2685
  assert(i_rounded <= i, "i_r=#{i_rounded} " + text)
1493
2686
 
1494
- i_rounded = check_round_to_one_remainder(i, r, modulus, LongDecimalRoundingMode::ROUND_HALF_UP, LongDecimalRoundingMode::ZERO_ROUND_TO_PLUS)
2687
+ i_rounded = check_round_to_one_remainder(i, r, modulus, ROUND_HALF_UP, ZERO_ROUND_TO_PLUS)
1495
2688
  dd = 2*(i_rounded - i).abs
1496
2689
  assert(dd <= modulus, "i_r=#{i_rounded} " + text)
1497
2690
  if (i_rounded.abs < i.abs || i_rounded.sgn == - i.sgn)
1498
2691
  assert(dd < modulus, "i_r=#{i_rounded} " + text)
1499
2692
  end
1500
2693
 
1501
- i_rounded = check_round_to_one_remainder(i, r, modulus, LongDecimalRoundingMode::ROUND_HALF_DOWN, LongDecimalRoundingMode::ZERO_ROUND_TO_PLUS)
2694
+ i_rounded = check_round_to_one_remainder(i, r, modulus, ROUND_HALF_DOWN, ZERO_ROUND_TO_PLUS)
1502
2695
  dd = 2*(i_rounded - i).abs
1503
2696
  assert(dd <= modulus, "i_r=#{i_rounded} " + text)
1504
2697
  if (i_rounded.abs > i.abs && i_rounded.sgn == i.sgn)
1505
2698
  assert(dd < modulus, "i_r=#{i_rounded} " + text)
1506
2699
  end
1507
2700
 
1508
- i_rounded = check_round_to_one_remainder(i, r, modulus, LongDecimalRoundingMode::ROUND_HALF_CEILING, LongDecimalRoundingMode::ZERO_ROUND_TO_PLUS)
2701
+ i_rounded = check_round_to_one_remainder(i, r, modulus, ROUND_HALF_CEILING, ZERO_ROUND_TO_PLUS)
1509
2702
  dd = 2*(i_rounded - i).abs
1510
2703
  assert(dd <= modulus, "i_r=#{i_rounded} " + text)
1511
2704
  if (i_rounded < i)
1512
2705
  assert(dd < modulus, "i_r=#{i_rounded} " + text)
1513
2706
  end
1514
2707
 
1515
- i_rounded = check_round_to_one_remainder(i, r, modulus, LongDecimalRoundingMode::ROUND_HALF_FLOOR, LongDecimalRoundingMode::ZERO_ROUND_TO_PLUS)
2708
+ i_rounded = check_round_to_one_remainder(i, r, modulus, ROUND_HALF_FLOOR, ZERO_ROUND_TO_PLUS)
1516
2709
  dd = 2*(i_rounded - i).abs
1517
2710
  assert(dd <= modulus, "i_r=#{i_rounded} " + text)
1518
2711
  if (i_rounded > i && i != 0)
1519
2712
  assert(dd < modulus, "i_r=#{i_rounded} " + text)
1520
2713
  end
2714
+
2715
+ ALL_ROUNDING_MODES.each do |rounding_mode|
2716
+ unless (rounding_mode.major == MAJOR_GEOMETRIC \
2717
+ || rounding_mode.major == MAJOR_HARMONIC \
2718
+ || rounding_mode.major == MAJOR_QUADRATIC \
2719
+ || rounding_mode.major == MAJOR_CUBIC)
2720
+ next;
2721
+ end
2722
+ if (rounding_mode.minor == MINOR_EVEN || rounding_mode.minor == MINOR_ODD)
2723
+ next
2724
+ end
2725
+ i_rounded = check_round_to_one_remainder(i, r, modulus, rounding_mode, ZERO_ROUND_TO_PLUS)
2726
+ end
2727
+ end
2728
+ end
2729
+ end
2730
+ end
2731
+
2732
+ #
2733
+ # test rounding of int to remainder set
2734
+ #
2735
+ def test_zero_round_to_zero_as_allowed_remainder
2736
+ print "\ntest_zero_round_to_zero_as_allowed_remainder [#{Time.now}]: "
2737
+
2738
+ 2.upto 20 do |modulus|
2739
+ text = "m=#{modulus}"
2740
+ ALL_ROUNDING_MODES.each do |rounding_mode|
2741
+ if (rounding_mode.minor == MINOR_EVEN || rounding_mode.minor == MINOR_ODD)
2742
+ next
2743
+ end
2744
+ if (rounding_mode.major == MAJOR_UNNECESSARY)
2745
+ next
2746
+ end
2747
+ ALL_ZERO_MODES.each do |zero_mode|
2748
+ zero_rounded = 0.round_to_allowed_remainders([0], modulus, rounding_mode, zero_mode)
2749
+ assert_equal(0, zero_rounded)
1521
2750
  end
1522
2751
  end
1523
2752
  end
@@ -1532,104 +2761,91 @@ class TestLongDecimal_class < Test::Unit::TestCase # RUNIT::TestCase
1532
2761
  0.upto modulus-1 do |r|
1533
2762
  text = "m=#{modulus} r=#{r}"
1534
2763
 
1535
- zero_r = check_round_to_one_remainder(0, r, modulus, LongDecimalRoundingMode::ROUND_UP, LongDecimalRoundingMode::ZERO_ROUND_TO_PLUS)
2764
+ zero_r = check_round_to_one_remainder(0, r, modulus, ROUND_UP, ZERO_ROUND_TO_PLUS)
1536
2765
  assert(zero_r >= 0, "0_r=#{zero_r} " + text)
1537
- zero_r = check_round_to_one_remainder(0, r, modulus, LongDecimalRoundingMode::ROUND_UP, LongDecimalRoundingMode::ZERO_ROUND_TO_MINUS)
2766
+ zero_r = check_round_to_one_remainder(0, r, modulus, ROUND_UP, ZERO_ROUND_TO_MINUS)
1538
2767
  assert(zero_r <= 0, "0_r=#{zero_r} " + text)
1539
- zero_r = check_round_to_one_remainder(0, r, modulus, LongDecimalRoundingMode::ROUND_UP, LongDecimalRoundingMode::ZERO_ROUND_TO_CLOSEST_PREFER_PLUS)
2768
+ zero_r = check_round_to_one_remainder(0, r, modulus, ROUND_UP, ZERO_ROUND_TO_CLOSEST_PREFER_PLUS)
1540
2769
  dd = 2*zero_r.abs
1541
2770
  assert(dd <= modulus, "0_r=#{zero_r} " + text)
1542
2771
  if (zero_r < 0)
1543
2772
  assert(dd < modulus, "0_r=#{zero_r} " + text)
1544
2773
  end
1545
- zero_r = check_round_to_one_remainder(0, r, modulus, LongDecimalRoundingMode::ROUND_UP, LongDecimalRoundingMode::ZERO_ROUND_TO_CLOSEST_PREFER_MINUS)
2774
+ zero_r = check_round_to_one_remainder(0, r, modulus, ROUND_UP, ZERO_ROUND_TO_CLOSEST_PREFER_MINUS)
1546
2775
  dd = 2*zero_r.abs
1547
2776
  assert(dd <= modulus, "0_r=#{zero_r} " + text)
1548
2777
  if (zero_r > 0)
1549
2778
  assert(dd < modulus, "0_r=#{zero_r} " + text)
1550
2779
  end
1551
2780
 
1552
- zero_r = check_round_to_one_remainder(0, r, modulus, LongDecimalRoundingMode::ROUND_DOWN, LongDecimalRoundingMode::ZERO_ROUND_TO_PLUS)
2781
+ zero_r = check_round_to_one_remainder(0, r, modulus, ROUND_DOWN, ZERO_ROUND_TO_PLUS)
1553
2782
  assert(zero_r >= 0, "0_r=#{zero_r} " + text)
1554
- zero_r = check_round_to_one_remainder(0, r, modulus, LongDecimalRoundingMode::ROUND_DOWN, LongDecimalRoundingMode::ZERO_ROUND_TO_MINUS)
2783
+ zero_r = check_round_to_one_remainder(0, r, modulus, ROUND_DOWN, ZERO_ROUND_TO_MINUS)
1555
2784
  assert(zero_r <= 0, "0_r=#{zero_r} " + text)
1556
- zero_r = check_round_to_one_remainder(0, r, modulus, LongDecimalRoundingMode::ROUND_DOWN, LongDecimalRoundingMode::ZERO_ROUND_TO_CLOSEST_PREFER_PLUS)
2785
+ zero_r = check_round_to_one_remainder(0, r, modulus, ROUND_DOWN, ZERO_ROUND_TO_CLOSEST_PREFER_PLUS)
1557
2786
  dd = 2*zero_r.abs
1558
2787
  assert(dd <= modulus, "0_r=#{zero_r} " + text)
1559
2788
  if (zero_r < 0)
1560
2789
  assert(dd < modulus, "0_r=#{zero_r} " + text)
1561
2790
  end
1562
- zero_r = check_round_to_one_remainder(0, r, modulus, LongDecimalRoundingMode::ROUND_DOWN, LongDecimalRoundingMode::ZERO_ROUND_TO_CLOSEST_PREFER_MINUS)
2791
+ zero_r = check_round_to_one_remainder(0, r, modulus, ROUND_DOWN, ZERO_ROUND_TO_CLOSEST_PREFER_MINUS)
1563
2792
  dd = 2*zero_r.abs
1564
2793
  assert(dd <= modulus, "0_r=#{zero_r} " + text)
1565
2794
  if (zero_r > 0)
1566
2795
  assert(dd < modulus, "0_r=#{zero_r} " + text)
1567
2796
  end
1568
2797
 
1569
- zero_r = check_round_to_one_remainder(0, r, modulus, LongDecimalRoundingMode::ROUND_CEILING, LongDecimalRoundingMode::ZERO_ROUND_UNNECESSARY)
2798
+ # ceiling always rounds toward positive infinity, so 0 does not need any special handling and zero_rounding_mode is ignored
2799
+ zero_r = check_round_to_one_remainder(0, r, modulus, ROUND_CEILING, ZERO_ROUND_UNNECESSARY)
1570
2800
  assert(zero_r >= 0, "0_r=#{zero_r} " + text)
1571
2801
 
1572
- zero_r = check_round_to_one_remainder(0, r, modulus, LongDecimalRoundingMode::ROUND_FLOOR, LongDecimalRoundingMode::ZERO_ROUND_UNNECESSARY)
2802
+ # ceiling always rounds toward negative infinity, so 0 does not need any special handling and zero_rounding_mode is ignored
2803
+ zero_r = check_round_to_one_remainder(0, r, modulus, ROUND_FLOOR, ZERO_ROUND_UNNECESSARY)
1573
2804
  assert(zero_r <= 0, "0_r=#{zero_r} " + text)
1574
2805
 
1575
- zero_r = check_round_to_one_remainder(0, r, modulus, LongDecimalRoundingMode::ROUND_HALF_UP, LongDecimalRoundingMode::ZERO_ROUND_TO_PLUS)
1576
- dd = 2*zero_r.abs
1577
- assert(dd <= modulus, "0_r=#{zero_r} " + text)
1578
- if (zero_r < 0)
1579
- assert(dd < modulus, "0_r=#{zero_r} " + text)
1580
- end
1581
- zero_r = check_round_to_one_remainder(0, r, modulus, LongDecimalRoundingMode::ROUND_HALF_UP, LongDecimalRoundingMode::ZERO_ROUND_TO_CLOSEST_PREFER_PLUS)
1582
- dd = 2*zero_r.abs
1583
- assert(dd <= modulus, "0_r=#{zero_r} " + text)
1584
- if (zero_r < 0)
1585
- assert(dd < modulus, "0_r=#{zero_r} " + text)
1586
- end
1587
- zero_r = check_round_to_one_remainder(0, r, modulus, LongDecimalRoundingMode::ROUND_HALF_UP, LongDecimalRoundingMode::ZERO_ROUND_TO_MINUS)
1588
- dd = 2*zero_r.abs
1589
- assert(dd <= modulus, "0_r=#{zero_r} " + text)
1590
- if (zero_r > 0)
1591
- assert(dd < modulus, "0_r=#{zero_r} " + text)
1592
- end
1593
- zero_r = check_round_to_one_remainder(0, r, modulus, LongDecimalRoundingMode::ROUND_HALF_UP, LongDecimalRoundingMode::ZERO_ROUND_TO_CLOSEST_PREFER_MINUS)
1594
- dd = 2*zero_r.abs
1595
- assert(dd <= modulus, "0_r=#{zero_r} " + text)
1596
- if (zero_r > 0)
1597
- assert(dd < modulus, "0_r=#{zero_r} " + text)
1598
- end
1599
-
1600
- zero_r = check_round_to_one_remainder(0, r, modulus, LongDecimalRoundingMode::ROUND_HALF_DOWN, LongDecimalRoundingMode::ZERO_ROUND_TO_PLUS)
1601
- dd = 2*zero_r.abs
1602
- assert(dd <= modulus, "0_r=#{zero_r} " + text)
1603
- if (zero_r < 0)
1604
- assert(dd < modulus, "0_r=#{zero_r} " + text)
1605
- end
1606
- zero_r = check_round_to_one_remainder(0, r, modulus, LongDecimalRoundingMode::ROUND_HALF_DOWN, LongDecimalRoundingMode::ZERO_ROUND_TO_CLOSEST_PREFER_PLUS)
1607
- dd = 2*zero_r.abs
1608
- assert(dd <= modulus, "0_r=#{zero_r} " + text)
1609
- if (zero_r < 0)
1610
- assert(dd < modulus, "0_r=#{zero_r} " + text)
1611
- end
1612
- zero_r = check_round_to_one_remainder(0, r, modulus, LongDecimalRoundingMode::ROUND_HALF_DOWN, LongDecimalRoundingMode::ZERO_ROUND_TO_MINUS)
1613
- dd = 2*zero_r.abs
1614
- assert(dd <= modulus, "0_r=#{zero_r} " + text)
1615
- if (zero_r > 0)
1616
- assert(dd < modulus, "0_r=#{zero_r} " + text)
1617
- end
1618
- zero_r = check_round_to_one_remainder(0, r, modulus, LongDecimalRoundingMode::ROUND_HALF_DOWN, LongDecimalRoundingMode::ZERO_ROUND_TO_CLOSEST_PREFER_MINUS)
1619
- dd = 2*zero_r.abs
1620
- assert(dd <= modulus, "0_r=#{zero_r} " + text)
1621
- if (zero_r > 0)
1622
- assert(dd < modulus, "0_r=#{zero_r} " + text)
2806
+ ALL_ROUNDING_MODES.each do |rounding_mode|
2807
+ unless (rounding_mode.minor == MINOR_UP || rounding_mode.minor == MINOR_DOWN)
2808
+ next
2809
+ end
2810
+ unless (rounding_mode.major == MAJOR_HALF \
2811
+ || rounding_mode.major == MAJOR_HARMONIC \
2812
+ || rounding_mode.major == MAJOR_GEOMETRIC \
2813
+ || rounding_mode.major == MAJOR_QUADRATIC \
2814
+ || rounding_mode.major == MAJOR_CUBIC)
2815
+ next
2816
+ end
2817
+ [ZERO_ROUND_TO_PLUS,ZERO_ROUND_TO_CLOSEST_PREFER_PLUS].each do |zero_rounding_mode|
2818
+ zero_r = check_round_to_one_remainder(0, r, modulus, rounding_mode, zero_rounding_mode)
2819
+ if (rounding_mode.major == MAJOR_HALF)
2820
+ dd = 2*zero_r.abs
2821
+ text2 = text + " dd=#{dd} rm=#{rounding_mode} zm=#{zero_rounding_mode}"
2822
+ assert(dd <= modulus, "0_r=#{zero_r} " + text2)
2823
+ if (zero_r < 0)
2824
+ assert(dd < modulus, "0_r=#{zero_r} " + text2)
2825
+ end
2826
+ end
2827
+ end
2828
+ [ZERO_ROUND_TO_MINUS,ZERO_ROUND_TO_CLOSEST_PREFER_MINUS].each do |zero_rounding_mode|
2829
+ zero_r = check_round_to_one_remainder(0, r, modulus, rounding_mode, ZERO_ROUND_TO_MINUS)
2830
+ if (rounding_mode.major == MAJOR_HALF)
2831
+ dd = 2*zero_r.abs
2832
+ text2 = text + " dd=#{dd} rm=#{rounding_mode}"
2833
+ assert(dd <= modulus, "0_r=#{zero_r} " + text2)
2834
+ if (zero_r > 0)
2835
+ assert(dd < modulus, "0_r=#{zero_r} " + text2)
2836
+ end
2837
+ end
2838
+ end
1623
2839
  end
1624
2840
 
1625
- zero_r = check_round_to_one_remainder(0, r, modulus, LongDecimalRoundingMode::ROUND_HALF_CEILING, LongDecimalRoundingMode::ZERO_ROUND_UNNECESSARY)
2841
+ zero_r = check_round_to_one_remainder(0, r, modulus, ROUND_HALF_CEILING, ZERO_ROUND_UNNECESSARY)
1626
2842
  dd = 2*zero_r.abs
1627
2843
  assert(dd <= modulus, "0_r=#{zero_r} " + text)
1628
2844
  if (zero_r < 0)
1629
2845
  assert(dd < modulus, "0_r=#{zero_r} " + text)
1630
2846
  end
1631
2847
 
1632
- zero_r = check_round_to_one_remainder(0, r, modulus, LongDecimalRoundingMode::ROUND_HALF_FLOOR, LongDecimalRoundingMode::ZERO_ROUND_UNNECESSARY)
2848
+ zero_r = check_round_to_one_remainder(0, r, modulus, ROUND_HALF_FLOOR, ZERO_ROUND_UNNECESSARY)
1633
2849
  dd = 2*zero_r.abs
1634
2850
  assert(dd <= modulus, "0_r=#{zero_r} " + text)
1635
2851
  if (zero_r > 0)
@@ -1641,19 +2857,20 @@ class TestLongDecimal_class < Test::Unit::TestCase # RUNIT::TestCase
1641
2857
 
1642
2858
  def check_round_to_one_remainder(i, r, modulus, rounding_mode, zero_rounding_mode)
1643
2859
 
1644
- zero_modes = [ LongDecimalRoundingMode::ZERO_ROUND_TO_PLUS,\
1645
- LongDecimalRoundingMode::ZERO_ROUND_TO_MINUS,\
1646
- LongDecimalRoundingMode::ZERO_ROUND_TO_CLOSEST_PREFER_PLUS,\
1647
- LongDecimalRoundingMode::ZERO_ROUND_TO_CLOSEST_PREFER_MINUS,\
1648
- LongDecimalRoundingMode::ZERO_ROUND_UNNECESSARY ];
1649
2860
  remainders = [ r ]
1650
2861
  i_rounded = i.round_to_allowed_remainders(remainders, modulus, rounding_mode, zero_rounding_mode)
1651
- if (i != 0 || zero_rounding_mode == LongDecimalRoundingMode::ZERO_ROUND_UNNECESSARY)
1652
- zero_modes.each do |zm|
2862
+ text = "i_r=#{i_rounded} i=#{i} m=#{modulus} r=#{r} mode=#{rounding_mode} zm=#{zero_rounding_mode}"
2863
+
2864
+ # if i is not zero or zero_rounding_mode is ZERO_ROUND_UNNECESSARY, using another zero_rounding_mode should not influence the result:
2865
+ if (i != 0 || zero_rounding_mode == ZERO_ROUND_UNNECESSARY)
2866
+ ALL_ZERO_MODES.each do |zm|
1653
2867
  assert_equal(i_rounded, i.round_to_allowed_remainders(remainders, modulus, rounding_mode, zm), "i=#{i} i_r=#{i_rounded} m=#{modulus} zm=#{zm} r=#{r}")
1654
2868
  end
1655
2869
  end
1656
- assert_equal(0, (i_rounded - r) % modulus)
2870
+
2871
+ # make sure that the result is congruent r modulo the modulus and within less than modulus away from i:
2872
+ assert(! (i_rounded.nil?), text)
2873
+ assert_equal(0, (i_rounded - r) % modulus, text)
1657
2874
  assert(i - modulus < i_rounded)
1658
2875
  assert(i_rounded < i + modulus)
1659
2876
  i_rounded
@@ -1663,94 +2880,148 @@ class TestLongDecimal_class < Test::Unit::TestCase # RUNIT::TestCase
1663
2880
  # test rounding of int to remainder set
1664
2881
  #
1665
2882
  def test_int_round_to_allowed_remainders
1666
- print "\ntest_int_round_to_allowed_remainders [#{Time.now}] (45 min): "
2883
+ print "\ntest_int_round_to_allowed_remainders [#{Time.now}] (15 sec): "
1667
2884
  $stdout.flush
1668
2885
  # 2.upto 8 do |modulus|
1669
2886
  2.upto 7 do |modulus|
1670
2887
  xx = (1<< modulus) - 1
1671
2888
  xx.times do |x|
1672
2889
  remainders = make_set(x + 1, modulus)
2890
+ min_remainder = remainders.min
2891
+ max_remainder = remainders.max
2892
+ max_neg_remainder = max_remainder - modulus
2893
+ closest_remainder_prefer_plus = nil
2894
+ closest_remainder_prefer_minus = nil
2895
+ minus_remainder = if (min_remainder == 0)
2896
+ min_remainder
2897
+ else
2898
+ max_neg_remainder
2899
+ end
2900
+ if (-max_neg_remainder > min_remainder)
2901
+ closest_remainder_prefer_minus = min_remainder
2902
+ closest_remainder_prefer_plus = min_remainder
2903
+ elsif (-max_neg_remainder < min_remainder)
2904
+ closest_remainder_prefer_minus = max_neg_remainder
2905
+ closest_remainder_prefer_plus = max_neg_remainder
2906
+ else
2907
+ closest_remainder_prefer_minus = max_neg_remainder
2908
+ closest_remainder_prefer_plus = min_remainder
2909
+ end
2910
+
1673
2911
  text0 = "m=#{modulus} x=#{x} s=#{remainders.inspect}"
1674
- # puts text0
1675
- print ":"
2912
+ print "."
1676
2913
  $stdout.flush
1677
2914
  n = 3*modulus
1678
2915
  (-n).upto n do |i|
1679
2916
  text = "i=#{i} n=#{n} " + text0
1680
- i_rounded, set, above, below = check_round_to_remainders(i, remainders, modulus, LongDecimalRoundingMode::ROUND_UP, LongDecimalRoundingMode::ZERO_ROUND_TO_PLUS)
2917
+ i_rounded, set, above, below = check_round_to_remainders(i, remainders, modulus, ROUND_UP, ZERO_ROUND_TO_PLUS)
2918
+ assert(above.empty?)
2919
+ assert(below.empty?)
1681
2920
  assert(i_rounded.abs >= i.abs, "i_r=#{i_rounded} " + text)
1682
2921
  if (i == 0) then
1683
2922
  assert(i_rounded >= 0, "i_r=#{i_rounded} " + text)
1684
- assert_equal(above.length, 0, "i_r=#{i_rounded} " + text)
2923
+ assert_equal(min_remainder, i_rounded)
2924
+ # assert_equal(above.length, 0, "i_r=#{i_rounded} " + text)
1685
2925
  elsif (i > 0) then
1686
2926
  # rounded away from 0, so for positive i to value >= i
1687
- assert_equal(above.length, 0, text)
2927
+ # assert_equal(above.length, 0, text)
1688
2928
  assert(i_rounded >= i, "i_r=#{i_rounded} " + text)
2929
+ assert(i_rounded >= min_remainder)
1689
2930
  else
1690
2931
  # i < 0
1691
- # rounded away from 0, so for positive i to value <= i
2932
+ # rounded away from 0, so for negative i to value <= i
1692
2933
  assert_equal(below.length, 0, text)
1693
2934
  assert(i_rounded <= i, "i_r=#{i_rounded} " + text)
2935
+ assert(i_rounded <= max_neg_remainder)
1694
2936
  end
1695
2937
 
1696
- i_rounded, set, above, below = check_round_to_remainders(i, remainders, modulus, LongDecimalRoundingMode::ROUND_DOWN, LongDecimalRoundingMode::ZERO_ROUND_TO_PLUS)
2938
+ i_rounded, set, above, below = check_round_to_remainders(i, remainders, modulus, ROUND_DOWN, ZERO_ROUND_TO_PLUS)
2939
+ assert(above.empty?)
2940
+ assert(below.empty?)
1697
2941
  if (i > 0)
1698
2942
  assert(i_rounded <= i, "i_r=#{i_rounded} " + text)
1699
- assert_equal(below.length, 0, "i_r=#{i_rounded} " + text)
2943
+ assert(i_rounded >= max_neg_remainder, "i_r=#{i_rounded} " + text)
2944
+ # assert_equal(below.length, 0, "i_r=#{i_rounded} " + text)
1700
2945
  elsif (i < 0)
1701
2946
  assert(i_rounded >= i, "i_r=#{i_rounded} " + text)
1702
- assert_equal(above.length, 0, "i_r=#{i_rounded} " + text)
2947
+ assert(i_rounded <= min_remainder, "i_r=#{i_rounded} " + text)
2948
+ # assert_equal(above.length, 0, "i_r=#{i_rounded} " + text)
1703
2949
  elsif (i == 0) then
1704
2950
  assert(i_rounded >= 0, "i_r=#{i_rounded} " + text)
1705
- assert_equal(above.length, 0, "i_r=#{i_rounded} " + text)
2951
+ assert_equal(min_remainder, i_rounded, "i_r=#{i_rounded} " + text)
2952
+ # assert_equal(above.length, 0, "i_r=#{i_rounded} " + text)
1706
2953
  else
1707
2954
  raise("i=#{i} i_r=#{i_rounded}")
1708
2955
  end
1709
2956
 
1710
- i_rounded, set, above, below = check_round_to_remainders(i, remainders, modulus, LongDecimalRoundingMode::ROUND_CEILING, LongDecimalRoundingMode::ZERO_ROUND_TO_PLUS)
2957
+ i_rounded, set, above, below = check_round_to_remainders(i, remainders, modulus, ROUND_CEILING, ZERO_ROUND_TO_PLUS)
2958
+ assert(above.empty?)
2959
+ assert(below.empty?)
1711
2960
  assert(i_rounded >= i, "i_r=#{i_rounded} " + text)
1712
- assert_equal(above.length, 0, "i_r=#{i_rounded} " + text)
2961
+ # assert_equal(above.length, 0, "i_r=#{i_rounded} " + text)
1713
2962
 
1714
- i_rounded, set, above, below = check_round_to_remainders(i, remainders, modulus, LongDecimalRoundingMode::ROUND_FLOOR, LongDecimalRoundingMode::ZERO_ROUND_TO_PLUS)
2963
+ i_rounded, set, above, below = check_round_to_remainders(i, remainders, modulus, ROUND_FLOOR, ZERO_ROUND_TO_PLUS)
2964
+ assert(above.empty?)
2965
+ assert(below.empty?)
1715
2966
  assert(i_rounded <= i, "i_r=#{i_rounded} " + text)
1716
- assert_equal(below.length, 0, "i_r=#{i_rounded} " + text)
2967
+ # assert_equal(below.length, 0, "i_r=#{i_rounded} " + text)
1717
2968
 
1718
- i_rounded, set, above, below = check_round_to_remainders(i, remainders, modulus, LongDecimalRoundingMode::ROUND_HALF_UP, LongDecimalRoundingMode::ZERO_ROUND_TO_PLUS)
2969
+ i_rounded, set, above, below = check_round_to_remainders(i, remainders, modulus, ROUND_HALF_UP, ZERO_ROUND_TO_PLUS)
2970
+ assert(above.empty?)
2971
+ assert(below.empty?)
1719
2972
  dd = 2*(i_rounded - i).abs
1720
2973
  assert(dd <= modulus, "i_r=#{i_rounded} " + text)
1721
2974
  if (i_rounded.abs < i.abs || i_rounded.sgn == - i.sgn)
1722
2975
  assert(dd < modulus, "i_r=#{i_rounded} " + text)
1723
2976
  end
1724
- assert_equal(below.length, 0, "i_r=#{i_rounded} " + text)
1725
- assert_equal(above.length, 0, "i_r=#{i_rounded} " + text)
1726
2977
 
1727
- i_rounded, set, above, below = check_round_to_remainders(i, remainders, modulus, LongDecimalRoundingMode::ROUND_HALF_DOWN, LongDecimalRoundingMode::ZERO_ROUND_TO_PLUS)
2978
+ i_rounded, set, above, below = check_round_to_remainders(i, remainders, modulus, ROUND_HALF_DOWN, ZERO_ROUND_TO_PLUS)
2979
+ assert(above.empty?)
2980
+ assert(below.empty?)
1728
2981
  dd = 2*(i_rounded - i).abs
1729
2982
  assert(dd <= modulus, "i_r=#{i_rounded} " + text)
1730
2983
  if (i_rounded.abs > i.abs && i_rounded.sgn == i.sgn)
1731
2984
  assert(dd < modulus, "i_r=#{i_rounded} " + text)
1732
2985
  end
1733
- assert_equal(below.length, 0, "i_r=#{i_rounded} " + text)
1734
- assert_equal(above.length, 0, "i_r=#{i_rounded} " + text)
1735
2986
 
1736
- i_rounded, set, above, below = check_round_to_remainders(i, remainders, modulus, LongDecimalRoundingMode::ROUND_HALF_CEILING, LongDecimalRoundingMode::ZERO_ROUND_TO_PLUS)
2987
+ i_rounded, set, above, below = check_round_to_remainders(i, remainders, modulus, ROUND_HALF_CEILING, ZERO_ROUND_TO_PLUS)
2988
+ assert(above.empty?)
2989
+ assert(below.empty?)
1737
2990
  dd = 2*(i_rounded - i).abs
1738
2991
  assert(dd <= modulus, "i_r=#{i_rounded} " + text)
1739
2992
  if (i_rounded < i)
1740
2993
  assert(dd < modulus, "i_r=#{i_rounded} " + text)
1741
2994
  end
1742
- assert_equal(below.length, 0, "i_r=#{i_rounded} " + text)
1743
- assert_equal(above.length, 0, "i_r=#{i_rounded} " + text)
1744
2995
 
1745
- i_rounded, set, above, below = check_round_to_remainders(i, remainders, modulus, LongDecimalRoundingMode::ROUND_HALF_FLOOR, LongDecimalRoundingMode::ZERO_ROUND_TO_PLUS)
2996
+ i_rounded, set, above, below = check_round_to_remainders(i, remainders, modulus, ROUND_HALF_FLOOR, ZERO_ROUND_TO_PLUS)
2997
+ assert(above.empty?)
2998
+ assert(below.empty?)
1746
2999
  dd = 2*(i_rounded - i).abs
1747
3000
  assert(dd <= modulus, "i_r=#{i_rounded} " + text)
1748
3001
  if (i_rounded > i && i != 0)
1749
3002
  assert(dd < modulus, "i_r=#{i_rounded} " + text)
1750
3003
  end
1751
- assert_equal(below.length, 0, "i_r=#{i_rounded} " + text)
1752
- assert_equal(above.length, 0, "i_r=#{i_rounded} " + text)
1753
3004
 
3005
+ ALL_ROUNDING_MODES.each do |rounding_mode|
3006
+ unless (rounding_mode.major == MAJOR_GEOMETRIC \
3007
+ || rounding_mode.major == MAJOR_HARMONIC \
3008
+ || rounding_mode.major == MAJOR_QUADRATIC \
3009
+ || rounding_mode.major == MAJOR_CUBIC)
3010
+ next;
3011
+ end
3012
+ if (rounding_mode.minor == MINOR_EVEN || rounding_mode.minor == MINOR_ODD)
3013
+ next
3014
+ end
3015
+ i_rounded, set, above, below = check_round_to_remainders(i, remainders, modulus, rounding_mode, ZERO_ROUND_TO_PLUS)
3016
+ if (rounding_mode.major != MAJOR_CUBIC)
3017
+ if (i < 0)
3018
+ assert(i_rounded <= 0, "i_r=#{i_rounded} " + text)
3019
+ end
3020
+ if (i > 0)
3021
+ assert(i_rounded >= 0, "i_r=#{i_rounded} " + text)
3022
+ end
3023
+ end
3024
+ end
1754
3025
  end
1755
3026
  end
1756
3027
  end
@@ -1760,134 +3031,271 @@ class TestLongDecimal_class < Test::Unit::TestCase # RUNIT::TestCase
1760
3031
  # test rounding of 0 to remainder set
1761
3032
  #
1762
3033
  def test_zero_round_to_allowed_remainders
1763
- print "\ntest_zero_round_to_allowed_remainders [#{Time.now}] (long): "
3034
+ print "\ntest_zero_round_to_allowed_remainders [#{Time.now}]: "
1764
3035
  $stdout.flush
1765
3036
 
1766
3037
  2.upto 7 do |modulus|
1767
3038
  xx = (1<< modulus) - 1
1768
3039
  xx.times do |x|
1769
3040
  remainders = make_set(x + 1, modulus)
3041
+
3042
+ min_remainder = remainders.min
3043
+ max_remainder = remainders.max
3044
+ max_neg_remainder = max_remainder - modulus
3045
+ closest_remainder_prefer_plus = nil
3046
+ closest_remainder_prefer_minus = nil
3047
+ minus_remainder = if (min_remainder == 0)
3048
+ min_remainder
3049
+ else
3050
+ max_neg_remainder
3051
+ end
3052
+ if (-max_neg_remainder > min_remainder)
3053
+ closest_remainder_prefer_minus = min_remainder
3054
+ closest_remainder_prefer_plus = min_remainder
3055
+ elsif (-max_neg_remainder < min_remainder)
3056
+ closest_remainder_prefer_minus = max_neg_remainder
3057
+ closest_remainder_prefer_plus = max_neg_remainder
3058
+ else
3059
+ closest_remainder_prefer_minus = max_neg_remainder
3060
+ closest_remainder_prefer_plus = min_remainder
3061
+ end
3062
+
1770
3063
  text = "m=#{modulus} x=#{x} s=#{remainders.inspect}"
1771
- # puts text
1772
3064
  print "."
1773
3065
  $stdout.flush
1774
3066
 
1775
3067
  # ROUND_UP and ROUND_DOWN have the same effect for 0
1776
- zero_r1, set1, above1, below1 = check_round_to_remainders(0, remainders, modulus, LongDecimalRoundingMode::ROUND_UP, LongDecimalRoundingMode::ZERO_ROUND_TO_PLUS)
1777
- zero_r2, set2, above2, below2 = check_round_to_remainders(0, remainders, modulus, LongDecimalRoundingMode::ROUND_DOWN, LongDecimalRoundingMode::ZERO_ROUND_TO_PLUS)
3068
+ zero_r1, set1, above1, below1 = check_round_to_remainders(0, remainders, modulus, ROUND_UP, ZERO_ROUND_TO_PLUS)
3069
+ zero_r2, set2, above2, below2 = check_round_to_remainders(0, remainders, modulus, ROUND_DOWN, ZERO_ROUND_TO_PLUS)
3070
+ assert(above1.empty?)
3071
+ assert(below1.empty?)
3072
+ assert(above2.empty?)
3073
+ assert(below2.empty?)
1778
3074
  assert_equal(zero_r1, zero_r2, text)
1779
- assert_equal(above1, above2, text)
1780
- assert_equal(below1, below2, text)
1781
3075
  assert(zero_r1 >= 0, "0_r=#{zero_r1} " + text)
1782
- assert_equal(above1.length, 0, text)
1783
-
1784
- zero_r1, set1, above1, below1 = check_round_to_remainders(0, remainders, modulus, LongDecimalRoundingMode::ROUND_UP, LongDecimalRoundingMode::ZERO_ROUND_TO_MINUS)
1785
- zero_r2, set2, above2, below2 = check_round_to_remainders(0, remainders, modulus, LongDecimalRoundingMode::ROUND_DOWN, LongDecimalRoundingMode::ZERO_ROUND_TO_MINUS)
3076
+ assert_equal(min_remainder, zero_r1, "0_r=#{zero_r1} " + text)
3077
+
3078
+ zero_r1, set1, above1, below1 = check_round_to_remainders(0, remainders, modulus, ROUND_UP, ZERO_ROUND_TO_MINUS)
3079
+ zero_r2, set2, above2, below2 = check_round_to_remainders(0, remainders, modulus, ROUND_DOWN, ZERO_ROUND_TO_MINUS)
3080
+ assert(above1.empty?)
3081
+ assert(below1.empty?)
3082
+ assert(above2.empty?)
3083
+ assert(below2.empty?)
1786
3084
  assert_equal(zero_r1, zero_r2, text)
1787
- assert_equal(above1, above2, text)
1788
- assert_equal(below1, below2, text)
1789
3085
  assert(zero_r1 <= 0, "0_r=#{zero_r1} " + text)
1790
- assert_equal(below1.length, 0, text)
1791
-
1792
- zero_r1, set1, above1, below1 = check_round_to_remainders(0, remainders, modulus, LongDecimalRoundingMode::ROUND_UP, LongDecimalRoundingMode::ZERO_ROUND_TO_CLOSEST_PREFER_PLUS)
1793
- zero_r2, set2, above2, below2 = check_round_to_remainders(0, remainders, modulus, LongDecimalRoundingMode::ROUND_DOWN, LongDecimalRoundingMode::ZERO_ROUND_TO_CLOSEST_PREFER_PLUS)
3086
+ assert_equal(minus_remainder, zero_r1, "0_r=#{zero_r1} " + text)
3087
+
3088
+ zero_r1, set1, above1, below1 = check_round_to_remainders(0, remainders, modulus, ROUND_UP, ZERO_ROUND_TO_CLOSEST_PREFER_PLUS)
3089
+ zero_r2, set2, above2, below2 = check_round_to_remainders(0, remainders, modulus, ROUND_DOWN, ZERO_ROUND_TO_CLOSEST_PREFER_PLUS)
3090
+ assert(above1.empty?)
3091
+ assert(below1.empty?)
3092
+ assert(above2.empty?)
3093
+ assert(below2.empty?)
1794
3094
  assert_equal(zero_r1, zero_r2, text)
1795
- assert_equal(above1, above2, text)
1796
- assert_equal(below1, below2, text)
3095
+ assert_equal(closest_remainder_prefer_plus, zero_r1, text)
1797
3096
  dd = 2*zero_r1.abs
1798
3097
  assert(dd <= modulus, "0_r=#{zero_r1} dd=#{dd} " + text)
1799
3098
  if (zero_r1 < 0)
1800
3099
  assert(dd < modulus, "0_r=#{zero_r1} dd=#{dd} " + text)
1801
3100
  end
1802
- if (below1.length > 0)
1803
- assert(below1.max.abs >= zero_r1.abs, text)
1804
- end
1805
- if (above1.length > 0)
1806
- assert(above1.min.abs >= zero_r1.abs, text)
1807
- end
1808
-
1809
- zero_r1, set1, above1, below1 = check_round_to_remainders(0, remainders, modulus, LongDecimalRoundingMode::ROUND_UP, LongDecimalRoundingMode::ZERO_ROUND_TO_CLOSEST_PREFER_MINUS)
1810
- zero_r2, set2, above2, below2 = check_round_to_remainders(0, remainders, modulus, LongDecimalRoundingMode::ROUND_DOWN, LongDecimalRoundingMode::ZERO_ROUND_TO_CLOSEST_PREFER_MINUS)
3101
+ #if (below1.length > 0)
3102
+ # assert(below1.max.abs >= zero_r1.abs, text)
3103
+ #end
3104
+ #if (above1.length > 0)
3105
+ # assert(above1.min.abs >= zero_r1.abs, text)
3106
+ #end
3107
+
3108
+ zero_r1, set1, above1, below1 = check_round_to_remainders(0, remainders, modulus, ROUND_UP, ZERO_ROUND_TO_CLOSEST_PREFER_MINUS)
3109
+ zero_r2, set2, above2, below2 = check_round_to_remainders(0, remainders, modulus, ROUND_DOWN, ZERO_ROUND_TO_CLOSEST_PREFER_MINUS)
3110
+ assert(above1.empty?)
3111
+ assert(below1.empty?)
3112
+ assert(above2.empty?)
3113
+ assert(below2.empty?)
1811
3114
  assert_equal(zero_r1, zero_r2, text)
1812
- assert_equal(above1, above2, text)
1813
- assert_equal(below1, below2, text)
3115
+ assert_equal(closest_remainder_prefer_minus, zero_r1, text)
3116
+ # assert_equal(above1, above2, text)
3117
+ # assert_equal(below1, below2, text)
1814
3118
  dd = 2*zero_r1.abs
1815
3119
  assert(dd <= modulus, "0_r=#{zero_r1} dd=#{dd} " + text)
1816
3120
  if (zero_r1 > 0)
1817
3121
  assert(dd < modulus, "0_r=#{zero_r1} dd=#{dd} " + text)
1818
3122
  end
1819
- if (below1.length > 0)
1820
- assert(below1.max.abs >= zero_r1.abs, text)
1821
- end
1822
- assert_equal(above1.length, 0, text)
1823
-
1824
- zero_r0, set0, above0, below0 = check_round_to_remainders(0, remainders, modulus, LongDecimalRoundingMode::ROUND_CEILING, LongDecimalRoundingMode::ZERO_ROUND_UNNECESSARY)
1825
- assert(zero_r0 >= 0, "0_r=#{zero_r0} " + text)
1826
- assert_equal(above0.length, 0, text)
1827
-
1828
- zero_r0, set0, above0, below0 = check_round_to_remainders(0, remainders, modulus, LongDecimalRoundingMode::ROUND_FLOOR, LongDecimalRoundingMode::ZERO_ROUND_UNNECESSARY)
1829
- assert(zero_r0 <= 0, "0_r=#{zero_r0} " + text)
1830
- assert_equal(below0.length, 0, text)
1831
-
1832
- zero_r1, set1, above1, below1 = check_round_to_remainders(0, remainders, modulus, LongDecimalRoundingMode::ROUND_HALF_UP, LongDecimalRoundingMode::ZERO_ROUND_TO_PLUS)
1833
- zero_r2, set2, above2, below2 = check_round_to_remainders(0, remainders, modulus, LongDecimalRoundingMode::ROUND_HALF_DOWN, LongDecimalRoundingMode::ZERO_ROUND_TO_PLUS)
3123
+ #if (below1.length > 0)
3124
+ # assert(below1.max.abs >= zero_r1.abs, text)
3125
+ #end
3126
+ #assert_equal(above1.length, 0, text)
3127
+
3128
+ zero_rounded, set0, above0, below0 = check_round_to_remainders(0, remainders, modulus, ROUND_CEILING, ZERO_ROUND_UNNECESSARY)
3129
+ assert(above0.empty?)
3130
+ assert(below0.empty?)
3131
+ assert(zero_rounded >= 0, "0_r=#{zero_rounded} " + text)
3132
+ assert_equal(min_remainder, zero_rounded, text)
3133
+ # assert_equal(above0.length, 0, text)
3134
+
3135
+ zero_rounded, set0, above0, below0 = check_round_to_remainders(0, remainders, modulus, ROUND_FLOOR, ZERO_ROUND_UNNECESSARY)
3136
+ assert(above0.empty?)
3137
+ assert(below0.empty?)
3138
+ assert(zero_rounded <= 0, "0_r=#{zero_rounded} " + text)
3139
+ assert_equal(minus_remainder, zero_rounded, text)
3140
+ # assert_equal(below0.length, 0, text)
3141
+
3142
+ zero_r1, set1, above1, below1 = check_round_to_remainders(0, remainders, modulus, ROUND_HALF_UP, ZERO_ROUND_TO_PLUS)
3143
+ zero_r2, set2, above2, below2 = check_round_to_remainders(0, remainders, modulus, ROUND_HALF_DOWN, ZERO_ROUND_TO_PLUS)
3144
+ assert(above1.empty?)
3145
+ assert(below1.empty?)
3146
+ assert(above2.empty?)
3147
+ assert(below2.empty?)
1834
3148
  assert_equal(zero_r1, zero_r2, text)
1835
- assert_equal(above1, above2, text)
1836
- assert_equal(below1, below2, text)
1837
- zero_r2, set2, above2, below2 = check_round_to_remainders(0, remainders, modulus, LongDecimalRoundingMode::ROUND_HALF_UP, LongDecimalRoundingMode::ZERO_ROUND_TO_CLOSEST_PREFER_PLUS)
3149
+ if (zero_r1 < 0)
3150
+ assert_equal(max_neg_remainder, zero_r1)
3151
+ else
3152
+ assert_equal(min_remainder, zero_r1)
3153
+ end
3154
+ # assert_equal(above1, above2, text)
3155
+ # assert_equal(below1, below2, text)
3156
+ zero_r2, set2, above2, below2 = check_round_to_remainders(0, remainders, modulus, ROUND_HALF_UP, ZERO_ROUND_TO_CLOSEST_PREFER_PLUS)
3157
+ assert(above1.empty?)
3158
+ assert(below1.empty?)
3159
+ assert(above2.empty?)
3160
+ assert(below2.empty?)
1838
3161
  assert_equal(zero_r1, zero_r2, text)
1839
- assert_equal(above1, above2, text)
1840
- assert_equal(below1, below2, text)
1841
- zero_r2, set2, above2, below2 = check_round_to_remainders(0, remainders, modulus, LongDecimalRoundingMode::ROUND_HALF_DOWN, LongDecimalRoundingMode::ZERO_ROUND_TO_CLOSEST_PREFER_PLUS)
3162
+ if (zero_r1 < 0)
3163
+ assert_equal(max_neg_remainder, zero_r1)
3164
+ else
3165
+ assert_equal(min_remainder, zero_r1)
3166
+ end
3167
+ #assert_equal(above1, above2, text)
3168
+ #assert_equal(below1, below2, text)
3169
+ zero_r2, set2, above2, below2 = check_round_to_remainders(0, remainders, modulus, ROUND_HALF_DOWN, ZERO_ROUND_TO_CLOSEST_PREFER_PLUS)
3170
+ assert(above1.empty?)
3171
+ assert(below1.empty?)
3172
+ assert(above2.empty?)
3173
+ assert(below2.empty?)
1842
3174
  assert_equal(zero_r1, zero_r2, text)
1843
- assert_equal(above1, above2, text)
1844
- assert_equal(below1, below2, text)
3175
+ # assert_equal(above1, above2, text)
3176
+ # assert_equal(below1, below2, text)
1845
3177
  dd = 2*zero_r1.abs
1846
3178
  assert(dd <= modulus, "0_r=#{zero_r1} dd=#{dd} " + text)
1847
3179
  if (zero_r1 < 0)
1848
3180
  assert(dd < modulus, "0_r=#{zero_r1} dd=#{dd} " + text)
3181
+ assert_equal(max_neg_remainder, zero_r1)
3182
+ else
3183
+ assert_equal(min_remainder, zero_r1)
1849
3184
  end
1850
- assert_equal(below1.length, 0, text)
1851
- assert_equal(above1.length, 0, text)
1852
-
1853
- zero_r1, set1, above1, below1 = check_round_to_remainders(0, remainders, modulus, LongDecimalRoundingMode::ROUND_HALF_UP, LongDecimalRoundingMode::ZERO_ROUND_TO_MINUS)
1854
- zero_r2, set2, above2, below2 = check_round_to_remainders(0, remainders, modulus, LongDecimalRoundingMode::ROUND_HALF_DOWN, LongDecimalRoundingMode::ZERO_ROUND_TO_MINUS)
3185
+ # assert_equal(below1.length, 0, text)
3186
+ # assert_equal(above1.length, 0, text)
3187
+
3188
+ zero_r1, set1, above1, below1 = check_round_to_remainders(0, remainders, modulus, ROUND_HALF_UP, ZERO_ROUND_TO_MINUS)
3189
+ zero_r2, set2, above2, below2 = check_round_to_remainders(0, remainders, modulus, ROUND_HALF_DOWN, ZERO_ROUND_TO_MINUS)
3190
+ assert(above1.empty?)
3191
+ assert(below1.empty?)
3192
+ assert(above2.empty?)
3193
+ assert(below2.empty?)
1855
3194
  assert_equal(zero_r1, zero_r2, text)
1856
- assert_equal(above1, above2, text)
1857
- assert_equal(below1, below2, text)
1858
- zero_r2, set2, above2, below2 = check_round_to_remainders(0, remainders, modulus, LongDecimalRoundingMode::ROUND_HALF_UP, LongDecimalRoundingMode::ZERO_ROUND_TO_CLOSEST_PREFER_MINUS)
3195
+ if (zero_r1 < 0)
3196
+ assert_equal(max_neg_remainder, zero_r1)
3197
+ else
3198
+ assert_equal(min_remainder, zero_r1)
3199
+ end
3200
+ # assert_equal(above1, above2, text)
3201
+ # assert_equal(below1, below2, text)
3202
+ zero_r2, set2, above2, below2 = check_round_to_remainders(0, remainders, modulus, ROUND_HALF_UP, ZERO_ROUND_TO_CLOSEST_PREFER_MINUS)
3203
+ assert(above1.empty?)
3204
+ assert(below1.empty?)
3205
+ assert(above2.empty?)
3206
+ assert(below2.empty?)
1859
3207
  assert_equal(zero_r1, zero_r2, text)
1860
- assert_equal(above1, above2, text)
1861
- assert_equal(below1, below2, text)
1862
- zero_r2, set2, above2, below2 = check_round_to_remainders(0, remainders, modulus, LongDecimalRoundingMode::ROUND_HALF_DOWN, LongDecimalRoundingMode::ZERO_ROUND_TO_CLOSEST_PREFER_MINUS)
3208
+ # assert_equal(above1, above2, text)
3209
+ # assert_equal(below1, below2, text)
3210
+ zero_r2, set2, above2, below2 = check_round_to_remainders(0, remainders, modulus, ROUND_HALF_DOWN, ZERO_ROUND_TO_CLOSEST_PREFER_MINUS)
3211
+ assert(above1.empty?)
3212
+ assert(below1.empty?)
3213
+ assert(above2.empty?)
3214
+ assert(below2.empty?)
1863
3215
  assert_equal(zero_r1, zero_r2, text)
1864
- assert_equal(above1, above2, text)
1865
- assert_equal(below1, below2, text)
3216
+ # assert_equal(above1, above2, text)
3217
+ # assert_equal(below1, below2, text)
1866
3218
  dd = 2*zero_r1.abs
1867
3219
  assert(dd <= modulus, "0_r=#{zero_r1} dd=#{dd} " + text)
1868
3220
  if (zero_r1 > 0)
1869
3221
  assert(dd < modulus, "0_r=#{zero_r1} dd=#{dd} " + text)
3222
+ assert_equal(min_remainder, zero_r1)
3223
+ else
3224
+ assert_equal(minus_remainder, zero_r1)
1870
3225
  end
1871
- assert_equal(below1.length, 0, text)
1872
- assert_equal(above1.length, 0, text)
1873
-
1874
- zero_r0, set0, above0, below0 = check_round_to_remainders(0, remainders, modulus, LongDecimalRoundingMode::ROUND_HALF_CEILING, LongDecimalRoundingMode::ZERO_ROUND_UNNECESSARY)
1875
- dd = 2*zero_r0.abs
1876
- assert(dd <= modulus, "0_r=#{zero_r0} dd=#{dd} " + text)
1877
- if (zero_r0 < 0)
1878
- assert(dd < modulus, "0_r=#{zero_r0} dd=#{dd} " + text)
3226
+ # assert_equal(below1.length, 0, text)
3227
+ # assert_equal(above1.length, 0, text)
3228
+
3229
+ zero_rounded, set0, above0, below0 = check_round_to_remainders(0, remainders, modulus, ROUND_HALF_CEILING, ZERO_ROUND_UNNECESSARY)
3230
+ assert(above0.empty?)
3231
+ assert(below0.empty?)
3232
+ dd = 2*zero_rounded.abs
3233
+ assert(dd <= modulus, "0_r=#{zero_rounded} dd=#{dd} " + text)
3234
+ if (zero_rounded < 0)
3235
+ assert_equal(max_neg_remainder, zero_rounded)
3236
+ assert(dd < modulus, "0_r=#{zero_rounded} dd=#{dd} " + text)
3237
+ else
3238
+ assert_equal(min_remainder, zero_rounded)
1879
3239
  end
1880
- assert_equal(below0.length, 0, text)
1881
- assert_equal(above0.length, 0, text)
1882
-
1883
- zero_r0, set0, above0, below0 = check_round_to_remainders(0, remainders, modulus, LongDecimalRoundingMode::ROUND_HALF_FLOOR, LongDecimalRoundingMode::ZERO_ROUND_UNNECESSARY)
1884
- dd = 2*zero_r0.abs
1885
- assert(dd <= modulus, "0_r=#{zero_r0} " + text)
1886
- if (zero_r0 > 0)
1887
- assert(dd < modulus, "0_r=#{zero_r0} " + text)
3240
+ # assert_equal(below0.length, 0, text)
3241
+ # assert_equal(above0.length, 0, text)
3242
+
3243
+ zero_rounded, set0, above0, below0 = check_round_to_remainders(0, remainders, modulus, ROUND_HALF_FLOOR, ZERO_ROUND_UNNECESSARY)
3244
+ assert(above0.empty?)
3245
+ assert(below0.empty?)
3246
+ dd = 2*zero_rounded.abs
3247
+ assert(dd <= modulus, "0_r=#{zero_rounded} " + text)
3248
+ if (zero_rounded > 0)
3249
+ assert_equal(min_remainder, zero_r1)
3250
+ assert(dd < modulus, "0_r=#{zero_rounded} " + text)
3251
+ else
3252
+ assert_equal(minus_remainder, zero_r1)
3253
+ end
3254
+ # assert_equal(below0.length, 0, text)
3255
+ # assert_equal(above0.length, 0, text)
3256
+
3257
+ ALL_ROUNDING_MODES.each do |rounding_mode|
3258
+ unless (rounding_mode.major == MAJOR_GEOMETRIC \
3259
+ || rounding_mode.major == MAJOR_HARMONIC \
3260
+ || rounding_mode.major == MAJOR_QUADRATIC \
3261
+ || rounding_mode.major == MAJOR_CUBIC)
3262
+ next;
3263
+ end
3264
+ if (rounding_mode.minor == MINOR_EVEN || rounding_mode.minor == MINOR_ODD)
3265
+ next
3266
+ end
3267
+
3268
+ if (rounding_mode == ROUND_CUBIC_CEILING)
3269
+ i_rounded, set, above, below = check_round_to_remainders(0, remainders, modulus, rounding_mode, ZERO_ROUND_UNNECESSARY)
3270
+ if (min_remainder+max_neg_remainder > 0)
3271
+ assert_equal(minus_remainder, i_rounded, text+" i_rounded=#{i_rounded} rounding_mode=#{rounding_mode}")
3272
+ else
3273
+ assert_equal(min_remainder, i_rounded, text+" i_rounded=#{i_rounded} rounding_mode=#{rounding_mode}")
3274
+ end
3275
+ elsif (rounding_mode == ROUND_CUBIC_FLOOR)
3276
+ i_rounded, set, above, below = check_round_to_remainders(0, remainders, modulus, rounding_mode, ZERO_ROUND_UNNECESSARY)
3277
+ if (min_remainder+max_neg_remainder < 0)
3278
+ assert_equal(min_remainder, i_rounded, text+" i_rounded=#{i_rounded} rounding_mode=#{rounding_mode}")
3279
+ else
3280
+ assert_equal(minus_remainder, i_rounded, text+" i_rounded=#{i_rounded} rounding_mode=#{rounding_mode}")
3281
+ end
3282
+ elsif ((rounding_mode == ROUND_CUBIC_DOWN || rounding_mode == ROUND_CUBIC_UP) && min_remainder+max_neg_remainder != 0)
3283
+ assert_equal(closest_remainder_prefer_minus, closest_remainder_prefer_plus)
3284
+ i_rounded = 0.round_to_allowed_remainders(remainders, modulus, rounding_mode, ZERO_ROUND_UNNECESSARY)
3285
+ assert_equal(closest_remainder_prefer_plus, i_rounded, text+" i_rounded=#{i_rounded} rounding_mode=#{rounding_mode}")
3286
+ i_rounded, set, above, below = check_round_to_remainders(0, remainders, modulus, rounding_mode, ZERO_ROUND_UNNECESSARY)
3287
+ assert_equal(closest_remainder_prefer_plus, i_rounded, text+" i_rounded=#{i_rounded} rounding_mode=#{rounding_mode}")
3288
+ else
3289
+ i_rounded, set, above, below = check_round_to_remainders(0, remainders, modulus, rounding_mode, ZERO_ROUND_TO_PLUS)
3290
+ assert_equal(min_remainder, i_rounded, text+" i_rounded=#{i_rounded} rounding_mode=#{rounding_mode}")
3291
+ i_rounded, set, above, below = check_round_to_remainders(0, remainders, modulus, rounding_mode, ZERO_ROUND_TO_MINUS)
3292
+ assert_equal(minus_remainder, i_rounded, text+" i_rounded=#{i_rounded} rounding_mode=#{rounding_mode}")
3293
+ i_rounded, set, above, below = check_round_to_remainders(0, remainders, modulus, rounding_mode, ZERO_ROUND_TO_CLOSEST_PREFER_PLUS)
3294
+ assert_equal(closest_remainder_prefer_plus, i_rounded, text+" i_rounded=#{i_rounded} rounding_mode=#{rounding_mode}")
3295
+ i_rounded, set, above, below = check_round_to_remainders(0, remainders, modulus, rounding_mode, ZERO_ROUND_TO_CLOSEST_PREFER_MINUS)
3296
+ assert_equal(closest_remainder_prefer_minus, i_rounded, text+" i_rounded=#{i_rounded} rounding_mode=#{rounding_mode}")
3297
+ end
1888
3298
  end
1889
- assert_equal(below0.length, 0, text)
1890
- assert_equal(above0.length, 0, text)
1891
3299
 
1892
3300
  end
1893
3301
  end
@@ -1907,27 +3315,36 @@ class TestLongDecimal_class < Test::Unit::TestCase # RUNIT::TestCase
1907
3315
 
1908
3316
  def check_round_to_remainders(i, remainders, modulus, rounding_mode, zero_rounding_mode)
1909
3317
 
1910
- zero_modes = [ LongDecimalRoundingMode::ZERO_ROUND_TO_PLUS,\
1911
- LongDecimalRoundingMode::ZERO_ROUND_TO_MINUS,\
1912
- LongDecimalRoundingMode::ZERO_ROUND_TO_CLOSEST_PREFER_PLUS,\
1913
- LongDecimalRoundingMode::ZERO_ROUND_TO_CLOSEST_PREFER_MINUS,\
1914
- LongDecimalRoundingMode::ZERO_ROUND_UNNECESSARY ];
3318
+ # do the rounding
3319
+ i_rounded = i.round_to_allowed_remainders(remainders.clone, modulus, rounding_mode, zero_rounding_mode)
1915
3320
 
1916
- i_rounded = i.round_to_allowed_remainders(remainders, modulus, rounding_mode, zero_rounding_mode)
1917
- if (i != 0 || zero_rounding_mode == LongDecimalRoundingMode::ZERO_ROUND_UNNECESSARY)
1918
- zero_modes.each do |zm|
1919
- assert_equal(i_rounded, i.round_to_allowed_remainders(remainders, modulus, rounding_mode, zm), "i=#{i} i_r=#{i_rounded} m=#{modulus} zm=#{zm}")
3321
+ # make sure that the zero_rounding_mode does not matter if i is not zero or if ZERO_ROUND_UNNECESSARY is provided
3322
+ if (i != 0 || zero_rounding_mode == ZERO_ROUND_UNNECESSARY)
3323
+ ALL_ZERO_MODES.each do |zm|
3324
+ assert_equal(i_rounded, i.round_to_allowed_remainders(remainders.clone, modulus, rounding_mode, zm), "i=#{i} i_r=#{i_rounded} m=#{modulus} zm=#{zm}")
1920
3325
  end
1921
3326
  end
3327
+
3328
+ # make sure there is exactly one remainder matching
1922
3329
  one_remainder = remainders.select do |r|
1923
3330
  (i_rounded - r) % modulus == 0
1924
3331
  end
1925
- assert_equal(1, one_remainder.length, "i_r=#{i_rounded} i=#{i} m=#{modulus} r=#{remainders} or=#{one_remainder.to_s}")
3332
+ assert_equal(1, one_remainder.length, "i_r=#{i_rounded} i=#{i} m=#{modulus} r=#{remainders} or=#{one_remainder.to_s} rm=#{rounding_mode} zm=#{zero_rounding_mode}")
3333
+
3334
+ # make sure that i_rounded is less than modulus away from i
1926
3335
  assert(i - modulus < i_rounded)
1927
3336
  assert(i_rounded < i + modulus)
3337
+
3338
+ # run the test with each single remainder:
1928
3339
  set = remainders.map do |r|
1929
- check_round_to_one_remainder(i, r, modulus, rounding_mode, zero_rounding_mode)
3340
+ if (zero_rounding_mode == ZERO_ROUND_UNNECESSARY)
3341
+ check_round_to_one_remainder(i, r, modulus, rounding_mode, ZERO_ROUND_TO_CLOSEST_PREFER_PLUS)
3342
+ else
3343
+ check_round_to_one_remainder(i, r, modulus, rounding_mode, zero_rounding_mode)
3344
+ end
1930
3345
  end
3346
+
3347
+ # find members which are closer than i_rounded above and below from the results of rounding to a single remainder
1931
3348
  closer_above = []
1932
3349
  closer_below = []
1933
3350
  found = false
@@ -1941,16 +3358,20 @@ class TestLongDecimal_class < Test::Unit::TestCase # RUNIT::TestCase
1941
3358
  assert(i_rounded < i_r)
1942
3359
  if closer
1943
3360
  closer_above.push(i_r)
3361
+ # raise ArgumentError, "i=#{i} ir=#{i_r} i_rounded=#{i_rounded} remainders=#{remainders.inspect} m=#{modulus} rm=#{rounding_mode} zm=#{zero_rounding_mode} closer_above"
1944
3362
  end
1945
3363
  else
1946
3364
  # i_r < i
1947
3365
  assert(i_r < i_rounded)
1948
3366
  if closer
1949
3367
  closer_below.push(i_r)
3368
+ # raise ArgumentError, "i=#{i} ir=#{i_r} i_rounded=#{i_rounded} remainders=#{remainders.inspect} m=#{modulus} rm=#{rounding_mode} zm=#{zero_rounding_mode} closer_below"
1950
3369
  end
1951
3370
  end
1952
3371
  end
1953
3372
  end
3373
+ # assert(closer_below.empty?)
3374
+ # assert(closer_above.empty?)
1954
3375
  return i_rounded, set, closer_above, closer_below
1955
3376
 
1956
3377
  end # check_round_to_remainders
@@ -1959,6 +3380,228 @@ class TestLongDecimal_class < Test::Unit::TestCase # RUNIT::TestCase
1959
3380
  #
1960
3381
  # ROUND_UNNECESSARY/ROUND_HALF_EVEN
1961
3382
 
3383
+ def test_minor_major_rounding_modes
3384
+ print "\ntest_minor_major_rounding_modes [#{Time.now}]: "
3385
+ $stdout.flush
3386
+ [[ ROUND_CEILING, MAJOR_CEILING, MINOR_UNUSED ],
3387
+ [ ROUND_UNNECESSARY, MAJOR_UNNECESSARY, MINOR_UNUSED ],
3388
+ [ ROUND_UP, MAJOR_UP, MINOR_UNUSED ],
3389
+ [ ROUND_DOWN, MAJOR_DOWN, MINOR_UNUSED ],
3390
+ [ ROUND_FLOOR, MAJOR_FLOOR, MINOR_UNUSED ],
3391
+ [ ROUND_CUBIC_CEILING, MAJOR_CUBIC, MINOR_CEILING ],
3392
+ [ ROUND_CUBIC_DOWN, MAJOR_CUBIC, MINOR_DOWN ],
3393
+ [ ROUND_CUBIC_EVEN, MAJOR_CUBIC, MINOR_EVEN ],
3394
+ [ ROUND_CUBIC_ODD, MAJOR_CUBIC, MINOR_ODD ],
3395
+ [ ROUND_CUBIC_FLOOR, MAJOR_CUBIC, MINOR_FLOOR ],
3396
+ [ ROUND_CUBIC_UP, MAJOR_CUBIC, MINOR_UP ],
3397
+ [ ROUND_GEOMETRIC_CEILING, MAJOR_GEOMETRIC, MINOR_CEILING ],
3398
+ [ ROUND_GEOMETRIC_DOWN, MAJOR_GEOMETRIC, MINOR_DOWN ],
3399
+ [ ROUND_GEOMETRIC_EVEN, MAJOR_GEOMETRIC, MINOR_EVEN ],
3400
+ [ ROUND_GEOMETRIC_ODD, MAJOR_GEOMETRIC, MINOR_ODD ],
3401
+ [ ROUND_GEOMETRIC_FLOOR, MAJOR_GEOMETRIC, MINOR_FLOOR ],
3402
+ [ ROUND_GEOMETRIC_UP, MAJOR_GEOMETRIC, MINOR_UP ],
3403
+ [ ROUND_HALF_CEILING, MAJOR_HALF, MINOR_CEILING ],
3404
+ [ ROUND_HALF_DOWN, MAJOR_HALF, MINOR_DOWN ],
3405
+ [ ROUND_HALF_EVEN, MAJOR_HALF, MINOR_EVEN ],
3406
+ [ ROUND_HALF_ODD, MAJOR_HALF, MINOR_ODD ],
3407
+ [ ROUND_HALF_FLOOR, MAJOR_HALF, MINOR_FLOOR ],
3408
+ [ ROUND_HALF_UP, MAJOR_HALF, MINOR_UP ],
3409
+ [ ROUND_HARMONIC_CEILING, MAJOR_HARMONIC, MINOR_CEILING ],
3410
+ [ ROUND_HARMONIC_DOWN, MAJOR_HARMONIC, MINOR_DOWN ],
3411
+ [ ROUND_HARMONIC_EVEN, MAJOR_HARMONIC, MINOR_EVEN ],
3412
+ [ ROUND_HARMONIC_ODD, MAJOR_HARMONIC, MINOR_ODD ],
3413
+ [ ROUND_HARMONIC_FLOOR, MAJOR_HARMONIC, MINOR_FLOOR ],
3414
+ [ ROUND_HARMONIC_UP, MAJOR_HARMONIC, MINOR_UP ],
3415
+ [ ROUND_QUADRATIC_CEILING, MAJOR_QUADRATIC, MINOR_CEILING ],
3416
+ [ ROUND_QUADRATIC_DOWN, MAJOR_QUADRATIC, MINOR_DOWN ],
3417
+ [ ROUND_QUADRATIC_EVEN, MAJOR_QUADRATIC, MINOR_EVEN ],
3418
+ [ ROUND_QUADRATIC_ODD, MAJOR_QUADRATIC, MINOR_ODD ],
3419
+ [ ROUND_QUADRATIC_FLOOR, MAJOR_QUADRATIC, MINOR_FLOOR ],
3420
+ [ ROUND_QUADRATIC_UP, MAJOR_QUADRATIC, MINOR_UP ]].each do |triple|
3421
+ mode = triple[0]
3422
+ major = triple[1]
3423
+ minor = triple[2]
3424
+ found = MODE_LOOKUP[[major, minor]]
3425
+ assert_equal(mode, found)
3426
+ assert_same(mode, found)
3427
+ assert_equal(major, mode.major)
3428
+ assert_equal(major, found.major)
3429
+ assert_equal(minor, mode.minor)
3430
+ assert_equal(minor, found.minor)
3431
+ end
3432
+ end
3433
+
3434
+ # test remainder rounding half with exact boundary
3435
+ #
3436
+ def test_int_round_half_int_param_to_two_allowed_remainders
3437
+ print "\ntest_int_round_half_to_two_allowed_remainders [#{Time.now}]: "
3438
+ $stdout.flush
3439
+ check_int_round_major_to_two_allowed_remainders([[1, 3], [1, 5], [2, 4], [2, 6], [3, 5], [3, 7]], true, MAJOR_HALF) do |x, y|
3440
+ LongMath.arithmetic_mean(0, ROUND_FLOOR, x, y).to_i
3441
+ end
3442
+ end
3443
+
3444
+ # test remainder rounding half with exact boundary
3445
+ #
3446
+ def test_int_round_half_non_int_param_to_two_allowed_remainders
3447
+ print "\ntest_int_round_half_to_two_allowed_remainders [#{Time.now}] (long): "
3448
+ $stdout.flush
3449
+ check_int_round_major_to_two_allowed_remainders([[1, 2], [1, 4], [1, 6], [2, 3], [2, 5], [2, 7], [3, 4], [3, 6], [3, 8], [4, 5], [4, 7]], false, MAJOR_HALF) do |x, y|
3450
+ LongMath.arithmetic_mean(0, ROUND_FLOOR, x, y).to_i
3451
+ end
3452
+ end
3453
+
3454
+ # test remainder rounding geometric with exact boundary
3455
+ #
3456
+ def test_int_round_geometric_int_param_to_two_allowed_remainders
3457
+ print "\ntest_int_round_geometric_to_two_allowed_remainders [#{Time.now}]: "
3458
+ $stdout.flush
3459
+ check_int_round_major_to_two_allowed_remainders([[1, 4], [1, 9], [2, 8]], true, MAJOR_GEOMETRIC) do |x, y|
3460
+ LongMath.geometric_mean(0, ROUND_FLOOR, x, y).to_i
3461
+ end
3462
+ end
3463
+
3464
+ # test remainder rounding geometric with exact boundary
3465
+ #
3466
+ def test_int_round_geometric_non_int_param_to_two_allowed_remainders
3467
+ print "\ntest_int_round_geometric_to_two_allowed_remainders [#{Time.now}] (long): "
3468
+ $stdout.flush
3469
+ check_int_round_major_to_two_allowed_remainders([[1, 2], [1, 3], [1, 5], [1, 6], [1, 7], [1, 8], [2, 3], [2, 4], [2, 5], [2, 6], [2, 7]], false, MAJOR_GEOMETRIC) do |x, y|
3470
+ LongMath.geometric_mean(0, ROUND_FLOOR, x, y).to_i
3471
+ end
3472
+ end
3473
+
3474
+ # test remainder rounding harmonic with exact boundary
3475
+ #
3476
+ def test_int_round_harmonic_int_param_to_two_allowed_remainders
3477
+ print "\ntest_int_round_harmonic_to_two_allowed_remainders [#{Time.now}]: "
3478
+ $stdout.flush
3479
+ check_int_round_major_to_two_allowed_remainders([[2, 6], [3, 6]], true, MAJOR_HARMONIC) do |x, y|
3480
+ LongMath.harmonic_mean(0, ROUND_FLOOR, x, y).to_i
3481
+ end
3482
+ end
3483
+
3484
+ # test remainder rounding harmonic with exact boundary
3485
+ #
3486
+ def test_int_round_harmonic_non_int_param_to_two_allowed_remainders
3487
+ print "\ntest_int_round_harmonic_to_two_allowed_remainders [#{Time.now}] (long): "
3488
+ $stdout.flush
3489
+ check_int_round_major_to_two_allowed_remainders([[1, 2], [1, 3], [1, 4], [1, 5], [1, 6], [1, 7], [1, 8], [2, 3], [2, 4], [2, 5], [2, 7]], false, MAJOR_HARMONIC) do |x, y|
3490
+ LongMath.harmonic_mean(0, ROUND_FLOOR, x, y).to_i
3491
+ end
3492
+ end
3493
+
3494
+ # test remainder rounding quadratic with exact boundary
3495
+ #
3496
+ def test_int_round_quadratic_int_param_to_two_allowed_remainders
3497
+ print "\ntest_int_round_quadratic_to_two_allowed_remainders [#{Time.now}]: "
3498
+ $stdout.flush
3499
+ check_int_round_major_to_two_allowed_remainders([[1, 7]], true, MAJOR_QUADRATIC) do |x, y|
3500
+ LongMath.quadratic_mean(0, ROUND_FLOOR, x, y).to_i
3501
+ end
3502
+ end
3503
+
3504
+ # test remainder rounding quadratic with exact boundary
3505
+ #
3506
+ def test_int_round_quadratic_non_int_param_to_two_allowed_remainders
3507
+ print "\ntest_int_round_quadratic_to_two_allowed_remainders [#{Time.now}] (long): "
3508
+ $stdout.flush
3509
+ check_int_round_major_to_two_allowed_remainders([[1, 2], [1, 3], [1, 4], [1, 5], [1, 6], [1, 8], [2, 3], [2, 4], [2, 5], [2, 6], [2, 7], [3, 4], [3, 5], [3, 6], [3, 7]], false, MAJOR_QUADRATIC) do |x, y|
3510
+ LongMath.quadratic_mean(0, ROUND_FLOOR, x, y).to_i
3511
+ end
3512
+ end
3513
+
3514
+ # test remainder rounding cubic with exact boundary
3515
+ #
3516
+ def test_int_round_cubic_non_int_param_to_two_allowed_remainders
3517
+ print "\ntest_int_round_cubic_non_int_param_to_two_allowed_remainders [#{Time.now}]: "
3518
+ $stdout.flush
3519
+ check_int_round_major_to_two_allowed_remainders([[1, 2], [1, 3], [1, 4], [1, 5], [1, 6], [1, 7], [1, 8], [2, 3], [2, 4], [2, 5], [2, 7]], false, MAJOR_CUBIC) do |x, y|
3520
+ LongMath.cubic_mean(0, ROUND_FLOOR, x, y).to_i
3521
+ end
3522
+ end
3523
+
3524
+ # TODO: round to zero, away from zero to negative, away from zero to positive, across zero to negative, across zero to positive
3525
+
3526
+ # test remainder rounding geometric
3527
+ #
3528
+ def check_int_round_major_to_two_allowed_remainders(remainder_sets, boundary_exact_integral, major_mode, &block)
3529
+
3530
+ mode_up = MODE_LOOKUP[[major_mode, MINOR_UP]]
3531
+ mode_down = MODE_LOOKUP[[major_mode, MINOR_DOWN]]
3532
+ mode_floor = MODE_LOOKUP[[major_mode, MINOR_FLOOR]]
3533
+ mode_ceiling = MODE_LOOKUP[[major_mode, MINOR_CEILING]]
3534
+
3535
+ 20.upto 25 do |modulus|
3536
+ remainder_sets.each do |remainders|
3537
+ print "."
3538
+ $stdout.flush
3539
+
3540
+ lower_remainder = remainders[0]
3541
+ upper_remainder = remainders[1]
3542
+
3543
+ text = "m=#{modulus} x=#{0} s=#{remainders.inspect}"
3544
+
3545
+ zero_rounded = 0.round_to_allowed_remainders(remainders, modulus, mode_up, ZERO_ROUND_TO_PLUS)
3546
+ assert_equal(lower_remainder, zero_rounded, text + " zero_rounded=#{zero_rounded}")
3547
+ zero_rounded = 0.round_to_allowed_remainders(remainders, modulus, mode_down, ZERO_ROUND_TO_PLUS)
3548
+ assert_equal(lower_remainder, zero_rounded, text + " zero_rounded=#{zero_rounded}")
3549
+ zero_rounded = 0.round_to_allowed_remainders(remainders, modulus, mode_up, ZERO_ROUND_TO_CLOSEST_PREFER_PLUS)
3550
+ assert_equal(lower_remainder, zero_rounded, text + " zero_rounded=#{zero_rounded}")
3551
+ zero_rounded = 0.round_to_allowed_remainders(remainders, modulus, mode_down, ZERO_ROUND_TO_CLOSEST_PREFER_PLUS)
3552
+ assert_equal(lower_remainder, zero_rounded, text + " zero_rounded=#{zero_rounded}")
3553
+ zero_rounded = 0.round_to_allowed_remainders(remainders, modulus, mode_ceiling, ZERO_ROUND_TO_PLUS)
3554
+ assert_equal(lower_remainder, zero_rounded, text)
3555
+
3556
+ # zero_r1 = 0.round_to_allowed_remainders(remainders, modulus, mode_up, ZERO_ROUND_TO_MINUS)
3557
+ # zero_r2 = 0.round_to_allowed_remainders(remainders, modulus, mode_down, ZERO_ROUND_TO_MINUS)
3558
+ # assert_equal(zero_r1, zero_r2, text + " zero_r1=#{zero_r1} zero_r2=#{zero_r2}")
3559
+ # assert_equal(upper_remainder - modulus, zero_r1, text + " zero_r1=#{zero_r1} zero_r2=#{zero_r2}")
3560
+
3561
+ # zero_r0 = 0.round_to_allowed_remainders(remainders, modulus, mode_floor, ZERO_ROUND_TO_MINUS)
3562
+ # assert_equal(upper_remainder - modulus, zero_r0, "zero_r0=#{zero_r0} < 0 " + text)
3563
+
3564
+ param = block.yield(lower_remainder, upper_remainder)
3565
+ boundary_lower = nil
3566
+ boundary_upper = nil
3567
+ if (boundary_exact_integral)
3568
+ boundary_lower = param - 1
3569
+ else
3570
+ boundary_lower = param
3571
+ end
3572
+ boundary_upper = param +1
3573
+
3574
+ 1.upto boundary_lower do |x|
3575
+ ALL_ROUNDING_MODES.each do |rm|
3576
+ if (rm.major == major_mode && rm.minor != MINOR_EVEN && rm.minor != MINOR_ODD)
3577
+ text = "m=#{modulus} x=#{x} rm=#{rm} s=#{remainders.inspect} param=#{param}"
3578
+ one_r0 = x.round_to_allowed_remainders(remainders, modulus, rm, ZERO_ROUND_UNNECESSARY)
3579
+ assert_equal(lower_remainder, one_r0, text)
3580
+ end
3581
+ end
3582
+ end
3583
+ if (boundary_exact_integral)
3584
+ ALL_ROUNDING_MODES.each do |rm|
3585
+ if (rm.major == major_mode && rm.minor != MINOR_EVEN && rm.minor != MINOR_ODD)
3586
+ text = "m=#{modulus} x=#{param} rm=#{rm} s=#{remainders.inspect}"
3587
+ x_r0 = param.round_to_allowed_remainders(remainders, modulus, rm, ZERO_ROUND_UNNECESSARY)
3588
+ assert(remainders.member?(x_r0), "x_r0=#{x_r0} " + text)
3589
+ end
3590
+ end
3591
+ end
3592
+ boundary_upper.upto upper_remainder do |x|
3593
+ ALL_ROUNDING_MODES.each do |rm|
3594
+ if (rm.major == major_mode && rm.minor != MINOR_EVEN && rm.minor != MINOR_ODD)
3595
+ text = "m=#{modulus} x=#{x} rm=#{rm} s=#{remainders.inspect}"
3596
+ other_r0 = x.round_to_allowed_remainders(remainders, modulus, rm, ZERO_ROUND_UNNECESSARY)
3597
+ assert_equal(upper_remainder, other_r0, text)
3598
+ end
3599
+ end
3600
+ end
3601
+ end
3602
+ end
3603
+ end
3604
+
1962
3605
  #
1963
3606
  # test conversion to String
1964
3607
  #
@@ -1995,53 +3638,53 @@ class TestLongDecimal_class < Test::Unit::TestCase # RUNIT::TestCase
1995
3638
  l = LongDecimal(224, 0)
1996
3639
  s = l.to_s(5)
1997
3640
  assert_equal("224.00000", s, "l=#{l.inspect} 5")
1998
- s = l.to_s(5, LongDecimal::ROUND_UNNECESSARY, 16)
3641
+ s = l.to_s(5, ROUND_UNNECESSARY, 16)
1999
3642
  assert_equal("e0.00000", s, "l=#{l.inspect} 5 ROUND_UNNECESSARY 16")
2000
3643
 
2001
3644
  l = LongDecimal(224, 1)
2002
- s = l.to_s(0, LongDecimal::ROUND_HALF_UP)
3645
+ s = l.to_s(0, ROUND_HALF_UP)
2003
3646
  assert_equal("22", s, "l=#{l.inspect} 0 ROUND_HALF_UP")
2004
- s = l.to_s(5, LongDecimal::ROUND_HALF_UP)
3647
+ s = l.to_s(5, ROUND_HALF_UP)
2005
3648
  assert_equal("22.40000", s, "l=#{l.inspect} 5 ROUND_HALF_UP")
2006
- s = l.to_s(5, LongDecimal::ROUND_HALF_UP, 16)
3649
+ s = l.to_s(5, ROUND_HALF_UP, 16)
2007
3650
  assert_equal("16.66666", s, "l=#{l.inspect} 5 ROUND_HALF_UP")
2008
- s = l.to_s(5, LongDecimal::ROUND_HALF_DOWN, 16)
3651
+ s = l.to_s(5, ROUND_HALF_DOWN, 16)
2009
3652
  assert_equal("16.66666", s, "l=#{l.inspect} 5 ROUND_HALF_DOWN")
2010
3653
 
2011
3654
  l = LongDecimal(224, 2)
2012
- s = l.to_s(0, LongDecimal::ROUND_HALF_UP)
3655
+ s = l.to_s(0, ROUND_HALF_UP)
2013
3656
  assert_equal("2", s, "l=#{l.inspect} 0 ROUND_HALF_UP")
2014
- s = l.to_s(5, LongDecimal::ROUND_HALF_UP)
3657
+ s = l.to_s(5, ROUND_HALF_UP)
2015
3658
  assert_equal("2.24000", s, "l=#{l.inspect} 5 ROUND_HALF_UP")
2016
- s = l.to_s(5, LongDecimal::ROUND_HALF_UP, 16)
3659
+ s = l.to_s(5, ROUND_HALF_UP, 16)
2017
3660
  assert_equal("2.3d70a", s, "l=#{l.inspect} 5 ROUND_HALF_UP")
2018
- s = l.to_s(5, LongDecimal::ROUND_HALF_DOWN, 16)
3661
+ s = l.to_s(5, ROUND_HALF_DOWN, 16)
2019
3662
  assert_equal("2.3d70a", s, "l=#{l.inspect} 5 ROUND_HALF_DOWN")
2020
3663
 
2021
3664
  l = LongDecimal(-224, 0)
2022
3665
  s = l.to_s(5)
2023
3666
  assert_equal("-224.00000", s, "l=#{l.inspect} 5")
2024
- s = l.to_s(5, LongDecimal::ROUND_UNNECESSARY, 16)
3667
+ s = l.to_s(5, ROUND_UNNECESSARY, 16)
2025
3668
  assert_equal("-e0.00000", s, "l=#{l.inspect} 5 ROUND_UNNECESSARY 16")
2026
3669
 
2027
3670
  l = LongDecimal(-224, 1)
2028
- s = l.to_s(0, LongDecimal::ROUND_HALF_UP)
3671
+ s = l.to_s(0, ROUND_HALF_UP)
2029
3672
  assert_equal("-22", s, "l=#{l.inspect} 0 ROUND_HALF_UP")
2030
- s = l.to_s(5, LongDecimal::ROUND_HALF_UP)
3673
+ s = l.to_s(5, ROUND_HALF_UP)
2031
3674
  assert_equal("-22.40000", s, "l=#{l.inspect} 5 ROUND_HALF_UP")
2032
- s = l.to_s(5, LongDecimal::ROUND_HALF_UP, 16)
3675
+ s = l.to_s(5, ROUND_HALF_UP, 16)
2033
3676
  assert_equal("-16.66666", s, "l=#{l.inspect} 5 ROUND_HALF_UP")
2034
- s = l.to_s(5, LongDecimal::ROUND_HALF_DOWN, 16)
3677
+ s = l.to_s(5, ROUND_HALF_DOWN, 16)
2035
3678
  assert_equal("-16.66666", s, "l=#{l.inspect} 5 ROUND_HALF_DOWN")
2036
3679
 
2037
3680
  l = LongDecimal(-224, 2)
2038
- s = l.to_s(0, LongDecimal::ROUND_HALF_UP)
3681
+ s = l.to_s(0, ROUND_HALF_UP)
2039
3682
  assert_equal("-2", s, "l=#{l.inspect} 0 ROUND_HALF_UP")
2040
- s = l.to_s(5, LongDecimal::ROUND_HALF_UP)
3683
+ s = l.to_s(5, ROUND_HALF_UP)
2041
3684
  assert_equal("-2.24000", s, "l=#{l.inspect} 5 ROUND_HALF_UP")
2042
- s = l.to_s(5, LongDecimal::ROUND_HALF_UP, 16)
3685
+ s = l.to_s(5, ROUND_HALF_UP, 16)
2043
3686
  assert_equal("-2.3d70a", s, "l=#{l.inspect} 5 ROUND_HALF_UP")
2044
- s = l.to_s(5, LongDecimal::ROUND_HALF_DOWN, 16)
3687
+ s = l.to_s(5, ROUND_HALF_DOWN, 16)
2045
3688
  assert_equal("-2.3d70a", s, "l=#{l.inspect} 5 ROUND_HALF_DOWN")
2046
3689
  end
2047
3690
 
@@ -2070,11 +3713,11 @@ class TestLongDecimal_class < Test::Unit::TestCase # RUNIT::TestCase
2070
3713
  def test_to_ld
2071
3714
  print "\ntest_to_ld [#{Time.now}]: "
2072
3715
  x = LongDecimal(123, 100)
2073
- y = x.to_ld(20, LongMath::ROUND_UP)
3716
+ y = x.to_ld(20, ROUND_UP)
2074
3717
  z = LongDecimal(1, 20)
2075
3718
  assert_kind_of(LongDecimal, y, "must be ld")
2076
3719
  assert_equal(y, z, "x=#{x} y=#{y}")
2077
- y = x.to_ld(20, LongMath::ROUND_HALF_UP)
3720
+ y = x.to_ld(20, ROUND_HALF_UP)
2078
3721
  z = LongDecimal(0, 20)
2079
3722
  assert_kind_of(LongDecimal, y, "must be ld")
2080
3723
  assert_equal(y, z, "x=#{x} y=#{y}")
@@ -2340,11 +3983,11 @@ class TestLongDecimal_class < Test::Unit::TestCase # RUNIT::TestCase
2340
3983
  print "\ntest_int_mul [#{Time.now}] (90 sec): "
2341
3984
  $stdout.flush
2342
3985
  65.times do |i|
2343
- x0 = (1<<i)-1
3986
+ x0 = (1 << i)-1
2344
3987
  3.times do |k|
2345
3988
  x = x0+k
2346
3989
  65.times do |j|
2347
- y0 = (1<<j)-1
3990
+ y0 = (1 << j)-1
2348
3991
  3.times do |l|
2349
3992
  y = y0+l
2350
3993
  z = x*y
@@ -2366,7 +4009,7 @@ class TestLongDecimal_class < Test::Unit::TestCase # RUNIT::TestCase
2366
4009
  # test multiplication which uses internally multiplication of fixnum, which is buggy in JRuby and has been fixed here.
2367
4010
  #
2368
4011
  def test_mul2
2369
- print "\ntest_mul2 [#{Time.now}] (25 min): "
4012
+ print "\ntest_mul2 [#{Time.now}]: "
2370
4013
  $stdout.flush
2371
4014
 
2372
4015
  map = {}
@@ -2383,7 +4026,6 @@ class TestLongDecimal_class < Test::Unit::TestCase # RUNIT::TestCase
2383
4026
  end
2384
4027
  end
2385
4028
  map.each do |x, x1|
2386
- # puts "x=#{x} x1=#{x1}"
2387
4029
  print ":"
2388
4030
  $stdout.flush
2389
4031
  map.each do |y, y1|
@@ -2765,248 +4407,248 @@ class TestLongDecimal_class < Test::Unit::TestCase # RUNIT::TestCase
2765
4407
 
2766
4408
  y = LongDecimal(3, 1) # 0.3 dy=0 sy=1
2767
4409
  # 2dy+sy+sx-max(dx+sx,dy+sy)-3 = -3 -> use 0
2768
- z = x.divide(y, LongMath::ROUND_DOWN)
2769
- zz = Rational(224, 30).to_ld(0, LongMath::ROUND_DOWN)
4410
+ z = x.divide(y, ROUND_DOWN)
4411
+ zz = Rational(224, 30).to_ld(0, ROUND_DOWN)
2770
4412
  assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2771
4413
  assert_equal(zz, z, "z=#{z.inspect}")
2772
- z = x.divide(y, LongMath::ROUND_UP)
2773
- zz = Rational(224, 30).to_ld(0, LongMath::ROUND_UP)
4414
+ z = x.divide(y, ROUND_UP)
4415
+ zz = Rational(224, 30).to_ld(0, ROUND_UP)
2774
4416
  assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2775
4417
  assert_equal(zz, z, "z=#{z.inspect}")
2776
4418
  # 2dx+sx+sy-max(dx+sx,dy+sy)-3 = -1 -> use 0
2777
- z = y.divide(x, LongMath::ROUND_DOWN)
2778
- zz = Rational(30, 224).to_ld(0, LongMath::ROUND_DOWN)
4419
+ z = y.divide(x, ROUND_DOWN)
4420
+ zz = Rational(30, 224).to_ld(0, ROUND_DOWN)
2779
4421
  assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2780
4422
  assert_equal(zz, z, "z=#{z.inspect}")
2781
- z = y.divide(x, LongMath::ROUND_UP)
2782
- zz = Rational(30, 224).to_ld(0, LongMath::ROUND_UP)
4423
+ z = y.divide(x, ROUND_UP)
4424
+ zz = Rational(30, 224).to_ld(0, ROUND_UP)
2783
4425
  assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2784
4426
  assert_equal(zz, z, "z=#{z.inspect}")
2785
4427
 
2786
4428
  # x= 2.24 dx=1 sx=2
2787
4429
  y = LongDecimal(30000000, 8) # 0.30000000 dy=0 sy=8
2788
4430
  # 2dy+sy+sx-max(dx+sx,dy+sy)-3 = -1 -> use 0
2789
- z = x.divide(y, LongMath::ROUND_DOWN)
2790
- zz = Rational(224, 30).to_ld(0, LongMath::ROUND_DOWN)
4431
+ z = x.divide(y, ROUND_DOWN)
4432
+ zz = Rational(224, 30).to_ld(0, ROUND_DOWN)
2791
4433
  assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2792
4434
  assert_equal(zz, z, "z=#{z.inspect}")
2793
- z = x.divide(y, LongMath::ROUND_UP)
2794
- zz = Rational(224, 30).to_ld(0, LongMath::ROUND_UP)
4435
+ z = x.divide(y, ROUND_UP)
4436
+ zz = Rational(224, 30).to_ld(0, ROUND_UP)
2795
4437
  assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2796
4438
  assert_equal(zz, z, "z=#{z.inspect}")
2797
4439
  # 2dx+sx+sy-max(dx+sx,dy+sy)-3 = 1
2798
- z = y.divide(x, LongMath::ROUND_DOWN)
2799
- zz = Rational(30, 224).to_ld(1, LongMath::ROUND_DOWN)
4440
+ z = y.divide(x, ROUND_DOWN)
4441
+ zz = Rational(30, 224).to_ld(1, ROUND_DOWN)
2800
4442
  assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2801
4443
  assert_equal(zz, z, "z=#{z.inspect}")
2802
- z = y.divide(x, LongMath::ROUND_UP)
2803
- zz = Rational(30, 224).to_ld(1, LongMath::ROUND_UP)
4444
+ z = y.divide(x, ROUND_UP)
4445
+ zz = Rational(30, 224).to_ld(1, ROUND_UP)
2804
4446
  assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2805
4447
  assert_equal(zz, z, "z=#{z.inspect}")
2806
4448
 
2807
4449
  # x= 2.24 dx=1 sx=2
2808
4450
  y = LongDecimal(3, 4) # 0.0003 dy=-4 sy=4
2809
4451
  # 2dy+sy+sx-max(dx+sx,dy+sy)-3 = -8 -> use 0
2810
- z = x.divide(y, LongMath::ROUND_DOWN)
2811
- zz = Rational(22400, 3).to_ld(0, LongMath::ROUND_DOWN)
4452
+ z = x.divide(y, ROUND_DOWN)
4453
+ zz = Rational(22400, 3).to_ld(0, ROUND_DOWN)
2812
4454
  assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2813
4455
  assert_equal(zz, z, "z=#{z.inspect}")
2814
- z = x.divide(y, LongMath::ROUND_UP)
2815
- zz = Rational(22400, 3).to_ld(0, LongMath::ROUND_UP)
4456
+ z = x.divide(y, ROUND_UP)
4457
+ zz = Rational(22400, 3).to_ld(0, ROUND_UP)
2816
4458
  assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2817
4459
  assert_equal(zz, z, "z=#{z.inspect}")
2818
4460
  # 2dx+sx+sy-max(dx+sx,dy+sy)-3 = 2
2819
- z = y.divide(x, LongMath::ROUND_DOWN)
2820
- zz = Rational(3, 22400).to_ld(2, LongMath::ROUND_DOWN)
4461
+ z = y.divide(x, ROUND_DOWN)
4462
+ zz = Rational(3, 22400).to_ld(2, ROUND_DOWN)
2821
4463
  assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2822
4464
  assert_equal(zz, z, "z=#{z.inspect}")
2823
- z = y.divide(x, LongMath::ROUND_UP)
2824
- zz = Rational(3, 22400).to_ld(2, LongMath::ROUND_UP)
4465
+ z = y.divide(x, ROUND_UP)
4466
+ zz = Rational(3, 22400).to_ld(2, ROUND_UP)
2825
4467
  assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2826
4468
  assert_equal(zz, z, "z=#{z.inspect}")
2827
4469
 
2828
4470
  # x= 2.24 dx=1 sx=2
2829
4471
  y = LongDecimal(3333, 2) # 33.33 dy=2 sy=2
2830
4472
  # 2dy+sy+sx-max(dx+sx,dy+sy)-3 = 1
2831
- z = x.divide(y, LongMath::ROUND_DOWN)
2832
- zz = Rational(224, 3333).to_ld(1, LongMath::ROUND_DOWN)
4473
+ z = x.divide(y, ROUND_DOWN)
4474
+ zz = Rational(224, 3333).to_ld(1, ROUND_DOWN)
2833
4475
  assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2834
4476
  assert_equal(zz, z, "z=#{z.inspect}")
2835
- z = x.divide(y, LongMath::ROUND_UP)
2836
- zz = Rational(224, 3333).to_ld(1, LongMath::ROUND_UP)
4477
+ z = x.divide(y, ROUND_UP)
4478
+ zz = Rational(224, 3333).to_ld(1, ROUND_UP)
2837
4479
  assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2838
4480
  assert_equal(zz, z, "z=#{z.inspect}")
2839
4481
  # 2dx+sx+sy-max(dx+sx,dy+sy)-3 = -1 -> use 0
2840
- z = y.divide(x, LongMath::ROUND_DOWN)
2841
- zz = Rational(3333, 224).to_ld(0, LongMath::ROUND_DOWN)
4482
+ z = y.divide(x, ROUND_DOWN)
4483
+ zz = Rational(3333, 224).to_ld(0, ROUND_DOWN)
2842
4484
  assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2843
4485
  assert_equal(zz, z, "z=#{z.inspect}")
2844
- z = y.divide(x, LongMath::ROUND_UP)
2845
- zz = Rational(3333, 224).to_ld(0, LongMath::ROUND_UP)
4486
+ z = y.divide(x, ROUND_UP)
4487
+ zz = Rational(3333, 224).to_ld(0, ROUND_UP)
2846
4488
  assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2847
4489
  assert_equal(zz, z, "z=#{z.inspect}")
2848
4490
 
2849
4491
  # x= 2.24 dx=1 sx=2
2850
4492
  y = LongDecimal(33333, 2) # 333.33 dy=3 sy=2
2851
4493
  # 2dy+sy+sx-max(dx+sx,dy+sy)-3 = 2
2852
- z = x.divide(y, LongMath::ROUND_DOWN)
2853
- zz = Rational(224, 33333).to_ld(2, LongMath::ROUND_DOWN)
4494
+ z = x.divide(y, ROUND_DOWN)
4495
+ zz = Rational(224, 33333).to_ld(2, ROUND_DOWN)
2854
4496
  assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2855
4497
  assert_equal(zz, z, "z=#{z.inspect}")
2856
- z = x.divide(y, LongMath::ROUND_UP)
2857
- zz = Rational(224, 33333).to_ld(2, LongMath::ROUND_UP)
4498
+ z = x.divide(y, ROUND_UP)
4499
+ zz = Rational(224, 33333).to_ld(2, ROUND_UP)
2858
4500
  assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2859
4501
  assert_equal(zz, z, "z=#{z.inspect}")
2860
4502
  # 2dx+sx+sy-max(dx+sx,dy+sy)-3 = -2 -> use 0
2861
- z = y.divide(x, LongMath::ROUND_DOWN)
2862
- zz = Rational(33333, 224).to_ld(0, LongMath::ROUND_DOWN)
4503
+ z = y.divide(x, ROUND_DOWN)
4504
+ zz = Rational(33333, 224).to_ld(0, ROUND_DOWN)
2863
4505
  assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2864
4506
  assert_equal(zz, z, "z=#{z.inspect}")
2865
- z = y.divide(x, LongMath::ROUND_UP)
2866
- zz = Rational(33333, 224).to_ld(0, LongMath::ROUND_UP)
4507
+ z = y.divide(x, ROUND_UP)
4508
+ zz = Rational(33333, 224).to_ld(0, ROUND_UP)
2867
4509
  assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2868
4510
  assert_equal(zz, z, "z=#{z.inspect}")
2869
4511
 
2870
4512
  # x= 2.24 dx=1 sx=2
2871
4513
  y = LongDecimal(33333, 3) # 33.333 dy=2 sy=3
2872
4514
  # 2dy+sy+sx-max(dx+sx,dy+sy)-3 = 1
2873
- z = x.divide(y, LongMath::ROUND_DOWN)
2874
- zz = Rational(2240, 33333).to_ld(1, LongMath::ROUND_DOWN)
4515
+ z = x.divide(y, ROUND_DOWN)
4516
+ zz = Rational(2240, 33333).to_ld(1, ROUND_DOWN)
2875
4517
  assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2876
4518
  assert_equal(zz, z, "z=#{z.inspect}")
2877
- z = x.divide(y, LongMath::ROUND_UP)
2878
- zz = Rational(2240, 33333).to_ld(1, LongMath::ROUND_UP)
4519
+ z = x.divide(y, ROUND_UP)
4520
+ zz = Rational(2240, 33333).to_ld(1, ROUND_UP)
2879
4521
  assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2880
4522
  assert_equal(zz, z, "z=#{z.inspect}")
2881
4523
  # 2dx+sx+sy-max(dx+sx,dy+sy)-3 = -1 -> use 0
2882
- z = y.divide(x, LongMath::ROUND_DOWN)
2883
- zz = Rational(33333, 2240).to_ld(0, LongMath::ROUND_DOWN)
4524
+ z = y.divide(x, ROUND_DOWN)
4525
+ zz = Rational(33333, 2240).to_ld(0, ROUND_DOWN)
2884
4526
  assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2885
4527
  assert_equal(zz, z, "z=#{z.inspect}")
2886
- z = y.divide(x, LongMath::ROUND_UP)
2887
- zz = Rational(33333, 2240).to_ld(0, LongMath::ROUND_UP)
4528
+ z = y.divide(x, ROUND_UP)
4529
+ zz = Rational(33333, 2240).to_ld(0, ROUND_UP)
2888
4530
  assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2889
4531
  assert_equal(zz, z, "z=#{z.inspect}")
2890
4532
 
2891
4533
  # x= 2.24 dx=1 sx=2
2892
4534
  y = LongDecimal(3333, 3) # 3.333 dy=1 sy=3
2893
4535
  # 2dy+sy+sx-max(dx+sx,dy+sy)-3 = 0
2894
- z = x.divide(y, LongMath::ROUND_DOWN)
2895
- zz = Rational(2240, 3333).to_ld(0, LongMath::ROUND_DOWN)
4536
+ z = x.divide(y, ROUND_DOWN)
4537
+ zz = Rational(2240, 3333).to_ld(0, ROUND_DOWN)
2896
4538
  assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2897
4539
  assert_equal(zz, z, "z=#{z.inspect}")
2898
- z = x.divide(y, LongMath::ROUND_UP)
2899
- zz = Rational(2240, 3333).to_ld(0, LongMath::ROUND_UP)
4540
+ z = x.divide(y, ROUND_UP)
4541
+ zz = Rational(2240, 3333).to_ld(0, ROUND_UP)
2900
4542
  assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2901
4543
  assert_equal(zz, z, "z=#{z.inspect}")
2902
4544
  # 2dx+sx+sy-max(dx+sx,dy+sy)-3 = 0
2903
- z = y.divide(x, LongMath::ROUND_DOWN)
2904
- zz = Rational(3333, 2240).to_ld(0, LongMath::ROUND_DOWN)
4545
+ z = y.divide(x, ROUND_DOWN)
4546
+ zz = Rational(3333, 2240).to_ld(0, ROUND_DOWN)
2905
4547
  assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2906
4548
  assert_equal(zz, z, "z=#{z.inspect}")
2907
- z = y.divide(x, LongMath::ROUND_UP)
2908
- zz = Rational(3333, 2240).to_ld(0, LongMath::ROUND_UP)
4549
+ z = y.divide(x, ROUND_UP)
4550
+ zz = Rational(3333, 2240).to_ld(0, ROUND_UP)
2909
4551
  assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2910
4552
  assert_equal(zz, z, "z=#{z.inspect}")
2911
4553
 
2912
4554
  # x= 2.24 dx=1 sx=2
2913
4555
  y = LongDecimal(123456789, 3) # 123456.789 dy=6 sy=3
2914
4556
  # 2dy+sy+sx-max(dx+sx,dy+sy)-3 = 5
2915
- z = x.divide(y, LongMath::ROUND_DOWN)
2916
- zz = Rational(2240, 123456789).to_ld(5, LongMath::ROUND_DOWN)
4557
+ z = x.divide(y, ROUND_DOWN)
4558
+ zz = Rational(2240, 123456789).to_ld(5, ROUND_DOWN)
2917
4559
  assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2918
4560
  assert_equal(zz, z, "z=#{z.inspect}")
2919
- z = x.divide(y, LongMath::ROUND_UP)
2920
- zz = Rational(2240, 123456789).to_ld(5, LongMath::ROUND_UP)
4561
+ z = x.divide(y, ROUND_UP)
4562
+ zz = Rational(2240, 123456789).to_ld(5, ROUND_UP)
2921
4563
  assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2922
4564
  assert_equal(zz, z, "z=#{z.inspect}")
2923
4565
  # 2dx+sx+sy-max(dx+sx,dy+sy)-3 = -5 -> use 0
2924
- z = y.divide(x, LongMath::ROUND_DOWN)
2925
- zz = Rational(123456789, 2240).to_ld(0, LongMath::ROUND_DOWN)
4566
+ z = y.divide(x, ROUND_DOWN)
4567
+ zz = Rational(123456789, 2240).to_ld(0, ROUND_DOWN)
2926
4568
  assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2927
4569
  assert_equal(zz, z, "z=#{z.inspect}")
2928
- z = y.divide(x, LongMath::ROUND_UP)
2929
- zz = Rational(123456789, 2240).to_ld(0, LongMath::ROUND_UP)
4570
+ z = y.divide(x, ROUND_UP)
4571
+ zz = Rational(123456789, 2240).to_ld(0, ROUND_UP)
2930
4572
  assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2931
4573
  assert_equal(zz, z, "z=#{z.inspect}")
2932
4574
 
2933
4575
  # x= 2.24 dx=1 sx=2
2934
4576
  y = 5.to_ld # 5 dy=1 sy=0
2935
4577
  # 2dy+sy+sx-max(dx+sx,dy+sy)-3 = -2 -> use 0
2936
- z = x.divide(y, LongMath::ROUND_DOWN)
2937
- zz = Rational(224, 500).to_ld(0, LongMath::ROUND_DOWN)
4578
+ z = x.divide(y, ROUND_DOWN)
4579
+ zz = Rational(224, 500).to_ld(0, ROUND_DOWN)
2938
4580
  assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2939
4581
  assert_equal(zz, z, "z=#{z.inspect}")
2940
- z = x.divide(y, LongMath::ROUND_UP)
2941
- zz = Rational(224, 500).to_ld(0, LongMath::ROUND_UP)
4582
+ z = x.divide(y, ROUND_UP)
4583
+ zz = Rational(224, 500).to_ld(0, ROUND_UP)
2942
4584
  assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2943
4585
  assert_equal(zz, z, "z=#{z.inspect}")
2944
4586
  # 2dx+sx+sy-max(dx+sx,dy+sy)-3 = -2 -> use 0
2945
- z = y.divide(x, LongMath::ROUND_DOWN)
2946
- zz = Rational(500, 224).to_ld(0, LongMath::ROUND_DOWN)
4587
+ z = y.divide(x, ROUND_DOWN)
4588
+ zz = Rational(500, 224).to_ld(0, ROUND_DOWN)
2947
4589
  assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2948
4590
  assert_equal(zz, z, "z=#{z.inspect}")
2949
- z = y.divide(x, LongMath::ROUND_UP)
2950
- zz = Rational(500, 224).to_ld(0, LongMath::ROUND_UP)
4591
+ z = y.divide(x, ROUND_UP)
4592
+ zz = Rational(500, 224).to_ld(0, ROUND_UP)
2951
4593
  assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2952
4594
  assert_equal(zz, z, "z=#{z.inspect}")
2953
4595
 
2954
4596
  # x= 2.24 dx=1 sx=2
2955
4597
  y = 5.001.to_ld # dy=1 sy=3
2956
4598
  # 2dy+sy+sx-max(dx+sx,dy+sy)-3 = 0
2957
- z = x.divide(y, LongMath::ROUND_DOWN)
2958
- zz = Rational(224, 500).to_ld(0, LongMath::ROUND_DOWN)
4599
+ z = x.divide(y, ROUND_DOWN)
4600
+ zz = Rational(224, 500).to_ld(0, ROUND_DOWN)
2959
4601
  assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2960
4602
  assert_equal(zz, z, "z=#{z.inspect}")
2961
- z = x.divide(y, LongMath::ROUND_UP)
2962
- zz = Rational(224, 500).to_ld(0, LongMath::ROUND_UP)
4603
+ z = x.divide(y, ROUND_UP)
4604
+ zz = Rational(224, 500).to_ld(0, ROUND_UP)
2963
4605
  assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2964
4606
  assert_equal(zz, z, "z=#{z.inspect}")
2965
4607
  # 2dx+sx+sy-max(dx+sx,dy+sy)-3 = 0
2966
- z = y.divide(x, LongMath::ROUND_DOWN)
2967
- zz = Rational(500, 224).to_ld(0, LongMath::ROUND_DOWN)
4608
+ z = y.divide(x, ROUND_DOWN)
4609
+ zz = Rational(500, 224).to_ld(0, ROUND_DOWN)
2968
4610
  assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2969
4611
  assert_equal(zz, z, "z=#{z.inspect}")
2970
- z = y.divide(x, LongMath::ROUND_UP)
2971
- zz = Rational(500, 224).to_ld(0, LongMath::ROUND_UP)
4612
+ z = y.divide(x, ROUND_UP)
4613
+ zz = Rational(500, 224).to_ld(0, ROUND_UP)
2972
4614
  assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2973
4615
  assert_equal(zz, z, "z=#{z.inspect}")
2974
4616
 
2975
4617
  y = Rational(5, 3).to_ld
2976
4618
  # y is has no scale, use scale of x
2977
- z = x.divide(y, LongMath::ROUND_DOWN)
2978
- zz = Rational(224*3, 500).to_ld(0, LongMath::ROUND_DOWN)
4619
+ z = x.divide(y, ROUND_DOWN)
4620
+ zz = Rational(224*3, 500).to_ld(0, ROUND_DOWN)
2979
4621
  assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2980
4622
  assert_equal(zz, z, "z=#{z.inspect}")
2981
- z = x.divide(y, LongMath::ROUND_UP)
2982
- zz = Rational(224*3, 500).to_ld(0, LongMath::ROUND_UP)
4623
+ z = x.divide(y, ROUND_UP)
4624
+ zz = Rational(224*3, 500).to_ld(0, ROUND_UP)
2983
4625
  assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2984
4626
  assert_equal(zz, z, "z=#{z.inspect}")
2985
4627
  # y is has no scale, use scale of x
2986
- z = y.divide(x, LongMath::ROUND_DOWN)
2987
- zz = Rational(500, 224*3).to_ld(0, LongMath::ROUND_DOWN)
4628
+ z = y.divide(x, ROUND_DOWN)
4629
+ zz = Rational(500, 224*3).to_ld(0, ROUND_DOWN)
2988
4630
  assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2989
4631
  assert_equal(zz, z, "z=#{z.inspect}")
2990
- z = y.divide(x, LongMath::ROUND_UP)
2991
- zz = Rational(500, 224*3).to_ld(0, LongMath::ROUND_UP)
4632
+ z = y.divide(x, ROUND_UP)
4633
+ zz = Rational(500, 224*3).to_ld(0, ROUND_UP)
2992
4634
  assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2993
4635
  assert_equal(zz, z, "z=#{z.inspect}")
2994
4636
 
2995
4637
  y = LongDecimalQuot(Rational(5, 3), 3).to_ld
2996
- z = x.divide(y, LongMath::ROUND_DOWN)
2997
- zz = Rational(224*3, 500).to_ld(0, LongMath::ROUND_DOWN)
4638
+ z = x.divide(y, ROUND_DOWN)
4639
+ zz = Rational(224*3, 500).to_ld(0, ROUND_DOWN)
2998
4640
  assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2999
4641
  assert_equal(zz, z, "z=#{z.inspect}")
3000
- z = x.divide(y, LongMath::ROUND_UP)
3001
- zz = Rational(224*3, 500).to_ld(0, LongMath::ROUND_UP)
4642
+ z = x.divide(y, ROUND_UP)
4643
+ zz = Rational(224*3, 500).to_ld(0, ROUND_UP)
3002
4644
  assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
3003
4645
  assert_equal(zz, z, "z=#{z.inspect}")
3004
- z = y.divide(x, LongMath::ROUND_DOWN)
3005
- zz = Rational(500, 224*3).to_ld(0, LongMath::ROUND_DOWN)
4646
+ z = y.divide(x, ROUND_DOWN)
4647
+ zz = Rational(500, 224*3).to_ld(0, ROUND_DOWN)
3006
4648
  assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
3007
4649
  assert_equal(zz, z, "z=#{z.inspect}")
3008
- z = y.divide(x, LongMath::ROUND_UP)
3009
- zz = Rational(500, 224*3).to_ld(0, LongMath::ROUND_UP)
4650
+ z = y.divide(x, ROUND_UP)
4651
+ zz = Rational(500, 224*3).to_ld(0, ROUND_UP)
3010
4652
  assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
3011
4653
  assert_equal(zz, z, "z=#{z.inspect}")
3012
4654
  end
@@ -3020,7 +4662,7 @@ class TestLongDecimal_class < Test::Unit::TestCase # RUNIT::TestCase
3020
4662
 
3021
4663
  y = Complex(5, 3)
3022
4664
  puts("x=#{x.inspect} y=#{y.inspect}")
3023
- z = x.divide(y, LongMath::ROUND_DOWN)
4665
+ z = x.divide(y, ROUND_DOWN)
3024
4666
  zz = 2.24 / Complex(5, 3)
3025
4667
  assert_kind_of(Complex, z, "z=#{z.inspect}")
3026
4668
  assert((zz-z).abs < 1e-9, "z=#{z.inspect}")
@@ -3035,219 +4677,219 @@ class TestLongDecimal_class < Test::Unit::TestCase # RUNIT::TestCase
3035
4677
  x = LongDecimal(224, 2) # 2.24
3036
4678
 
3037
4679
  y = LongDecimal(3, 1) # 0.3
3038
- z = x.divide_s(y, 1, LongMath::ROUND_DOWN)
3039
- zz = Rational(224, 30).to_ld(1, LongMath::ROUND_DOWN)
4680
+ z = x.divide_s(y, 1, ROUND_DOWN)
4681
+ zz = Rational(224, 30).to_ld(1, ROUND_DOWN)
3040
4682
  assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
3041
4683
  assert_equal(zz, z, "z=#{z.inspect}")
3042
- z = x.divide_s(y, 1, LongMath::ROUND_UP)
3043
- zz = Rational(224, 30).to_ld(1, LongMath::ROUND_UP)
4684
+ z = x.divide_s(y, 1, ROUND_UP)
4685
+ zz = Rational(224, 30).to_ld(1, ROUND_UP)
3044
4686
  assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
3045
4687
  assert_equal(zz, z, "z=#{z.inspect}")
3046
- z = y.divide_s(x, 1, LongMath::ROUND_DOWN)
3047
- zz = Rational(30, 224).to_ld(1, LongMath::ROUND_DOWN)
4688
+ z = y.divide_s(x, 1, ROUND_DOWN)
4689
+ zz = Rational(30, 224).to_ld(1, ROUND_DOWN)
3048
4690
  assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
3049
4691
  assert_equal(zz, z, "z=#{z.inspect}")
3050
- z = y.divide_s(x, 1, LongMath::ROUND_UP)
3051
- zz = Rational(30, 224).to_ld(1, LongMath::ROUND_UP)
4692
+ z = y.divide_s(x, 1, ROUND_UP)
4693
+ zz = Rational(30, 224).to_ld(1, ROUND_UP)
3052
4694
  assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
3053
4695
  assert_equal(zz, z, "z=#{z.inspect}")
3054
4696
 
3055
4697
  y = LongDecimal(30000000, 8) # 0.30000000
3056
- z = x.divide_s(y, 1, LongMath::ROUND_DOWN)
3057
- zz = Rational(224, 30).to_ld(1, LongMath::ROUND_DOWN)
4698
+ z = x.divide_s(y, 1, ROUND_DOWN)
4699
+ zz = Rational(224, 30).to_ld(1, ROUND_DOWN)
3058
4700
  assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
3059
4701
  assert_equal(zz, z, "z=#{z.inspect}")
3060
- z = x.divide_s(y, 1, LongMath::ROUND_UP)
3061
- zz = Rational(224, 30).to_ld(1, LongMath::ROUND_UP)
4702
+ z = x.divide_s(y, 1, ROUND_UP)
4703
+ zz = Rational(224, 30).to_ld(1, ROUND_UP)
3062
4704
  assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
3063
4705
  assert_equal(zz, z, "z=#{z.inspect}")
3064
- z = y.divide_s(x, 2, LongMath::ROUND_DOWN)
3065
- zz = Rational(30, 224).to_ld(2, LongMath::ROUND_DOWN)
4706
+ z = y.divide_s(x, 2, ROUND_DOWN)
4707
+ zz = Rational(30, 224).to_ld(2, ROUND_DOWN)
3066
4708
  assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
3067
4709
  assert_equal(zz, z, "z=#{z.inspect}")
3068
- z = y.divide_s(x, 20, LongMath::ROUND_UP)
3069
- zz = Rational(30, 224).to_ld(20, LongMath::ROUND_UP)
4710
+ z = y.divide_s(x, 20, ROUND_UP)
4711
+ zz = Rational(30, 224).to_ld(20, ROUND_UP)
3070
4712
  assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
3071
4713
  assert_equal(zz, z, "z=#{z.inspect}")
3072
4714
 
3073
4715
  y = LongDecimal(3, 4) # 0.0003
3074
- z = x.divide_s(y, 2, LongMath::ROUND_DOWN)
3075
- zz = Rational(22400, 3).to_ld(2, LongMath::ROUND_DOWN)
4716
+ z = x.divide_s(y, 2, ROUND_DOWN)
4717
+ zz = Rational(22400, 3).to_ld(2, ROUND_DOWN)
3076
4718
  assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
3077
4719
  assert_equal(zz, z, "z=#{z.inspect}")
3078
- z = x.divide_s(y, 2, LongMath::ROUND_UP)
3079
- zz = Rational(22400, 3).to_ld(2, LongMath::ROUND_UP)
4720
+ z = x.divide_s(y, 2, ROUND_UP)
4721
+ zz = Rational(22400, 3).to_ld(2, ROUND_UP)
3080
4722
  assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
3081
4723
  assert_equal(zz, z, "z=#{z.inspect}")
3082
- z = y.divide_s(x, 3, LongMath::ROUND_DOWN)
3083
- zz = Rational(3, 22400).to_ld(3, LongMath::ROUND_DOWN)
4724
+ z = y.divide_s(x, 3, ROUND_DOWN)
4725
+ zz = Rational(3, 22400).to_ld(3, ROUND_DOWN)
3084
4726
  assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
3085
4727
  assert_equal(zz, z, "z=#{z.inspect}")
3086
- z = y.divide_s(x, 2, LongMath::ROUND_UP)
3087
- zz = Rational(3, 22400).to_ld(2, LongMath::ROUND_UP)
4728
+ z = y.divide_s(x, 2, ROUND_UP)
4729
+ zz = Rational(3, 22400).to_ld(2, ROUND_UP)
3088
4730
  assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
3089
4731
  assert_equal(zz, z, "z=#{z.inspect}")
3090
4732
 
3091
4733
  y = LongDecimal(3333, 2) # 33.33
3092
- z = x.divide_s(y, 4, LongMath::ROUND_DOWN)
3093
- zz = Rational(224, 3333).to_ld(4, LongMath::ROUND_DOWN)
4734
+ z = x.divide_s(y, 4, ROUND_DOWN)
4735
+ zz = Rational(224, 3333).to_ld(4, ROUND_DOWN)
3094
4736
  assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
3095
4737
  assert_equal(zz, z, "z=#{z.inspect}")
3096
- z = x.divide_s(y, 30, LongMath::ROUND_UP)
3097
- zz = Rational(224, 3333).to_ld(30, LongMath::ROUND_UP)
4738
+ z = x.divide_s(y, 30, ROUND_UP)
4739
+ zz = Rational(224, 3333).to_ld(30, ROUND_UP)
3098
4740
  assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
3099
4741
  assert_equal(zz, z, "z=#{z.inspect}")
3100
- z = y.divide_s(x, 4, LongMath::ROUND_DOWN)
3101
- zz = Rational(3333, 224).to_ld(4, LongMath::ROUND_DOWN)
4742
+ z = y.divide_s(x, 4, ROUND_DOWN)
4743
+ zz = Rational(3333, 224).to_ld(4, ROUND_DOWN)
3102
4744
  assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
3103
4745
  assert_equal(zz, z, "z=#{z.inspect}")
3104
- z = y.divide_s(x, 1, LongMath::ROUND_UP)
3105
- zz = Rational(3333, 224).to_ld(1, LongMath::ROUND_UP)
4746
+ z = y.divide_s(x, 1, ROUND_UP)
4747
+ zz = Rational(3333, 224).to_ld(1, ROUND_UP)
3106
4748
  assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
3107
4749
  assert_equal(zz, z, "z=#{z.inspect}")
3108
4750
 
3109
4751
  y = LongDecimal(33333, 2) # 333.33
3110
- z = x.divide_s(y, 3, LongMath::ROUND_DOWN)
3111
- zz = Rational(224, 33333).to_ld(3, LongMath::ROUND_DOWN)
4752
+ z = x.divide_s(y, 3, ROUND_DOWN)
4753
+ zz = Rational(224, 33333).to_ld(3, ROUND_DOWN)
3112
4754
  assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
3113
4755
  assert_equal(zz, z, "z=#{z.inspect}")
3114
- z = x.divide_s(y, 3, LongMath::ROUND_UP)
3115
- zz = Rational(224, 33333).to_ld(3, LongMath::ROUND_UP)
4756
+ z = x.divide_s(y, 3, ROUND_UP)
4757
+ zz = Rational(224, 33333).to_ld(3, ROUND_UP)
3116
4758
  assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
3117
4759
  assert_equal(zz, z, "z=#{z.inspect}")
3118
- z = y.divide_s(x, 33, LongMath::ROUND_DOWN)
3119
- zz = Rational(33333, 224).to_ld(33, LongMath::ROUND_DOWN)
4760
+ z = y.divide_s(x, 33, ROUND_DOWN)
4761
+ zz = Rational(33333, 224).to_ld(33, ROUND_DOWN)
3120
4762
  assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
3121
4763
  assert_equal(zz, z, "z=#{z.inspect}")
3122
- z = y.divide_s(x, 4, LongMath::ROUND_UP)
3123
- zz = Rational(33333, 224).to_ld(4, LongMath::ROUND_UP)
4764
+ z = y.divide_s(x, 4, ROUND_UP)
4765
+ zz = Rational(33333, 224).to_ld(4, ROUND_UP)
3124
4766
  assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
3125
4767
  assert_equal(zz, z, "z=#{z.inspect}")
3126
4768
 
3127
4769
  y = LongDecimal(33333, 3) # 33.333
3128
- z = x.divide_s(y, 2, LongMath::ROUND_DOWN)
3129
- zz = Rational(2240, 33333).to_ld(2, LongMath::ROUND_DOWN)
4770
+ z = x.divide_s(y, 2, ROUND_DOWN)
4771
+ zz = Rational(2240, 33333).to_ld(2, ROUND_DOWN)
3130
4772
  assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
3131
4773
  assert_equal(zz, z, "z=#{z.inspect}")
3132
- z = x.divide_s(y, 2, LongMath::ROUND_UP)
3133
- zz = Rational(2240, 33333).to_ld(2, LongMath::ROUND_UP)
4774
+ z = x.divide_s(y, 2, ROUND_UP)
4775
+ zz = Rational(2240, 33333).to_ld(2, ROUND_UP)
3134
4776
  assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
3135
4777
  assert_equal(zz, z, "z=#{z.inspect}")
3136
- z = y.divide_s(x, 2, LongMath::ROUND_DOWN)
3137
- zz = Rational(33333, 2240).to_ld(2, LongMath::ROUND_DOWN)
4778
+ z = y.divide_s(x, 2, ROUND_DOWN)
4779
+ zz = Rational(33333, 2240).to_ld(2, ROUND_DOWN)
3138
4780
  assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
3139
4781
  assert_equal(zz, z, "z=#{z.inspect}")
3140
- z = y.divide_s(x, 1, LongMath::ROUND_UP)
3141
- zz = Rational(33333, 2240).to_ld(1, LongMath::ROUND_UP)
4782
+ z = y.divide_s(x, 1, ROUND_UP)
4783
+ zz = Rational(33333, 2240).to_ld(1, ROUND_UP)
3142
4784
  assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
3143
4785
  assert_equal(zz, z, "z=#{z.inspect}")
3144
4786
 
3145
4787
  y = LongDecimal(3333, 3) # 3.333
3146
- z = x.divide_s(y, 1, LongMath::ROUND_DOWN)
3147
- zz = Rational(2240, 3333).to_ld(1, LongMath::ROUND_DOWN)
4788
+ z = x.divide_s(y, 1, ROUND_DOWN)
4789
+ zz = Rational(2240, 3333).to_ld(1, ROUND_DOWN)
3148
4790
  assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
3149
4791
  assert_equal(zz, z, "z=#{z.inspect}")
3150
- z = x.divide_s(y, 1, LongMath::ROUND_UP)
3151
- zz = Rational(2240, 3333).to_ld(1, LongMath::ROUND_UP)
4792
+ z = x.divide_s(y, 1, ROUND_UP)
4793
+ zz = Rational(2240, 3333).to_ld(1, ROUND_UP)
3152
4794
  assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
3153
4795
  assert_equal(zz, z, "z=#{z.inspect}")
3154
- z = y.divide_s(x, 1, LongMath::ROUND_DOWN)
3155
- zz = Rational(3333, 2240).to_ld(1, LongMath::ROUND_DOWN)
4796
+ z = y.divide_s(x, 1, ROUND_DOWN)
4797
+ zz = Rational(3333, 2240).to_ld(1, ROUND_DOWN)
3156
4798
  assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
3157
4799
  assert_equal(zz, z, "z=#{z.inspect}")
3158
- z = y.divide_s(x, 1, LongMath::ROUND_UP)
3159
- zz = Rational(3333, 2240).to_ld(1, LongMath::ROUND_UP)
4800
+ z = y.divide_s(x, 1, ROUND_UP)
4801
+ zz = Rational(3333, 2240).to_ld(1, ROUND_UP)
3160
4802
  assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
3161
4803
  assert_equal(zz, z, "z=#{z.inspect}")
3162
4804
 
3163
4805
  y = LongDecimal(123456789, 3) # 123456.789
3164
- z = x.divide_s(y, 3, LongMath::ROUND_DOWN)
3165
- zz = Rational(2240, 123456789).to_ld(3, LongMath::ROUND_DOWN)
4806
+ z = x.divide_s(y, 3, ROUND_DOWN)
4807
+ zz = Rational(2240, 123456789).to_ld(3, ROUND_DOWN)
3166
4808
  assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
3167
4809
  assert_equal(zz, z, "z=#{z.inspect}")
3168
- z = x.divide_s(y, 7, LongMath::ROUND_UP)
3169
- zz = Rational(2240, 123456789).to_ld(7, LongMath::ROUND_UP)
4810
+ z = x.divide_s(y, 7, ROUND_UP)
4811
+ zz = Rational(2240, 123456789).to_ld(7, ROUND_UP)
3170
4812
  assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
3171
4813
  assert_equal(zz, z, "z=#{z.inspect}")
3172
- z = y.divide_s(x, 0, LongMath::ROUND_DOWN)
3173
- zz = Rational(123456789, 2240).to_ld(0, LongMath::ROUND_DOWN)
4814
+ z = y.divide_s(x, 0, ROUND_DOWN)
4815
+ zz = Rational(123456789, 2240).to_ld(0, ROUND_DOWN)
3174
4816
  assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
3175
4817
  assert_equal(zz, z, "z=#{z.inspect}")
3176
- z = y.divide_s(x, 9, LongMath::ROUND_UP)
3177
- zz = Rational(123456789, 2240).to_ld(9, LongMath::ROUND_UP)
4818
+ z = y.divide_s(x, 9, ROUND_UP)
4819
+ zz = Rational(123456789, 2240).to_ld(9, ROUND_UP)
3178
4820
  assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
3179
4821
  assert_equal(zz, z, "z=#{z.inspect}")
3180
4822
 
3181
4823
  y = 5.to_ld # 5
3182
- z = x.divide_s(y, 1, LongMath::ROUND_DOWN)
3183
- zz = Rational(224, 500).to_ld(1, LongMath::ROUND_DOWN)
4824
+ z = x.divide_s(y, 1, ROUND_DOWN)
4825
+ zz = Rational(224, 500).to_ld(1, ROUND_DOWN)
3184
4826
  assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
3185
4827
  assert_equal(zz, z, "z=#{z.inspect}")
3186
- z = x.divide_s(y, 1, LongMath::ROUND_UP)
3187
- zz = Rational(224, 500).to_ld(1, LongMath::ROUND_UP)
4828
+ z = x.divide_s(y, 1, ROUND_UP)
4829
+ zz = Rational(224, 500).to_ld(1, ROUND_UP)
3188
4830
  assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
3189
4831
  assert_equal(zz, z, "z=#{z.inspect}")
3190
- z = y.divide_s(x, 1, LongMath::ROUND_DOWN)
3191
- zz = Rational(500, 224).to_ld(1, LongMath::ROUND_DOWN)
4832
+ z = y.divide_s(x, 1, ROUND_DOWN)
4833
+ zz = Rational(500, 224).to_ld(1, ROUND_DOWN)
3192
4834
  assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
3193
4835
  assert_equal(zz, z, "z=#{z.inspect}")
3194
- z = y.divide_s(x, 1, LongMath::ROUND_UP)
3195
- zz = Rational(500, 224).to_ld(1, LongMath::ROUND_UP)
4836
+ z = y.divide_s(x, 1, ROUND_UP)
4837
+ zz = Rational(500, 224).to_ld(1, ROUND_UP)
3196
4838
  assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
3197
4839
  assert_equal(zz, z, "z=#{z.inspect}")
3198
4840
 
3199
4841
  y = 5.001.to_ld # 5.001
3200
- z = x.divide_s(y, 1, LongMath::ROUND_DOWN)
3201
- zz = Rational(224, 500).to_ld(1, LongMath::ROUND_DOWN)
4842
+ z = x.divide_s(y, 1, ROUND_DOWN)
4843
+ zz = Rational(224, 500).to_ld(1, ROUND_DOWN)
3202
4844
  assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
3203
4845
  assert_equal(zz, z, "z=#{z.inspect}")
3204
- z = x.divide_s(y, 1, LongMath::ROUND_UP)
3205
- zz = Rational(224, 500).to_ld(1, LongMath::ROUND_UP)
4846
+ z = x.divide_s(y, 1, ROUND_UP)
4847
+ zz = Rational(224, 500).to_ld(1, ROUND_UP)
3206
4848
  assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
3207
4849
  assert_equal(zz, z, "z=#{z.inspect}")
3208
- z = y.divide_s(x, 1, LongMath::ROUND_DOWN)
3209
- zz = Rational(500, 224).to_ld(1, LongMath::ROUND_DOWN)
4850
+ z = y.divide_s(x, 1, ROUND_DOWN)
4851
+ zz = Rational(500, 224).to_ld(1, ROUND_DOWN)
3210
4852
  assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
3211
4853
  assert_equal(zz, z, "z=#{z.inspect}")
3212
- z = y.divide_s(x, 1, LongMath::ROUND_UP)
3213
- zz = Rational(500, 224).to_ld(1, LongMath::ROUND_UP)
4854
+ z = y.divide_s(x, 1, ROUND_UP)
4855
+ zz = Rational(500, 224).to_ld(1, ROUND_UP)
3214
4856
  assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
3215
4857
  assert_equal(zz, z, "z=#{z.inspect}")
3216
4858
 
3217
4859
  y = Rational(5, 3).to_ld(3) # 1.667
3218
- z = x.divide_s(y, 4, LongMath::ROUND_DOWN)
3219
- zz = Rational(2240, 1667).to_ld(4, LongMath::ROUND_DOWN)
4860
+ z = x.divide_s(y, 4, ROUND_DOWN)
4861
+ zz = Rational(2240, 1667).to_ld(4, ROUND_DOWN)
3220
4862
  assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
3221
4863
  assert_equal(zz, z, "x=#{x} y=#{y} z=#{z} z=#{z.inspect}")
3222
- z = x.divide_s(y, 1, LongMath::ROUND_UP)
3223
- zz = Rational(2240, 1667).to_ld(1, LongMath::ROUND_UP)
4864
+ z = x.divide_s(y, 1, ROUND_UP)
4865
+ zz = Rational(2240, 1667).to_ld(1, ROUND_UP)
3224
4866
  assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
3225
4867
  assert_equal(zz, z, "z=#{z.inspect}")
3226
4868
  # y is has no scale, use scale of x
3227
- z = y.divide_s(x, 1, LongMath::ROUND_DOWN)
3228
- zz = Rational(1667, 2240).to_ld(1, LongMath::ROUND_DOWN)
4869
+ z = y.divide_s(x, 1, ROUND_DOWN)
4870
+ zz = Rational(1667, 2240).to_ld(1, ROUND_DOWN)
3229
4871
  assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
3230
4872
  assert_equal(zz, z, "z=#{z.inspect}")
3231
- z = y.divide_s(x, 1, LongMath::ROUND_UP)
3232
- zz = Rational(1667, 2240).to_ld(1, LongMath::ROUND_UP)
4873
+ z = y.divide_s(x, 1, ROUND_UP)
4874
+ zz = Rational(1667, 2240).to_ld(1, ROUND_UP)
3233
4875
  assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
3234
4876
  assert_equal(zz, z, "z=#{z.inspect}")
3235
4877
 
3236
4878
  y = LongDecimalQuot(Rational(5, 3), 3).to_ld
3237
- z = x.divide_s(y, 1, LongMath::ROUND_DOWN)
3238
- zz = Rational(2240, 1667).to_ld(1, LongMath::ROUND_DOWN)
4879
+ z = x.divide_s(y, 1, ROUND_DOWN)
4880
+ zz = Rational(2240, 1667).to_ld(1, ROUND_DOWN)
3239
4881
  assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
3240
4882
  assert_equal(zz, z, "z=#{z.inspect}")
3241
- z = x.divide_s(y, 1, LongMath::ROUND_UP)
3242
- zz = Rational(2240, 1667).to_ld(1, LongMath::ROUND_UP)
4883
+ z = x.divide_s(y, 1, ROUND_UP)
4884
+ zz = Rational(2240, 1667).to_ld(1, ROUND_UP)
3243
4885
  assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
3244
4886
  assert_equal(zz, z, "z=#{z.inspect}")
3245
- z = y.divide_s(x, 2, LongMath::ROUND_DOWN)
3246
- zz = Rational(1667, 2240).to_ld(2, LongMath::ROUND_DOWN)
4887
+ z = y.divide_s(x, 2, ROUND_DOWN)
4888
+ zz = Rational(1667, 2240).to_ld(2, ROUND_DOWN)
3247
4889
  assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
3248
4890
  assert_equal(zz, z, "z=#{z.inspect}")
3249
- z = y.divide_s(x, 224, LongMath::ROUND_UP)
3250
- zz = Rational(1667, 2240).to_ld(224, LongMath::ROUND_UP)
4891
+ z = y.divide_s(x, 224, ROUND_UP)
4892
+ zz = Rational(1667, 2240).to_ld(224, ROUND_UP)
3251
4893
  assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
3252
4894
  assert_equal(zz, z, "z=#{z.inspect}")
3253
4895
  end
@@ -3260,7 +4902,7 @@ class TestLongDecimal_class < Test::Unit::TestCase # RUNIT::TestCase
3260
4902
  x = LongDecimal(224, 2) # 2.24
3261
4903
 
3262
4904
  y = Complex(5, 3)
3263
- z = x.divide_s(y, 2, LongMath::ROUND_DOWN)
4905
+ z = x.divide_s(y, 2, ROUND_DOWN)
3264
4906
  zz = 2.24 / Complex(5, 3)
3265
4907
  assert_kind_of(Complex, z, "z=#{z.inspect}")
3266
4908
  assert((zz-z).abs < 1e-9, "z=#{z.inspect}")
@@ -3848,79 +5490,79 @@ class TestLongDecimal_class < Test::Unit::TestCase # RUNIT::TestCase
3848
5490
  def test_sqrt
3849
5491
  print "\ntest_sqrt [#{Time.now}]: "
3850
5492
  x = LongDecimal.zero!(101)
3851
- y = check_sqrt(x, 120, LongDecimal::ROUND_UNNECESSARY, 0, 0, "zero")
5493
+ y = check_sqrt(x, 120, ROUND_UNNECESSARY, 0, 0, "zero")
3852
5494
  assert(y.zero?, "sqrt(0)")
3853
5495
 
3854
5496
  x = LongDecimal.one!(101)
3855
- y = check_sqrt(x, 120, LongDecimal::ROUND_UNNECESSARY, 0, 0, "one")
5497
+ y = check_sqrt(x, 120, ROUND_UNNECESSARY, 0, 0, "one")
3856
5498
  assert(y.one?, "sqrt(1)")
3857
5499
 
3858
5500
  x = LongDecimal.two!(101)
3859
- y0 = check_sqrt(x, 120, LongDecimal::ROUND_DOWN, 0, 1, "two")
5501
+ y0 = check_sqrt(x, 120, ROUND_DOWN, 0, 1, "two")
3860
5502
  assert(y0.square < x, "y0*y0")
3861
5503
  assert(y0.succ.square > x, "(y0.succ).square")
3862
- y1 = check_sqrt(x, 120, LongDecimal::ROUND_HALF_EVEN, -1, 1, "two")
3863
- y2 = check_sqrt(x, 120, LongDecimal::ROUND_UP, -1, 0, "two")
5504
+ y1 = check_sqrt(x, 120, ROUND_HALF_EVEN, -1, 1, "two")
5505
+ y2 = check_sqrt(x, 120, ROUND_UP, -1, 0, "two")
3864
5506
  assert(y2.pred.square < x, "y2.pred.square")
3865
5507
  assert(y2.square > x, "y2*y2")
3866
5508
  assert(y0 <= y1, "y0 y1")
3867
5509
  assert(y1 <= y2, "y1 y2")
3868
5510
 
3869
- y0 = check_sqrt(x, 140, LongDecimal::ROUND_DOWN, 0, 1, "two")
5511
+ y0 = check_sqrt(x, 140, ROUND_DOWN, 0, 1, "two")
3870
5512
  assert(y0.square < x, "y0*y0")
3871
5513
  assert(y0.succ.square > x, "(y0.succ).square")
3872
- y1 = check_sqrt(x, 140, LongDecimal::ROUND_HALF_EVEN, -1, 1, "two")
3873
- y2 = check_sqrt(x, 140, LongDecimal::ROUND_UP, -1, 0, "two")
5514
+ y1 = check_sqrt(x, 140, ROUND_HALF_EVEN, -1, 1, "two")
5515
+ y2 = check_sqrt(x, 140, ROUND_UP, -1, 0, "two")
3874
5516
  assert(y2.pred.square < x, "y2.pred.square")
3875
5517
  assert(y2.square > x, "y2*y2")
3876
5518
  assert(y0 <= y1, "y0 y1")
3877
5519
  assert(y1 <= y2, "y1 y2")
3878
5520
 
3879
- y0 = check_sqrt(x, 160, LongDecimal::ROUND_DOWN, 0, 1, "two")
5521
+ y0 = check_sqrt(x, 160, ROUND_DOWN, 0, 1, "two")
3880
5522
  assert(y0.square < x, "y0*y0")
3881
5523
  assert(y0.succ.square > x, "(y0.succ).square")
3882
- y1 = check_sqrt(x, 160, LongDecimal::ROUND_HALF_EVEN, -1, 1, "two")
3883
- y2 = check_sqrt(x, 160, LongDecimal::ROUND_UP, -1, 0, "two")
5524
+ y1 = check_sqrt(x, 160, ROUND_HALF_EVEN, -1, 1, "two")
5525
+ y2 = check_sqrt(x, 160, ROUND_UP, -1, 0, "two")
3884
5526
  assert(y2.pred.square < x, "y2.pred.square")
3885
5527
  assert(y2.square > x, "y2*y2")
3886
5528
  assert(y0 <= y1, "y0 y1")
3887
5529
  assert(y1 <= y2, "y1 y2")
3888
5530
 
3889
- y0 = check_sqrt(x, 120, LongDecimal::ROUND_DOWN, 0, 1, "two")
5531
+ y0 = check_sqrt(x, 120, ROUND_DOWN, 0, 1, "two")
3890
5532
  assert(y0.square < x, "y0*y0")
3891
5533
  assert(y0.succ.square > x, "(y0.succ).square")
3892
- y1 = check_sqrt(x, 120, LongDecimal::ROUND_HALF_EVEN, -1, 1, "two")
3893
- y2 = check_sqrt(x, 120, LongDecimal::ROUND_UP, -1, 0, "two")
5534
+ y1 = check_sqrt(x, 120, ROUND_HALF_EVEN, -1, 1, "two")
5535
+ y2 = check_sqrt(x, 120, ROUND_UP, -1, 0, "two")
3894
5536
  assert(y2.pred.square < x, "y2.pred.square")
3895
5537
  assert(y2.square > x, "y2*y2")
3896
5538
  assert(y0 <= y1, "y0 y1")
3897
5539
  assert(y1 <= y2, "y1 y2")
3898
5540
 
3899
- y0 = check_sqrt(x, 100, LongDecimal::ROUND_DOWN, 0, 1, "two")
5541
+ y0 = check_sqrt(x, 100, ROUND_DOWN, 0, 1, "two")
3900
5542
  assert(y0.square < x, "y0*y0")
3901
5543
  assert(y0.succ.square > x, "(y0.succ).square")
3902
- y1 = check_sqrt(x, 100, LongDecimal::ROUND_HALF_EVEN, -1, 1, "two")
3903
- y2 = check_sqrt(x, 100, LongDecimal::ROUND_UP, -1, 0, "two")
5544
+ y1 = check_sqrt(x, 100, ROUND_HALF_EVEN, -1, 1, "two")
5545
+ y2 = check_sqrt(x, 100, ROUND_UP, -1, 0, "two")
3904
5546
  assert(y2.pred.square < x, "y2.pred.square")
3905
5547
  assert(y2.square > x, "y2*y2")
3906
5548
  assert(y0 <= y1, "y0 y1")
3907
5549
  assert(y1 <= y2, "y1 y2")
3908
5550
 
3909
5551
  x = 3.to_ld
3910
- y0 = check_sqrt(x, 120, LongDecimal::ROUND_DOWN, 0, 1, "three")
5552
+ y0 = check_sqrt(x, 120, ROUND_DOWN, 0, 1, "three")
3911
5553
  assert(y0.square < x, "y0*y0")
3912
5554
  assert(y0.succ.square > x, "(y0.succ).square")
3913
- y1 = check_sqrt(x, 120, LongDecimal::ROUND_HALF_EVEN, -1, 1, "three")
3914
- y2 = check_sqrt(x, 120, LongDecimal::ROUND_UP, -1, 0, "three")
5555
+ y1 = check_sqrt(x, 120, ROUND_HALF_EVEN, -1, 1, "three")
5556
+ y2 = check_sqrt(x, 120, ROUND_UP, -1, 0, "three")
3915
5557
  assert(y2.pred.square < x, "y2.pred.square")
3916
5558
  assert(y2.square > x, "y2*y2")
3917
5559
  assert(y0 <= y1, "y0 y1")
3918
5560
  assert(y1 <= y2, "y1 y2")
3919
5561
 
3920
5562
  x = 4.to_ld(101)
3921
- y0 = check_sqrt(x, 120, LongDecimal::ROUND_DOWN, 0, 0, "four")
3922
- y1 = check_sqrt(x, 120, LongDecimal::ROUND_HALF_EVEN, 0, 0, "four")
3923
- y2 = check_sqrt(x, 120, LongDecimal::ROUND_UP, 0, 0, "four")
5563
+ y0 = check_sqrt(x, 120, ROUND_DOWN, 0, 0, "four")
5564
+ y1 = check_sqrt(x, 120, ROUND_HALF_EVEN, 0, 0, "four")
5565
+ y2 = check_sqrt(x, 120, ROUND_UP, 0, 0, "four")
3924
5566
  assert_equal(y0, y1, "y0 y1")
3925
5567
  assert_equal(y1, y2, "y1 y2")
3926
5568
  end
@@ -3964,21 +5606,21 @@ class TestLongDecimal_class < Test::Unit::TestCase # RUNIT::TestCase
3964
5606
  def test_non_ld_sqrt
3965
5607
  print "\ntest_non_ld_sqrt [#{Time.now}]: "
3966
5608
  xi = 77
3967
- yi = LongMath.sqrt(xi, 31, LongMath::ROUND_HALF_EVEN)
3968
- zi = yi.square.round_to_scale(30, LongMath::ROUND_HALF_EVEN)
5609
+ yi = LongMath.sqrt(xi, 31, ROUND_HALF_EVEN)
5610
+ zi = yi.square.round_to_scale(30, ROUND_HALF_EVEN)
3969
5611
  assert(zi.is_int?, "zi=#{zi.to_s}")
3970
5612
  assert_equal(xi, zi.to_i, "zi")
3971
5613
 
3972
5614
  xf = 77.0
3973
- yf = LongMath.sqrt(xf, 31, LongMath::ROUND_HALF_EVEN)
3974
- zf = yf.square.round_to_scale(30, LongMath::ROUND_HALF_EVEN)
5615
+ yf = LongMath.sqrt(xf, 31, ROUND_HALF_EVEN)
5616
+ zf = yf.square.round_to_scale(30, ROUND_HALF_EVEN)
3975
5617
  assert(zf.is_int?, "zf")
3976
5618
  assert_equal(xf, zf.to_f, "zf")
3977
5619
  assert_equal(yi, yf, "i-f")
3978
5620
 
3979
5621
  xr = Rational(224, 227)
3980
- yr = LongMath.sqrt(xr, 31, LongMath::ROUND_HALF_EVEN)
3981
- zr = yr.square.round_to_scale(30, LongMath::ROUND_HALF_EVEN)
5622
+ yr = LongMath.sqrt(xr, 31, ROUND_HALF_EVEN)
5623
+ zr = yr.square.round_to_scale(30, ROUND_HALF_EVEN)
3982
5624
  assert((zr-xr).abs <= zr.unit, "zr-xr")
3983
5625
  end
3984
5626
 
@@ -3988,79 +5630,79 @@ class TestLongDecimal_class < Test::Unit::TestCase # RUNIT::TestCase
3988
5630
  def test_cbrt
3989
5631
  print "\ntest_cbrt [#{Time.now}]: "
3990
5632
  x = LongDecimal.zero!(101)
3991
- y = check_cbrt(x, 120, LongDecimal::ROUND_UNNECESSARY, 0, 0, "zero")
5633
+ y = check_cbrt(x, 120, ROUND_UNNECESSARY, 0, 0, "zero")
3992
5634
  assert(y.zero?, "cbrt(0)")
3993
5635
 
3994
5636
  x = LongDecimal.one!(101)
3995
- y = check_cbrt(x, 120, LongDecimal::ROUND_UNNECESSARY, 0, 0, "one")
5637
+ y = check_cbrt(x, 120, ROUND_UNNECESSARY, 0, 0, "one")
3996
5638
  assert(y.one?, "cbrt(1)")
3997
5639
 
3998
5640
  x = LongDecimal.two!(101)
3999
- y0 = check_cbrt(x, 120, LongDecimal::ROUND_DOWN, 0, 1, "two")
5641
+ y0 = check_cbrt(x, 120, ROUND_DOWN, 0, 1, "two")
4000
5642
  assert(y0.cube < x, "y0**3")
4001
5643
  assert(y0.succ.cube > x, "(y0.succ).cube")
4002
- y1 = check_cbrt(x, 120, LongDecimal::ROUND_HALF_EVEN, -1, 1, "two")
4003
- y2 = check_cbrt(x, 120, LongDecimal::ROUND_UP, -1, 0, "two")
5644
+ y1 = check_cbrt(x, 120, ROUND_HALF_EVEN, -1, 1, "two")
5645
+ y2 = check_cbrt(x, 120, ROUND_UP, -1, 0, "two")
4004
5646
  assert(y2.pred.cube < x, "y2.pred.cube")
4005
5647
  assert(y2.cube > x, "y2**3")
4006
5648
  assert(y0 <= y1, "y0 y1")
4007
5649
  assert(y1 <= y2, "y1 y2")
4008
5650
 
4009
- y0 = check_cbrt(x, 140, LongDecimal::ROUND_DOWN, 0, 1, "two")
5651
+ y0 = check_cbrt(x, 140, ROUND_DOWN, 0, 1, "two")
4010
5652
  assert(y0.cube < x, "y0**3")
4011
5653
  assert(y0.succ.cube > x, "(y0.succ).cube")
4012
- y1 = check_cbrt(x, 140, LongDecimal::ROUND_HALF_EVEN, -1, 1, "two")
4013
- y2 = check_cbrt(x, 140, LongDecimal::ROUND_UP, -1, 0, "two")
5654
+ y1 = check_cbrt(x, 140, ROUND_HALF_EVEN, -1, 1, "two")
5655
+ y2 = check_cbrt(x, 140, ROUND_UP, -1, 0, "two")
4014
5656
  assert(y2.pred.cube < x, "y2.pred.cube")
4015
5657
  assert(y2.cube > x, "y2**3")
4016
5658
  assert(y0 <= y1, "y0 y1")
4017
5659
  assert(y1 <= y2, "y1 y2")
4018
5660
 
4019
- y0 = check_cbrt(x, 160, LongDecimal::ROUND_DOWN, 0, 1, "two")
5661
+ y0 = check_cbrt(x, 160, ROUND_DOWN, 0, 1, "two")
4020
5662
  assert(y0.cube < x, "y0**3")
4021
5663
  assert(y0.succ.cube > x, "(y0.succ).cube")
4022
- y1 = check_cbrt(x, 160, LongDecimal::ROUND_HALF_EVEN, -1, 1, "two")
4023
- y2 = check_cbrt(x, 160, LongDecimal::ROUND_UP, -1, 0, "two")
5664
+ y1 = check_cbrt(x, 160, ROUND_HALF_EVEN, -1, 1, "two")
5665
+ y2 = check_cbrt(x, 160, ROUND_UP, -1, 0, "two")
4024
5666
  assert(y2.pred.cube < x, "y2.pred.cube")
4025
5667
  assert(y2.cube > x, "y2**3")
4026
5668
  assert(y0 <= y1, "y0 y1")
4027
5669
  assert(y1 <= y2, "y1 y2")
4028
5670
 
4029
- y0 = check_cbrt(x, 120, LongDecimal::ROUND_DOWN, 0, 1, "two")
5671
+ y0 = check_cbrt(x, 120, ROUND_DOWN, 0, 1, "two")
4030
5672
  assert(y0.cube < x, "y0**3")
4031
5673
  assert(y0.succ.cube > x, "(y0.succ).cube")
4032
- y1 = check_cbrt(x, 120, LongDecimal::ROUND_HALF_EVEN, -1, 1, "two")
4033
- y2 = check_cbrt(x, 120, LongDecimal::ROUND_UP, -1, 0, "two")
5674
+ y1 = check_cbrt(x, 120, ROUND_HALF_EVEN, -1, 1, "two")
5675
+ y2 = check_cbrt(x, 120, ROUND_UP, -1, 0, "two")
4034
5676
  assert(y2.pred.cube < x, "y2.pred.cube")
4035
5677
  assert(y2.cube > x, "y2**3")
4036
5678
  assert(y0 <= y1, "y0 y1")
4037
5679
  assert(y1 <= y2, "y1 y2")
4038
5680
 
4039
- y0 = check_cbrt(x, 100, LongDecimal::ROUND_DOWN, 0, 1, "two")
5681
+ y0 = check_cbrt(x, 100, ROUND_DOWN, 0, 1, "two")
4040
5682
  assert(y0.cube < x, "y0**3")
4041
5683
  assert(y0.succ.cube > x, "(y0.succ).cube")
4042
- y1 = check_cbrt(x, 100, LongDecimal::ROUND_HALF_EVEN, -1, 1, "two")
4043
- y2 = check_cbrt(x, 100, LongDecimal::ROUND_UP, -1, 0, "two")
5684
+ y1 = check_cbrt(x, 100, ROUND_HALF_EVEN, -1, 1, "two")
5685
+ y2 = check_cbrt(x, 100, ROUND_UP, -1, 0, "two")
4044
5686
  assert(y2.pred.cube < x, "y2.pred.cube")
4045
5687
  assert(y2.cube > x, "y2**3")
4046
5688
  assert(y0 <= y1, "y0 y1")
4047
5689
  assert(y1 <= y2, "y1 y2")
4048
5690
 
4049
5691
  x = 3.to_ld
4050
- y0 = check_cbrt(x, 120, LongDecimal::ROUND_DOWN, 0, 1, "three")
5692
+ y0 = check_cbrt(x, 120, ROUND_DOWN, 0, 1, "three")
4051
5693
  assert(y0.cube < x, "y0**3")
4052
5694
  assert(y0.succ.cube > x, "(y0.succ).cube")
4053
- y1 = check_cbrt(x, 120, LongDecimal::ROUND_HALF_EVEN, -1, 1, "three")
4054
- y2 = check_cbrt(x, 120, LongDecimal::ROUND_UP, -1, 0, "three")
5695
+ y1 = check_cbrt(x, 120, ROUND_HALF_EVEN, -1, 1, "three")
5696
+ y2 = check_cbrt(x, 120, ROUND_UP, -1, 0, "three")
4055
5697
  assert(y2.pred.cube < x, "y2.pred.cube")
4056
5698
  assert(y2.cube > x, "y2**3")
4057
5699
  assert(y0 <= y1, "y0 y1")
4058
5700
  assert(y1 <= y2, "y1 y2")
4059
5701
 
4060
5702
  x = 8.to_ld(101)
4061
- y0 = check_cbrt(x, 120, LongDecimal::ROUND_DOWN, 0, 0, "eight")
4062
- y1 = check_cbrt(x, 120, LongDecimal::ROUND_HALF_EVEN, 0, 0, "eight")
4063
- y2 = check_cbrt(x, 120, LongDecimal::ROUND_UP, 0, 0, "eight")
5703
+ y0 = check_cbrt(x, 120, ROUND_DOWN, 0, 0, "eight")
5704
+ y1 = check_cbrt(x, 120, ROUND_HALF_EVEN, 0, 0, "eight")
5705
+ y2 = check_cbrt(x, 120, ROUND_UP, 0, 0, "eight")
4064
5706
  assert_equal(y0, y1, "y0 y1")
4065
5707
  assert_equal(y1, y2, "y1 y2")
4066
5708
  end
@@ -4104,21 +5746,21 @@ class TestLongDecimal_class < Test::Unit::TestCase # RUNIT::TestCase
4104
5746
  def test_non_ld_cbrt
4105
5747
  print "\ntest_non_ld_cbrt [#{Time.now}]: "
4106
5748
  xi = 77
4107
- yi = LongMath.cbrt(xi, 32, LongMath::ROUND_HALF_EVEN)
4108
- zi = yi.cube.round_to_scale(30, LongMath::ROUND_HALF_EVEN)
5749
+ yi = LongMath.cbrt(xi, 32, ROUND_HALF_EVEN)
5750
+ zi = yi.cube.round_to_scale(30, ROUND_HALF_EVEN)
4109
5751
  assert(zi.is_int?, "zi=#{zi.to_s}")
4110
5752
  assert_equal(xi, zi.to_i, "zi")
4111
5753
 
4112
5754
  xf = 77.0
4113
- yf = LongMath.cbrt(xf, 32, LongMath::ROUND_HALF_EVEN)
4114
- zf = yf.cube.round_to_scale(30, LongMath::ROUND_HALF_EVEN)
5755
+ yf = LongMath.cbrt(xf, 32, ROUND_HALF_EVEN)
5756
+ zf = yf.cube.round_to_scale(30, ROUND_HALF_EVEN)
4115
5757
  assert(zf.is_int?, "zf")
4116
5758
  assert_equal(xf, zf.to_f, "zf")
4117
5759
  assert_equal(yi, yf, "i-f")
4118
5760
 
4119
5761
  xr = Rational(224, 227)
4120
- yr = LongMath.cbrt(xr, 32, LongMath::ROUND_HALF_EVEN)
4121
- zr = yr.cube.round_to_scale(30, LongMath::ROUND_HALF_EVEN)
5762
+ yr = LongMath.cbrt(xr, 32, ROUND_HALF_EVEN)
5763
+ zr = yr.cube.round_to_scale(30, ROUND_HALF_EVEN)
4122
5764
  assert((zr-xr).abs <= zr.unit, "zr-xr")
4123
5765
  end
4124
5766
 
@@ -4461,31 +6103,31 @@ class TestLongDecimal_class < Test::Unit::TestCase # RUNIT::TestCase
4461
6103
  # 0.99555555555555...
4462
6104
  l = LongDecimalQuot(Rational(224, 225), 0)
4463
6105
  # 1.0
4464
- r = l.round_to_scale(1, LongDecimal::ROUND_UP)
6106
+ r = l.round_to_scale(1, ROUND_UP)
4465
6107
  assert_equal("1.0", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
4466
6108
  assert_kind_of(LongDecimal, r, "must be LongDecimal")
4467
6109
  assert_equal("224/225[0]", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
4468
6110
  l = LongDecimalQuot(-Rational(224, 225), 0)
4469
- r = l.round_to_scale(1, LongDecimal::ROUND_UP)
6111
+ r = l.round_to_scale(1, ROUND_UP)
4470
6112
  assert_equal("-1.0", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
4471
6113
  assert_kind_of(LongDecimal, r, "must be LongDecimal")
4472
6114
  assert_equal("-224/225[0]", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
4473
6115
  # 0.00444444444444444
4474
6116
  l = LongDecimalQuot(Rational(1, 225), 0)
4475
- r = l.round_to_scale(1, LongDecimal::ROUND_UP)
6117
+ r = l.round_to_scale(1, ROUND_UP)
4476
6118
  assert_equal("0.1", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
4477
6119
  assert_kind_of(LongDecimal, r, "must be LongDecimal")
4478
6120
  assert_equal("1/225[0]", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
4479
6121
  l = LongDecimalQuot(Rational(-1, 225), 0)
4480
- r = l.round_to_scale(1, LongDecimal::ROUND_UP)
6122
+ r = l.round_to_scale(1, ROUND_UP)
4481
6123
  assert_equal("-0.1", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
4482
6124
  assert_kind_of(LongDecimal, r, "must be LongDecimal")
4483
6125
  assert_equal("-1/225[0]", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
4484
6126
  l = LongDecimalQuot(Rational(1, 1), 1000)
4485
- r = l.round_to_scale(4, LongDecimal::ROUND_UP)
6127
+ r = l.round_to_scale(4, ROUND_UP)
4486
6128
  assert_equal("1.0000", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
4487
6129
  l = LongDecimalQuot(Rational(1, 1), 1)
4488
- r = l.round_to_scale(4, LongDecimal::ROUND_UP)
6130
+ r = l.round_to_scale(4, ROUND_UP)
4489
6131
  assert_equal("1.0000", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
4490
6132
  end
4491
6133
 
@@ -4498,31 +6140,31 @@ class TestLongDecimal_class < Test::Unit::TestCase # RUNIT::TestCase
4498
6140
  # 0.99555555555555...
4499
6141
  l = LongDecimalQuot(Rational(224, 225), 0)
4500
6142
  # 0.9
4501
- r = l.round_to_scale(1, LongDecimal::ROUND_DOWN)
6143
+ r = l.round_to_scale(1, ROUND_DOWN)
4502
6144
  assert_equal("0.9", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
4503
6145
  assert_kind_of(LongDecimal, r, "must be LongDecimal")
4504
6146
  assert_equal("224/225[0]", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
4505
6147
  l = LongDecimalQuot(-Rational(224, 225), 0)
4506
- r = l.round_to_scale(1, LongDecimal::ROUND_DOWN)
6148
+ r = l.round_to_scale(1, ROUND_DOWN)
4507
6149
  assert_equal("-0.9", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
4508
6150
  assert_kind_of(LongDecimal, r, "must be LongDecimal")
4509
6151
  assert_equal("-224/225[0]", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
4510
6152
  # 0.00444444444444444
4511
6153
  l = LongDecimalQuot(Rational(1, 225), 0)
4512
- r = l.round_to_scale(1, LongDecimal::ROUND_DOWN)
6154
+ r = l.round_to_scale(1, ROUND_DOWN)
4513
6155
  assert_equal("0.0", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
4514
6156
  assert_kind_of(LongDecimal, r, "must be LongDecimal")
4515
6157
  assert_equal("1/225[0]", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
4516
6158
  l = LongDecimalQuot(Rational(-1, 225), 0)
4517
- r = l.round_to_scale(1, LongDecimal::ROUND_DOWN)
6159
+ r = l.round_to_scale(1, ROUND_DOWN)
4518
6160
  assert_equal("0.0", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
4519
6161
  assert_kind_of(LongDecimal, r, "must be LongDecimal")
4520
6162
  assert_equal("-1/225[0]", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
4521
6163
  l = LongDecimalQuot(Rational(1, 1), 1000)
4522
- r = l.round_to_scale(4, LongDecimal::ROUND_DOWN)
6164
+ r = l.round_to_scale(4, ROUND_DOWN)
4523
6165
  assert_equal("1.0000", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
4524
6166
  l = LongDecimalQuot(Rational(1, 1), 1)
4525
- r = l.round_to_scale(4, LongDecimal::ROUND_DOWN)
6167
+ r = l.round_to_scale(4, ROUND_DOWN)
4526
6168
  assert_equal("1.0000", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
4527
6169
  end
4528
6170
 
@@ -4534,31 +6176,31 @@ class TestLongDecimal_class < Test::Unit::TestCase # RUNIT::TestCase
4534
6176
 
4535
6177
  # 0.99555555555555...
4536
6178
  l = LongDecimalQuot(Rational(224, 225), 0)
4537
- r = l.round_to_scale(1, LongDecimal::ROUND_CEILING)
6179
+ r = l.round_to_scale(1, ROUND_CEILING)
4538
6180
  assert_equal("1.0", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
4539
6181
  assert_kind_of(LongDecimal, r, "must be LongDecimal")
4540
6182
  assert_equal("224/225[0]", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
4541
6183
  l = LongDecimalQuot(-Rational(224, 225), 0)
4542
- r = l.round_to_scale(1, LongDecimal::ROUND_CEILING)
6184
+ r = l.round_to_scale(1, ROUND_CEILING)
4543
6185
  assert_equal("-0.9", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
4544
6186
  assert_kind_of(LongDecimal, r, "must be LongDecimal")
4545
6187
  assert_equal("-224/225[0]", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
4546
6188
  # 0.00444444444444444
4547
6189
  l = LongDecimalQuot(Rational(1, 225), 0)
4548
- r = l.round_to_scale(1, LongDecimal::ROUND_CEILING)
6190
+ r = l.round_to_scale(1, ROUND_CEILING)
4549
6191
  assert_equal("0.1", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
4550
6192
  assert_kind_of(LongDecimal, r, "must be LongDecimal")
4551
6193
  assert_equal("1/225[0]", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
4552
6194
  l = LongDecimalQuot(Rational(-1, 225), 0)
4553
- r = l.round_to_scale(1, LongDecimal::ROUND_CEILING)
6195
+ r = l.round_to_scale(1, ROUND_CEILING)
4554
6196
  assert_equal("0.0", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
4555
6197
  assert_kind_of(LongDecimal, r, "must be LongDecimal")
4556
6198
  assert_equal("-1/225[0]", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
4557
6199
  l = LongDecimalQuot(Rational(1, 1), 1000)
4558
- r = l.round_to_scale(4, LongDecimal::ROUND_CEILING)
6200
+ r = l.round_to_scale(4, ROUND_CEILING)
4559
6201
  assert_equal("1.0000", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
4560
6202
  l = LongDecimalQuot(Rational(1, 1), 1)
4561
- r = l.round_to_scale(4, LongDecimal::ROUND_CEILING)
6203
+ r = l.round_to_scale(4, ROUND_CEILING)
4562
6204
  assert_equal("1.0000", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
4563
6205
  end
4564
6206
 
@@ -4570,31 +6212,31 @@ class TestLongDecimal_class < Test::Unit::TestCase # RUNIT::TestCase
4570
6212
 
4571
6213
  # 0.99555555555555...
4572
6214
  l = LongDecimalQuot(Rational(224, 225), 0)
4573
- r = l.round_to_scale(1, LongDecimal::ROUND_FLOOR)
6215
+ r = l.round_to_scale(1, ROUND_FLOOR)
4574
6216
  assert_equal("0.9", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
4575
6217
  assert_kind_of(LongDecimal, r, "must be LongDecimal")
4576
6218
  assert_equal("224/225[0]", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
4577
6219
  l = LongDecimalQuot(-Rational(224, 225), 0)
4578
- r = l.round_to_scale(1, LongDecimal::ROUND_FLOOR)
6220
+ r = l.round_to_scale(1, ROUND_FLOOR)
4579
6221
  assert_equal("-1.0", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
4580
6222
  assert_kind_of(LongDecimal, r, "must be LongDecimal")
4581
6223
  assert_equal("-224/225[0]", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
4582
6224
  # 0.00444444444444444
4583
6225
  l = LongDecimalQuot(Rational(1, 225), 0)
4584
- r = l.round_to_scale(1, LongDecimal::ROUND_FLOOR)
6226
+ r = l.round_to_scale(1, ROUND_FLOOR)
4585
6227
  assert_equal("0.0", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
4586
6228
  assert_kind_of(LongDecimal, r, "must be LongDecimal")
4587
6229
  assert_equal("1/225[0]", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
4588
6230
  l = LongDecimalQuot(Rational(-1, 225), 0)
4589
- r = l.round_to_scale(1, LongDecimal::ROUND_FLOOR)
6231
+ r = l.round_to_scale(1, ROUND_FLOOR)
4590
6232
  assert_equal("-0.1", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
4591
6233
  assert_kind_of(LongDecimal, r, "must be LongDecimal")
4592
6234
  assert_equal("-1/225[0]", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
4593
6235
  l = LongDecimalQuot(Rational(1, 1), 1000)
4594
- r = l.round_to_scale(4, LongDecimal::ROUND_FLOOR)
6236
+ r = l.round_to_scale(4, ROUND_FLOOR)
4595
6237
  assert_equal("1.0000", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
4596
6238
  l = LongDecimalQuot(Rational(1, 1), 1)
4597
- r = l.round_to_scale(4, LongDecimal::ROUND_FLOOR)
6239
+ r = l.round_to_scale(4, ROUND_FLOOR)
4598
6240
  assert_equal("1.0000", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
4599
6241
  end
4600
6242
 
@@ -4606,40 +6248,40 @@ class TestLongDecimal_class < Test::Unit::TestCase # RUNIT::TestCase
4606
6248
 
4607
6249
  # 0.99555555555555...
4608
6250
  l = LongDecimalQuot(Rational(224, 225), 0)
4609
- r = l.round_to_scale(1, LongDecimal::ROUND_HALF_UP)
6251
+ r = l.round_to_scale(1, ROUND_HALF_UP)
4610
6252
  assert_equal("1.0", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
4611
6253
  assert_kind_of(LongDecimal, r, "must be LongDecimal")
4612
6254
  assert_equal("224/225[0]", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
4613
6255
  l = LongDecimalQuot(-Rational(224, 225), 0)
4614
- r = l.round_to_scale(1, LongDecimal::ROUND_HALF_UP)
6256
+ r = l.round_to_scale(1, ROUND_HALF_UP)
4615
6257
  assert_equal("-1.0", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
4616
6258
  assert_kind_of(LongDecimal, r, "must be LongDecimal")
4617
6259
  assert_equal("-224/225[0]", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
4618
6260
  # 0.00444444444444444
4619
6261
  l = LongDecimalQuot(Rational(1, 225), 0)
4620
- r = l.round_to_scale(1, LongDecimal::ROUND_HALF_UP)
6262
+ r = l.round_to_scale(1, ROUND_HALF_UP)
4621
6263
  assert_equal("0.0", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
4622
6264
  assert_kind_of(LongDecimal, r, "must be LongDecimal")
4623
6265
  assert_equal("1/225[0]", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
4624
6266
  l = LongDecimalQuot(Rational(-1, 225), 0)
4625
- r = l.round_to_scale(1, LongDecimal::ROUND_HALF_UP)
6267
+ r = l.round_to_scale(1, ROUND_HALF_UP)
4626
6268
  assert_equal("0.0", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
4627
6269
  assert_kind_of(LongDecimal, r, "must be LongDecimal")
4628
6270
  assert_equal("-1/225[0]", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
4629
6271
  l = LongDecimalQuot(Rational(1, 1), 1000)
4630
- r = l.round_to_scale(4, LongDecimal::ROUND_HALF_UP)
6272
+ r = l.round_to_scale(4, ROUND_HALF_UP)
4631
6273
  assert_equal("1.0000", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
4632
6274
  l = LongDecimalQuot(Rational(1, 1), 1)
4633
- r = l.round_to_scale(4, LongDecimal::ROUND_HALF_UP)
6275
+ r = l.round_to_scale(4, ROUND_HALF_UP)
4634
6276
  assert_equal("1.0000", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
4635
6277
  # 56.25
4636
6278
  l = LongDecimalQuot(Rational(225, 4), 0)
4637
- r = l.round_to_scale(1, LongDecimal::ROUND_HALF_UP)
6279
+ r = l.round_to_scale(1, ROUND_HALF_UP)
4638
6280
  assert_equal("56.3", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
4639
6281
  assert_kind_of(LongDecimal, r, "must be LongDecimal")
4640
6282
  assert_equal("225/4[0]", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
4641
6283
  l = LongDecimalQuot(Rational(-225, 4), 0)
4642
- r = l.round_to_scale(1, LongDecimal::ROUND_HALF_UP)
6284
+ r = l.round_to_scale(1, ROUND_HALF_UP)
4643
6285
  assert_equal("-56.3", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
4644
6286
  assert_kind_of(LongDecimal, r, "must be LongDecimal")
4645
6287
  assert_equal("-225/4[0]", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
@@ -4653,40 +6295,40 @@ class TestLongDecimal_class < Test::Unit::TestCase # RUNIT::TestCase
4653
6295
 
4654
6296
  # 0.99555555555555...
4655
6297
  l = LongDecimalQuot(Rational(224, 225), 0)
4656
- r = l.round_to_scale(1, LongDecimal::ROUND_HALF_DOWN)
6298
+ r = l.round_to_scale(1, ROUND_HALF_DOWN)
4657
6299
  assert_equal("1.0", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
4658
6300
  assert_kind_of(LongDecimal, r, "must be LongDecimal")
4659
6301
  assert_equal("224/225[0]", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
4660
6302
  l = LongDecimalQuot(-Rational(224, 225), 0)
4661
- r = l.round_to_scale(1, LongDecimal::ROUND_HALF_DOWN)
6303
+ r = l.round_to_scale(1, ROUND_HALF_DOWN)
4662
6304
  assert_equal("-1.0", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
4663
6305
  assert_kind_of(LongDecimal, r, "must be LongDecimal")
4664
6306
  assert_equal("-224/225[0]", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
4665
6307
  # 0.00444444444444444
4666
6308
  l = LongDecimalQuot(Rational(1, 225), 0)
4667
- r = l.round_to_scale(1, LongDecimal::ROUND_HALF_DOWN)
6309
+ r = l.round_to_scale(1, ROUND_HALF_DOWN)
4668
6310
  assert_equal("0.0", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
4669
6311
  assert_kind_of(LongDecimal, r, "must be LongDecimal")
4670
6312
  assert_equal("1/225[0]", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
4671
6313
  l = LongDecimalQuot(Rational(-1, 225), 0)
4672
- r = l.round_to_scale(1, LongDecimal::ROUND_HALF_DOWN)
6314
+ r = l.round_to_scale(1, ROUND_HALF_DOWN)
4673
6315
  assert_equal("0.0", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
4674
6316
  assert_kind_of(LongDecimal, r, "must be LongDecimal")
4675
6317
  assert_equal("-1/225[0]", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
4676
6318
  l = LongDecimalQuot(Rational(1, 1), 1000)
4677
- r = l.round_to_scale(4, LongDecimal::ROUND_HALF_DOWN)
6319
+ r = l.round_to_scale(4, ROUND_HALF_DOWN)
4678
6320
  assert_equal("1.0000", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
4679
6321
  l = LongDecimalQuot(Rational(1, 1), 1)
4680
- r = l.round_to_scale(4, LongDecimal::ROUND_HALF_DOWN)
6322
+ r = l.round_to_scale(4, ROUND_HALF_DOWN)
4681
6323
  assert_equal("1.0000", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
4682
6324
  # 56.25
4683
6325
  l = LongDecimalQuot(Rational(225, 4), 0)
4684
- r = l.round_to_scale(1, LongDecimal::ROUND_HALF_DOWN)
6326
+ r = l.round_to_scale(1, ROUND_HALF_DOWN)
4685
6327
  assert_equal("56.2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
4686
6328
  assert_kind_of(LongDecimal, r, "must be LongDecimal")
4687
6329
  assert_equal("225/4[0]", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
4688
6330
  l = LongDecimalQuot(Rational(-225, 4), 0)
4689
- r = l.round_to_scale(1, LongDecimal::ROUND_HALF_DOWN)
6331
+ r = l.round_to_scale(1, ROUND_HALF_DOWN)
4690
6332
  assert_equal("-56.2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
4691
6333
  assert_kind_of(LongDecimal, r, "must be LongDecimal")
4692
6334
  assert_equal("-225/4[0]", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
@@ -4700,40 +6342,40 @@ class TestLongDecimal_class < Test::Unit::TestCase # RUNIT::TestCase
4700
6342
 
4701
6343
  # 0.99555555555555...
4702
6344
  l = LongDecimalQuot(Rational(224, 225), 0)
4703
- r = l.round_to_scale(1, LongDecimal::ROUND_HALF_CEILING)
6345
+ r = l.round_to_scale(1, ROUND_HALF_CEILING)
4704
6346
  assert_equal("1.0", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
4705
6347
  assert_kind_of(LongDecimal, r, "must be LongDecimal")
4706
6348
  assert_equal("224/225[0]", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
4707
6349
  l = LongDecimalQuot(-Rational(224, 225), 0)
4708
- r = l.round_to_scale(1, LongDecimal::ROUND_HALF_CEILING)
6350
+ r = l.round_to_scale(1, ROUND_HALF_CEILING)
4709
6351
  assert_equal("-1.0", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
4710
6352
  assert_kind_of(LongDecimal, r, "must be LongDecimal")
4711
6353
  assert_equal("-224/225[0]", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
4712
6354
  # 0.00444444444444444
4713
6355
  l = LongDecimalQuot(Rational(1, 225), 0)
4714
- r = l.round_to_scale(1, LongDecimal::ROUND_HALF_CEILING)
6356
+ r = l.round_to_scale(1, ROUND_HALF_CEILING)
4715
6357
  assert_equal("0.0", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
4716
6358
  assert_kind_of(LongDecimal, r, "must be LongDecimal")
4717
6359
  assert_equal("1/225[0]", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
4718
6360
  l = LongDecimalQuot(Rational(-1, 225), 0)
4719
- r = l.round_to_scale(1, LongDecimal::ROUND_HALF_CEILING)
6361
+ r = l.round_to_scale(1, ROUND_HALF_CEILING)
4720
6362
  assert_equal("0.0", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
4721
6363
  assert_kind_of(LongDecimal, r, "must be LongDecimal")
4722
6364
  assert_equal("-1/225[0]", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
4723
6365
  l = LongDecimalQuot(Rational(1, 1), 1000)
4724
- r = l.round_to_scale(4, LongDecimal::ROUND_HALF_CEILING)
6366
+ r = l.round_to_scale(4, ROUND_HALF_CEILING)
4725
6367
  assert_equal("1.0000", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
4726
6368
  l = LongDecimalQuot(Rational(1, 1), 1)
4727
- r = l.round_to_scale(4, LongDecimal::ROUND_HALF_CEILING)
6369
+ r = l.round_to_scale(4, ROUND_HALF_CEILING)
4728
6370
  assert_equal("1.0000", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
4729
6371
  # 56.25
4730
6372
  l = LongDecimalQuot(Rational(225, 4), 0)
4731
- r = l.round_to_scale(1, LongDecimal::ROUND_HALF_CEILING)
6373
+ r = l.round_to_scale(1, ROUND_HALF_CEILING)
4732
6374
  assert_equal("56.3", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
4733
6375
  assert_kind_of(LongDecimal, r, "must be LongDecimal")
4734
6376
  assert_equal("225/4[0]", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
4735
6377
  l = LongDecimalQuot(Rational(-225, 4), 0)
4736
- r = l.round_to_scale(1, LongDecimal::ROUND_HALF_CEILING)
6378
+ r = l.round_to_scale(1, ROUND_HALF_CEILING)
4737
6379
  assert_equal("-56.2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
4738
6380
  assert_kind_of(LongDecimal, r, "must be LongDecimal")
4739
6381
  assert_equal("-225/4[0]", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
@@ -4747,40 +6389,40 @@ class TestLongDecimal_class < Test::Unit::TestCase # RUNIT::TestCase
4747
6389
 
4748
6390
  # 0.99555555555555...
4749
6391
  l = LongDecimalQuot(Rational(224, 225), 0)
4750
- r = l.round_to_scale(1, LongDecimal::ROUND_HALF_FLOOR)
6392
+ r = l.round_to_scale(1, ROUND_HALF_FLOOR)
4751
6393
  assert_equal("1.0", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
4752
6394
  assert_kind_of(LongDecimal, r, "must be LongDecimal")
4753
6395
  assert_equal("224/225[0]", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
4754
6396
  l = LongDecimalQuot(-Rational(224, 225), 0)
4755
- r = l.round_to_scale(1, LongDecimal::ROUND_HALF_FLOOR)
6397
+ r = l.round_to_scale(1, ROUND_HALF_FLOOR)
4756
6398
  assert_equal("-1.0", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
4757
6399
  assert_kind_of(LongDecimal, r, "must be LongDecimal")
4758
6400
  assert_equal("-224/225[0]", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
4759
6401
  # 0.00444444444444444
4760
6402
  l = LongDecimalQuot(Rational(1, 225), 0)
4761
- r = l.round_to_scale(1, LongDecimal::ROUND_HALF_FLOOR)
6403
+ r = l.round_to_scale(1, ROUND_HALF_FLOOR)
4762
6404
  assert_equal("0.0", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
4763
6405
  assert_kind_of(LongDecimal, r, "must be LongDecimal")
4764
6406
  assert_equal("1/225[0]", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
4765
6407
  l = LongDecimalQuot(Rational(-1, 225), 0)
4766
- r = l.round_to_scale(1, LongDecimal::ROUND_HALF_FLOOR)
6408
+ r = l.round_to_scale(1, ROUND_HALF_FLOOR)
4767
6409
  assert_equal("0.0", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
4768
6410
  assert_kind_of(LongDecimal, r, "must be LongDecimal")
4769
6411
  assert_equal("-1/225[0]", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
4770
6412
  l = LongDecimalQuot(Rational(1, 1), 1000)
4771
- r = l.round_to_scale(4, LongDecimal::ROUND_HALF_FLOOR)
6413
+ r = l.round_to_scale(4, ROUND_HALF_FLOOR)
4772
6414
  assert_equal("1.0000", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
4773
6415
  l = LongDecimalQuot(Rational(1, 1), 1)
4774
- r = l.round_to_scale(4, LongDecimal::ROUND_HALF_FLOOR)
6416
+ r = l.round_to_scale(4, ROUND_HALF_FLOOR)
4775
6417
  assert_equal("1.0000", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
4776
6418
  # 56.25
4777
6419
  l = LongDecimalQuot(Rational(225, 4), 0)
4778
- r = l.round_to_scale(1, LongDecimal::ROUND_HALF_FLOOR)
6420
+ r = l.round_to_scale(1, ROUND_HALF_FLOOR)
4779
6421
  assert_equal("56.2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
4780
6422
  assert_kind_of(LongDecimal, r, "must be LongDecimal")
4781
6423
  assert_equal("225/4[0]", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
4782
6424
  l = LongDecimalQuot(Rational(-225, 4), 0)
4783
- r = l.round_to_scale(1, LongDecimal::ROUND_HALF_FLOOR)
6425
+ r = l.round_to_scale(1, ROUND_HALF_FLOOR)
4784
6426
  assert_equal("-56.3", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
4785
6427
  assert_kind_of(LongDecimal, r, "must be LongDecimal")
4786
6428
  assert_equal("-225/4[0]", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
@@ -4794,56 +6436,112 @@ class TestLongDecimal_class < Test::Unit::TestCase # RUNIT::TestCase
4794
6436
 
4795
6437
  # 0.99555555555555...
4796
6438
  l = LongDecimalQuot(Rational(224, 225), 0)
4797
- r = l.round_to_scale(1, LongDecimal::ROUND_HALF_EVEN)
6439
+ r = l.round_to_scale(1, ROUND_HALF_EVEN)
4798
6440
  assert_equal("1.0", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
4799
6441
  assert_kind_of(LongDecimal, r, "must be LongDecimal")
4800
6442
  assert_equal("224/225[0]", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
4801
6443
  l = LongDecimalQuot(-Rational(224, 225), 0)
4802
- r = l.round_to_scale(1, LongDecimal::ROUND_HALF_EVEN)
6444
+ r = l.round_to_scale(1, ROUND_HALF_EVEN)
4803
6445
  assert_equal("-1.0", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
4804
6446
  assert_kind_of(LongDecimal, r, "must be LongDecimal")
4805
6447
  assert_equal("-224/225[0]", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
4806
6448
  # 0.00444444444444444
4807
6449
  l = LongDecimalQuot(Rational(1, 225), 0)
4808
- r = l.round_to_scale(1, LongDecimal::ROUND_HALF_EVEN)
6450
+ r = l.round_to_scale(1, ROUND_HALF_EVEN)
4809
6451
  assert_equal("0.0", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
4810
6452
  assert_kind_of(LongDecimal, r, "must be LongDecimal")
4811
6453
  assert_equal("1/225[0]", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
4812
6454
  l = LongDecimalQuot(Rational(-1, 225), 0)
4813
- r = l.round_to_scale(1, LongDecimal::ROUND_HALF_EVEN)
6455
+ r = l.round_to_scale(1, ROUND_HALF_EVEN)
4814
6456
  assert_equal("0.0", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
4815
6457
  assert_kind_of(LongDecimal, r, "must be LongDecimal")
4816
6458
  assert_equal("-1/225[0]", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
4817
6459
  l = LongDecimalQuot(Rational(1, 1), 1000)
4818
- r = l.round_to_scale(4, LongDecimal::ROUND_HALF_EVEN)
6460
+ r = l.round_to_scale(4, ROUND_HALF_EVEN)
4819
6461
  assert_equal("1.0000", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
4820
6462
  l = LongDecimalQuot(Rational(1, 1), 1)
4821
- r = l.round_to_scale(4, LongDecimal::ROUND_HALF_EVEN)
6463
+ r = l.round_to_scale(4, ROUND_HALF_EVEN)
4822
6464
  assert_equal("1.0000", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
4823
6465
  # 56.25
4824
6466
  l = LongDecimalQuot(Rational(225, 4), 0)
4825
- r = l.round_to_scale(1, LongDecimal::ROUND_HALF_EVEN)
6467
+ r = l.round_to_scale(1, ROUND_HALF_EVEN)
4826
6468
  assert_equal("56.2", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
4827
6469
  assert_kind_of(LongDecimal, r, "must be LongDecimal")
4828
6470
  assert_equal("225/4[0]", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
4829
6471
  # 56.75
4830
6472
  l = LongDecimalQuot(Rational(227, 4), 0)
4831
- r = l.round_to_scale(1, LongDecimal::ROUND_HALF_EVEN)
6473
+ r = l.round_to_scale(1, ROUND_HALF_EVEN)
4832
6474
  assert_equal("56.8", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
4833
6475
  assert_kind_of(LongDecimal, r, "must be LongDecimal")
4834
6476
  assert_equal("227/4[0]", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
4835
6477
  end
4836
6478
 
6479
+ #
6480
+ # test rounding of LongDecimalQuot with ROUND_HALF_ODD
6481
+ #
6482
+ def test_ldq_round_to_scale_half_odd
6483
+ print "\ntest_ldq_round_to_scale_half_odd [#{Time.now}]: "
6484
+
6485
+ # 0.99555555555555...
6486
+ l = LongDecimalQuot(Rational(224, 225), 0)
6487
+ r = l.round_to_scale(1, ROUND_HALF_ODD)
6488
+ assert_equal("1.0", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
6489
+ assert_kind_of(LongDecimal, r, "must be LongDecimal")
6490
+ assert_equal("224/225[0]", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
6491
+ l = LongDecimalQuot(-Rational(224, 225), 0)
6492
+ r = l.round_to_scale(1, ROUND_HALF_ODD)
6493
+ assert_equal("-1.0", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
6494
+ assert_kind_of(LongDecimal, r, "must be LongDecimal")
6495
+ assert_equal("-224/225[0]", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
6496
+ # 0.00444444444444444
6497
+ l = LongDecimalQuot(Rational(1, 225), 0)
6498
+ r = l.round_to_scale(1, ROUND_HALF_ODD)
6499
+ assert_equal("0.0", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
6500
+ assert_kind_of(LongDecimal, r, "must be LongDecimal")
6501
+ assert_equal("1/225[0]", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
6502
+ l = LongDecimalQuot(Rational(-1, 225), 0)
6503
+ r = l.round_to_scale(1, ROUND_HALF_ODD)
6504
+ assert_equal("0.0", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
6505
+ assert_kind_of(LongDecimal, r, "must be LongDecimal")
6506
+ assert_equal("-1/225[0]", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
6507
+ l = LongDecimalQuot(Rational(1, 1), 1000)
6508
+ r = l.round_to_scale(4, ROUND_HALF_ODD)
6509
+ assert_equal("1.0000", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
6510
+ l = LongDecimalQuot(Rational(1, 1), 1)
6511
+ r = l.round_to_scale(4, ROUND_HALF_ODD)
6512
+ assert_equal("1.0000", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
6513
+ # 56.25
6514
+ l = LongDecimalQuot(Rational(225, 4), 0)
6515
+ r = l.round_to_scale(1, ROUND_HALF_ODD)
6516
+ assert_equal("56.3", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
6517
+ assert_kind_of(LongDecimal, r, "must be LongDecimal")
6518
+ assert_equal("225/4[0]", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
6519
+ # 56.75
6520
+ l = LongDecimalQuot(Rational(227, 4), 0)
6521
+ r = l.round_to_scale(1, ROUND_HALF_ODD)
6522
+ assert_equal("56.7", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
6523
+ assert_kind_of(LongDecimal, r, "must be LongDecimal")
6524
+ assert_equal("227/4[0]", l.to_s, "l=#{l.inspect} r=#{r.inspect}")
6525
+ end
6526
+
6527
+ # TODO: do tests with rational numbers that approach square and cube roots with continuos fractions
6528
+ # TODO: do tests for harmonic that are exact matches
6529
+ # def test_ldq_round_to_scale_geometric_common
6530
+ # def test_ldq_round_to_scale_harmonic_common
6531
+ # def test_ldq_round_to_scale_harmonic_*
6532
+ # def test_ldq_round_to_scale_quadratic_common
6533
+ # def test_ldq_round_to_scale_cubic_common
6534
+
4837
6535
  #
4838
6536
  # test rounding of LongDecimalQuot with ROUND_UNNECESSARY
4839
6537
  #
4840
6538
  def test_ldq_round_to_scale_unnecessary
4841
6539
  print "\ntest_ldq_round_to_scale_unnecessary [#{Time.now}]: "
4842
6540
  l = LongDecimalQuot(Rational(225, 4), 5)
4843
- r = l.round_to_scale(2, LongDecimal::ROUND_UNNECESSARY)
6541
+ r = l.round_to_scale(2, ROUND_UNNECESSARY)
4844
6542
  assert_equal("56.25", r.to_s, "l=#{l.inspect} r=#{r.inspect}")
4845
6543
  begin
4846
- r = l.round_to_scale(1, LongDecimal::ROUND_UNNECESSARY)
6544
+ r = l.round_to_scale(1, ROUND_UNNECESSARY)
4847
6545
  assert_fail("should not have succeeded l=#{l.inspect} r=#{r.inspect}")
4848
6546
  rescue ArgumentError
4849
6547
  # ignored
@@ -4979,7 +6677,7 @@ class TestLongDecimal_class < Test::Unit::TestCase # RUNIT::TestCase
4979
6677
  y = x.to_ld
4980
6678
  assert_kind_of(LongDecimal, y, "must be ld")
4981
6679
  assert_equal(10, y.scale, "scale is 10")
4982
- assert_equal(LongDecimal("1.5555555556"), y, "1.55...")
6680
+ assert_equal(LongDecimal("1.5555555556"), y, "1.55... y=#{y} x=#{x}")
4983
6681
  x = LongDecimalQuot(Rational(7, 20), 1)
4984
6682
  y = x.to_ld
4985
6683
  assert_kind_of(LongDecimal, y, "must be ld")
@@ -5588,21 +7286,173 @@ class TestLongDecimal_class < Test::Unit::TestCase # RUNIT::TestCase
5588
7286
  assert(! (y.eql? x), "! #{y.inspect} eql? #{x.inspect}")
5589
7287
  end
5590
7288
 
7289
+ def test_means_one_param
7290
+ print "\ntest_means_one_param [#{Time.now}]: "
7291
+ [ -1, 0, 1, 7, -1.0, 0.0, 1.0, Math::PI, Rational(-1, 1), Rational(0, 1), Rational(1,1), Rational(2,3), LongDecimal(-10000000000, 10), LongDecimal(-1, 10), LongDecimal(0, 10), LongDecimal(10000000000, 10), LongMath.pi(100) ].each do |x|
7292
+ # , Complex(-1, -2), Complex(0,0), Complex(Rational(3, 2), LongDecimal(4, 3))
7293
+ 12.times do |prec|
7294
+ ALL_ROUNDING_MODES.each do |rm|
7295
+ if (rm == ROUND_UNNECESSARY)
7296
+ next
7297
+ end
7298
+ xx = x.to_ld(prec, rm)
7299
+ text = "x=#{x} xx=#{xx} rm=#{rm} prec=#{prec}"
7300
+ assert_equal(xx, LongMath.arithmetic_mean(prec, rm, x), text)
7301
+ assert_equal(xx, LongMath.geometric_mean(prec, rm, x), text)
7302
+ if (x.sgn != 0)
7303
+ assert_equal(xx, LongMath.harmonic_mean(prec, rm, x), text)
7304
+ end
7305
+ assert_equal(xx, LongMath.quadratic_mean(prec, rm, x), text)
7306
+ assert_equal(xx, LongMath.cubic_mean(prec, rm, x), text)
7307
+ end
7308
+ end
7309
+ end
7310
+ end
7311
+
7312
+ def test_means_two_param
7313
+ print "\ntest_means_two_param [#{Time.now}] (20 sec): "
7314
+ arr = [ 0, 1, 2, 7, 0.0, 1.0, 2.0, Math::PI, Rational(40, 9), Rational(0, 1), Rational(1,1), Rational(2,3), LongDecimal(3333333333333333, 10), LongDecimal(33, 10), LongDecimal(0, 10), LongDecimal(10000000000, 10), LongMath.pi(100) ]
7315
+ arr.each do |x|
7316
+ arr.each do |y|
7317
+ print "."
7318
+ 12.times do |prec|
7319
+ ALL_ROUNDING_MODES.each do |rm|
7320
+ if (rm == ROUND_UNNECESSARY)
7321
+ next
7322
+ end
7323
+ xx = x.to_ld(prec, rm)
7324
+ yy = y.to_ld(prec, rm)
7325
+ mi = [xx, yy].min
7326
+ am = LongMath.arithmetic_mean(prec, rm, x, y)
7327
+ gm = LongMath.geometric_mean(prec, rm, x, y)
7328
+ if (x.sgn == 0 || y.sgn == 0)
7329
+ hm = gm
7330
+ else
7331
+ hm = LongMath.harmonic_mean(prec, rm, x, y)
7332
+ end
7333
+ qm = LongMath.quadratic_mean(prec, rm, x, y)
7334
+ cm = LongMath.cubic_mean(prec, rm, x, y)
7335
+ ma = [xx, yy].max
7336
+ text = "mi=#{mi} hm=#{hm} gm=#{gm} am=#{am} qm=#{qm} cm=#{cm} ma=#{ma} prec=#{prec} rm=#{rm} x=#{x} y=#{y}"
7337
+ assert(mi <= hm.succ, text)
7338
+ assert(hm <= gm.succ, text)
7339
+ assert(gm <= am.succ, text)
7340
+ assert(am <= qm.succ, text)
7341
+ assert(qm <= cm.succ, text)
7342
+ assert(cm <= ma.succ, text)
7343
+ if (x == y)
7344
+ assert_equal(mi, hm, text)
7345
+ assert_equal(hm, gm, text)
7346
+ assert_equal(gm, am, text)
7347
+ assert_equal(am, qm, text)
7348
+ assert_equal(qm, cm, text)
7349
+ assert_equal(cm, ma, text)
7350
+ end
7351
+ end
7352
+ end
7353
+ end
7354
+ end
7355
+ end
7356
+
7357
+ def test_means_three_param
7358
+ print "\ntest_means_three_param [#{Time.now}] (4 min): "
7359
+ arr = [ 0, 1, 2, 0.0, 1.0, Math::PI, Rational(40, 9), Rational(0, 1), Rational(1,1), LongDecimal(3333333333333333, 10), LongDecimal(0, 10), LongDecimal(10000000000, 10), LongMath.pi(100) ]
7360
+ arr.each do |x|
7361
+ arr.each do |y|
7362
+ print ":"
7363
+ arr.each do |z|
7364
+ print "."
7365
+ 12.times do |prec|
7366
+ ALL_ROUNDING_MODES.each do |rm|
7367
+ if (rm == ROUND_UNNECESSARY)
7368
+ next
7369
+ end
7370
+ xx = x.to_ld(prec, rm)
7371
+ yy = y.to_ld(prec, rm)
7372
+ zz = z.to_ld(prec, rm)
7373
+ mi = [xx, yy, zz].min
7374
+ am = LongMath.arithmetic_mean(prec, rm, x, y, z)
7375
+ agm = LongMath.arithmetic_geometric_mean(prec, rm, x, y, z)
7376
+ gm = LongMath.geometric_mean(prec, rm, x, y, z)
7377
+ if (x.sgn == 0 || y.sgn == 0 || z.sgn == 0)
7378
+ hm = gm
7379
+ hgm = gm
7380
+ else
7381
+ hm = LongMath.harmonic_mean(prec, rm, x, y, z)
7382
+ hgm = LongMath.harmonic_geometric_mean(prec, rm, x, y, z)
7383
+ end
7384
+ qm = LongMath.quadratic_mean(prec, rm, x, y, z)
7385
+ cm = LongMath.cubic_mean(prec, rm, x, y, z)
7386
+ ma = [xx, yy, zz].max
7387
+ text = "mi=#{mi} hm=#{hm} gm=#{gm} am=#{am} qm=#{qm} cm=#{cm} ma=#{ma} prec=#{prec} rm=#{rm} x=#{x} y=#{y} z=#{z}"
7388
+ assert(mi <= hm.succ, text)
7389
+ assert(hm <= hgm.succ, text)
7390
+ assert(hgm <= gm.succ, text)
7391
+ assert(gm <= agm.succ, text)
7392
+ assert(agm <= am.succ, text)
7393
+ assert(am <= qm.succ, text)
7394
+ assert(qm <= cm.succ, text)
7395
+ assert(cm <= ma.succ, text)
7396
+ if (x == y && y == z)
7397
+ assert_equal(mi, hm, text)
7398
+ assert_equal(hm, hgm, text)
7399
+ assert_equal(hgm, gm, text)
7400
+ assert_equal(gm, agm, text)
7401
+ assert_equal(gm, agm, text)
7402
+ assert_equal(am, qm, text)
7403
+ assert_equal(qm, cm, text)
7404
+ assert_equal(cm, ma, text)
7405
+ end
7406
+ end
7407
+ end
7408
+ end
7409
+ end
7410
+ end
7411
+ end
7412
+
7413
+ def test_arithmetic_means_two_param_known_result
7414
+ assert_equal(1, LongMath.arithmetic_mean(0, ROUND_UNNECESSARY, 0, 2))
7415
+ assert_equal(0, LongMath.arithmetic_mean(0, ROUND_UNNECESSARY, -1, 1))
7416
+ assert_equal(3, LongMath.arithmetic_mean(0, ROUND_UNNECESSARY, 1, 5))
7417
+ end
7418
+
7419
+ def test_geometric_means_two_param_known_result
7420
+ assert_equal(2, LongMath.geometric_mean(0, ROUND_UNNECESSARY, 1, 4))
7421
+ assert_equal(10, LongMath.geometric_mean(0, ROUND_UNNECESSARY, 4, 25))
7422
+ assert_equal(-3, LongMath.geometric_mean(0, ROUND_UNNECESSARY, -1, -9))
7423
+ end
7424
+
7425
+ def test_harmonic_means_two_param_known_result
7426
+ assert_equal(3, LongMath.harmonic_mean(0, ROUND_UNNECESSARY, 2, 6))
7427
+ assert_equal(4, LongMath.harmonic_mean(0, ROUND_UNNECESSARY, 3, 6))
7428
+ assert_equal(-3, LongMath.harmonic_mean(0, ROUND_UNNECESSARY, -2, -6))
7429
+ end
7430
+
7431
+ def test_quadratic_means_two_param_known_result
7432
+ assert_equal(5, LongMath.quadratic_mean(0, ROUND_UNNECESSARY, 1, 7))
7433
+ assert_equal(10, LongMath.quadratic_mean(0, ROUND_UNNECESSARY, 2, 14))
7434
+ assert_equal(15, LongMath.quadratic_mean(0, ROUND_UNNECESSARY, 3, 21))
7435
+ assert_equal(13, LongMath.quadratic_mean(0, ROUND_UNNECESSARY, 7, 17))
7436
+ assert_equal(-5, LongMath.quadratic_mean(0, ROUND_UNNECESSARY, -1, -7))
7437
+ end
7438
+
7439
+
5591
7440
  #
5592
7441
  # test mul minverse of RoundingMode
5593
7442
  #
5594
7443
  def test_rm_minverse
5595
7444
  print "\ntest_rm_minverse [#{Time.now}]: "
5596
- assert_equal(LongMath::ROUND_UP, LongMath::ROUND_DOWN.minverse)
5597
- assert_equal(LongMath::ROUND_DOWN, LongMath::ROUND_UP.minverse)
5598
- assert_equal(LongMath::ROUND_CEILING, LongMath::ROUND_FLOOR.minverse)
5599
- assert_equal(LongMath::ROUND_FLOOR, LongMath::ROUND_CEILING.minverse)
5600
- assert_equal(LongMath::ROUND_HALF_UP, LongMath::ROUND_HALF_DOWN.minverse)
5601
- assert_equal(LongMath::ROUND_HALF_DOWN, LongMath::ROUND_HALF_UP.minverse)
5602
- assert_equal(LongMath::ROUND_HALF_CEILING, LongMath::ROUND_HALF_FLOOR.minverse)
5603
- assert_equal(LongMath::ROUND_HALF_FLOOR, LongMath::ROUND_HALF_CEILING.minverse)
5604
- assert_equal(LongMath::ROUND_HALF_EVEN, LongMath::ROUND_HALF_EVEN.minverse)
5605
- assert_equal(LongMath::ROUND_UNNECESSARY, LongMath::ROUND_UNNECESSARY.minverse)
7445
+ assert_equal(ROUND_UP, ROUND_DOWN.minverse)
7446
+ assert_equal(ROUND_DOWN, ROUND_UP.minverse)
7447
+ assert_equal(ROUND_CEILING, ROUND_FLOOR.minverse)
7448
+ assert_equal(ROUND_FLOOR, ROUND_CEILING.minverse)
7449
+ assert_equal(ROUND_HALF_UP, ROUND_HALF_DOWN.minverse)
7450
+ assert_equal(ROUND_HALF_DOWN, ROUND_HALF_UP.minverse)
7451
+ assert_equal(ROUND_HALF_CEILING, ROUND_HALF_FLOOR.minverse)
7452
+ assert_equal(ROUND_HALF_FLOOR, ROUND_HALF_CEILING.minverse)
7453
+ assert_equal(ROUND_HALF_EVEN, ROUND_HALF_EVEN.minverse)
7454
+ assert_equal(ROUND_HALF_ODD, ROUND_HALF_ODD.minverse)
7455
+ assert_equal(ROUND_UNNECESSARY, ROUND_UNNECESSARY.minverse)
5606
7456
  end
5607
7457
 
5608
7458
  #
@@ -5610,16 +7460,17 @@ class TestLongDecimal_class < Test::Unit::TestCase # RUNIT::TestCase
5610
7460
  #
5611
7461
  def test_rm_ainverse
5612
7462
  print "\ntest_rm_ainverse [#{Time.now}]: "
5613
- assert_equal(LongMath::ROUND_UP, LongMath::ROUND_UP.ainverse)
5614
- assert_equal(LongMath::ROUND_DOWN, LongMath::ROUND_DOWN.ainverse)
5615
- assert_equal(LongMath::ROUND_CEILING, LongMath::ROUND_FLOOR.ainverse)
5616
- assert_equal(LongMath::ROUND_FLOOR, LongMath::ROUND_CEILING.ainverse)
5617
- assert_equal(LongMath::ROUND_HALF_UP, LongMath::ROUND_HALF_UP.ainverse)
5618
- assert_equal(LongMath::ROUND_HALF_DOWN, LongMath::ROUND_HALF_DOWN.ainverse)
5619
- assert_equal(LongMath::ROUND_HALF_CEILING, LongMath::ROUND_HALF_FLOOR.ainverse)
5620
- assert_equal(LongMath::ROUND_HALF_FLOOR, LongMath::ROUND_HALF_CEILING.ainverse)
5621
- assert_equal(LongMath::ROUND_HALF_EVEN, LongMath::ROUND_HALF_EVEN.ainverse)
5622
- assert_equal(LongMath::ROUND_UNNECESSARY, LongMath::ROUND_UNNECESSARY.ainverse)
7463
+ assert_equal(ROUND_UP, ROUND_UP.ainverse)
7464
+ assert_equal(ROUND_DOWN, ROUND_DOWN.ainverse)
7465
+ assert_equal(ROUND_CEILING, ROUND_FLOOR.ainverse)
7466
+ assert_equal(ROUND_FLOOR, ROUND_CEILING.ainverse)
7467
+ assert_equal(ROUND_HALF_UP, ROUND_HALF_UP.ainverse)
7468
+ assert_equal(ROUND_HALF_DOWN, ROUND_HALF_DOWN.ainverse)
7469
+ assert_equal(ROUND_HALF_CEILING, ROUND_HALF_FLOOR.ainverse)
7470
+ assert_equal(ROUND_HALF_FLOOR, ROUND_HALF_CEILING.ainverse)
7471
+ assert_equal(ROUND_HALF_EVEN, ROUND_HALF_EVEN.ainverse)
7472
+ assert_equal(ROUND_HALF_ODD, ROUND_HALF_ODD.ainverse)
7473
+ assert_equal(ROUND_UNNECESSARY, ROUND_UNNECESSARY.ainverse)
5623
7474
  end
5624
7475
 
5625
7476
 
@@ -5642,7 +7493,6 @@ class TestLongDecimal_class < Test::Unit::TestCase # RUNIT::TestCase
5642
7493
  @powers_of_10[x] = zz
5643
7494
  end
5644
7495
  assert_equal(z, zz)
5645
- puts("exp=" + x.to_s)
5646
7496
  $stdout.flush
5647
7497
  else
5648
7498
  @powers_of_10[x] ||= z
@@ -5662,12 +7512,10 @@ class TestLongDecimal_class < Test::Unit::TestCase # RUNIT::TestCase
5662
7512
 
5663
7513
  12.times do |i|
5664
7514
  check_npower10(3**i)
5665
- puts(3**i)
5666
7515
  end
5667
7516
 
5668
7517
  12.times do |i|
5669
7518
  check_npower10(3**i)
5670
- puts(3**i)
5671
7519
  end
5672
7520
 
5673
7521
  y = 1
@@ -5682,7 +7530,6 @@ class TestLongDecimal_class < Test::Unit::TestCase # RUNIT::TestCase
5682
7530
  x0 = 2046
5683
7531
  y0 = 10**x0
5684
7532
  60.times do |i|
5685
- puts "i=" + i.to_s
5686
7533
  $stdout.flush
5687
7534
  y = y0
5688
7535
  x = x0