long-decimal 0.01.00 → 0.01.01

Sign up to get free protection for your applications and to get access to all the features.
Files changed (159) hide show
  1. data/README +6 -3
  2. data/Rakefile +1 -1
  3. data/VERSION +1 -1
  4. data/doc/classes/LongDecimal.html +207 -189
  5. data/doc/classes/LongDecimal.src/M000036.html +1 -1
  6. data/doc/classes/LongDecimal.src/M000037.html +1 -1
  7. data/doc/classes/LongDecimal.src/M000038.html +1 -1
  8. data/doc/classes/LongDecimal.src/M000039.html +1 -1
  9. data/doc/classes/LongDecimal.src/M000040.html +1 -1
  10. data/doc/classes/LongDecimal.src/M000041.html +1 -1
  11. data/doc/classes/LongDecimal.src/M000042.html +1 -1
  12. data/doc/classes/LongDecimal.src/M000043.html +1 -1
  13. data/doc/classes/LongDecimal.src/M000044.html +1 -1
  14. data/doc/classes/LongDecimal.src/M000045.html +1 -1
  15. data/doc/classes/LongDecimal.src/M000046.html +1 -1
  16. data/doc/classes/LongDecimal.src/M000047.html +1 -1
  17. data/doc/classes/LongDecimal.src/M000048.html +1 -1
  18. data/doc/classes/LongDecimal.src/M000049.html +1 -1
  19. data/doc/classes/LongDecimal.src/M000050.html +15 -2
  20. data/doc/classes/LongDecimal.src/M000051.html +1 -1
  21. data/doc/classes/LongDecimal.src/M000052.html +2 -2
  22. data/doc/classes/LongDecimal.src/M000053.html +1 -1
  23. data/doc/classes/LongDecimal.src/M000054.html +1 -1
  24. data/doc/classes/LongDecimal.src/M000055.html +1 -1
  25. data/doc/classes/LongDecimal.src/M000056.html +1 -1
  26. data/doc/classes/LongDecimal.src/M000057.html +1 -1
  27. data/doc/classes/LongDecimal.src/M000058.html +1 -1
  28. data/doc/classes/LongDecimal.src/M000059.html +1 -1
  29. data/doc/classes/LongDecimal.src/M000060.html +1 -1
  30. data/doc/classes/LongDecimal.src/M000062.html +1 -1
  31. data/doc/classes/LongDecimal.src/M000063.html +1 -1
  32. data/doc/classes/LongDecimal.src/M000064.html +1 -1
  33. data/doc/classes/LongDecimal.src/M000065.html +1 -1
  34. data/doc/classes/LongDecimal.src/M000066.html +4 -8
  35. data/doc/classes/LongDecimal.src/M000067.html +6 -7
  36. data/doc/classes/LongDecimal.src/M000068.html +5 -5
  37. data/doc/classes/LongDecimal.src/M000069.html +6 -6
  38. data/doc/classes/LongDecimal.src/M000070.html +9 -4
  39. data/doc/classes/LongDecimal.src/M000071.html +4 -19
  40. data/doc/classes/LongDecimal.src/M000072.html +15 -5
  41. data/doc/classes/LongDecimal.src/M000073.html +7 -7
  42. data/doc/classes/LongDecimal.src/M000074.html +7 -18
  43. data/doc/classes/LongDecimal.src/M000075.html +20 -7
  44. data/doc/classes/LongDecimal.src/M000076.html +8 -5
  45. data/doc/classes/LongDecimal.src/M000077.html +5 -9
  46. data/doc/classes/LongDecimal.src/M000078.html +5 -5
  47. data/doc/classes/LongDecimal.src/M000079.html +5 -5
  48. data/doc/classes/LongDecimal.src/M000080.html +9 -4
  49. data/doc/classes/LongDecimal.src/M000081.html +4 -7
  50. data/doc/classes/LongDecimal.src/M000082.html +4 -4
  51. data/doc/classes/LongDecimal.src/M000083.html +7 -4
  52. data/doc/classes/LongDecimal.src/M000084.html +4 -4
  53. data/doc/classes/LongDecimal.src/M000085.html +4 -9
  54. data/doc/classes/LongDecimal.src/M000086.html +6 -6
  55. data/doc/classes/LongDecimal.src/M000087.html +9 -5
  56. data/doc/classes/LongDecimal.src/M000088.html +4 -8
  57. data/doc/classes/LongDecimal.src/M000089.html +9 -4
  58. data/doc/classes/LongDecimal.src/M000090.html +4 -4
  59. data/doc/classes/LongDecimal.src/M000091.html +4 -4
  60. data/doc/classes/LongDecimal.src/M000092.html +4 -4
  61. data/doc/classes/LongDecimal.src/M000093.html +4 -59
  62. data/doc/classes/LongDecimal.src/M000094.html +59 -4
  63. data/doc/classes/LongDecimal.src/M000095.html +4 -4
  64. data/doc/classes/LongDecimal.src/M000096.html +4 -5
  65. data/doc/classes/LongDecimal.src/M000099.html +5 -5
  66. data/doc/classes/LongDecimal.src/M000100.html +5 -4
  67. data/doc/classes/LongDecimal.src/M000101.html +4 -4
  68. data/doc/classes/LongDecimal.src/M000102.html +4 -4
  69. data/doc/classes/LongDecimal.src/M000103.html +4 -4
  70. data/doc/classes/LongDecimalBase.html +53 -53
  71. data/doc/classes/LongDecimalBase.src/M000108.html +4 -4
  72. data/doc/classes/LongDecimalBase.src/M000109.html +4 -4
  73. data/doc/classes/LongDecimalBase.src/M000110.html +4 -4
  74. data/doc/classes/LongDecimalBase.src/M000111.html +4 -4
  75. data/doc/classes/LongDecimalBase.src/M000112.html +4 -9
  76. data/doc/classes/LongDecimalBase.src/M000113.html +9 -9
  77. data/doc/classes/LongDecimalBase.src/M000116.html +9 -5
  78. data/doc/classes/LongDecimalBase.src/M000117.html +5 -4
  79. data/doc/classes/LongDecimalQuot.html +1 -1
  80. data/doc/classes/LongDecimalQuot.src/M000003.html +1 -1
  81. data/doc/classes/LongDecimalQuot.src/M000004.html +1 -1
  82. data/doc/classes/LongDecimalQuot.src/M000005.html +1 -1
  83. data/doc/classes/LongDecimalQuot.src/M000006.html +1 -1
  84. data/doc/classes/LongDecimalQuot.src/M000007.html +1 -1
  85. data/doc/classes/LongDecimalQuot.src/M000008.html +1 -1
  86. data/doc/classes/LongDecimalQuot.src/M000009.html +1 -1
  87. data/doc/classes/LongDecimalQuot.src/M000010.html +1 -1
  88. data/doc/classes/LongDecimalQuot.src/M000011.html +1 -1
  89. data/doc/classes/LongDecimalQuot.src/M000012.html +2 -2
  90. data/doc/classes/LongDecimalQuot.src/M000013.html +1 -1
  91. data/doc/classes/LongDecimalQuot.src/M000014.html +1 -1
  92. data/doc/classes/LongDecimalQuot.src/M000015.html +1 -1
  93. data/doc/classes/LongDecimalQuot.src/M000016.html +1 -1
  94. data/doc/classes/LongDecimalQuot.src/M000017.html +1 -1
  95. data/doc/classes/LongDecimalQuot.src/M000018.html +1 -1
  96. data/doc/classes/LongDecimalQuot.src/M000019.html +1 -1
  97. data/doc/classes/LongDecimalQuot.src/M000020.html +1 -1
  98. data/doc/classes/LongDecimalQuot.src/M000021.html +1 -1
  99. data/doc/classes/LongDecimalQuot.src/M000022.html +1 -1
  100. data/doc/classes/LongDecimalQuot.src/M000023.html +1 -1
  101. data/doc/classes/LongDecimalQuot.src/M000024.html +1 -1
  102. data/doc/classes/LongDecimalQuot.src/M000025.html +1 -1
  103. data/doc/classes/LongDecimalQuot.src/M000026.html +1 -1
  104. data/doc/classes/LongDecimalQuot.src/M000027.html +1 -1
  105. data/doc/classes/LongDecimalQuot.src/M000028.html +1 -1
  106. data/doc/classes/LongDecimalQuot.src/M000029.html +1 -1
  107. data/doc/classes/LongDecimalQuot.src/M000030.html +1 -1
  108. data/doc/classes/LongDecimalQuot.src/M000031.html +1 -1
  109. data/doc/classes/LongDecimalQuot.src/M000034.html +1 -1
  110. data/doc/classes/LongDecimalQuot.src/M000035.html +1 -1
  111. data/doc/classes/LongDecimalRoundingMode.html +6 -1
  112. data/doc/classes/LongDecimalRoundingMode/RoundingModeClass.html +37 -16
  113. data/doc/classes/LongMath.html +246 -161
  114. data/doc/classes/LongMath.src/M000119.html +5 -4
  115. data/doc/classes/LongMath.src/M000120.html +4 -4
  116. data/doc/classes/LongMath.src/M000121.html +4 -5
  117. data/doc/classes/LongMath.src/M000122.html +5 -4
  118. data/doc/classes/LongMath.src/M000123.html +4 -18
  119. data/doc/classes/LongMath.src/M000124.html +14 -14
  120. data/doc/classes/LongMath.src/M000125.html +18 -5
  121. data/doc/classes/LongMath.src/M000126.html +5 -29
  122. data/doc/classes/LongMath.src/M000127.html +29 -5
  123. data/doc/classes/LongMath.src/M000128.html +5 -57
  124. data/doc/classes/LongMath.src/M000129.html +55 -19
  125. data/doc/classes/LongMath.src/M000130.html +20 -35
  126. data/doc/classes/LongMath.src/M000131.html +36 -6
  127. data/doc/classes/LongMath.src/M000132.html +6 -33
  128. data/doc/classes/LongMath.src/M000133.html +26 -44
  129. data/doc/classes/LongMath.src/M000134.html +49 -5
  130. data/doc/classes/LongMath.src/M000135.html +7 -4
  131. data/doc/classes/LongMath.src/M000136.html +4 -4
  132. data/doc/classes/LongMath.src/M000137.html +4 -72
  133. data/doc/classes/LongMath.src/M000138.html +67 -39
  134. data/doc/classes/LongMath.src/M000139.html +44 -4
  135. data/doc/classes/LongMath.src/M000140.html +4 -4
  136. data/doc/classes/LongMath.src/M000141.html +4 -6
  137. data/doc/classes/LongMath.src/M000142.html +4 -18
  138. data/doc/classes/LongMath.src/M000143.html +8 -7
  139. data/doc/classes/LongMath.src/M000144.html +10 -35
  140. data/doc/classes/LongMath.src/M000145.html +23 -202
  141. data/doc/classes/LongMath.src/M000146.html +322 -4
  142. data/doc/classes/LongMath.src/M000147.html +22 -63
  143. data/doc/classes/LongMath.src/M000148.html +65 -33
  144. data/doc/classes/LongMath/CacheKey.html +5 -5
  145. data/doc/classes/Numeric.html +11 -11
  146. data/doc/classes/Numeric.src/M000105.html +9 -4
  147. data/doc/classes/Rational.html +6 -6
  148. data/doc/created.rid +1 -1
  149. data/doc/files/lib/long-decimal_rb.html +2 -2
  150. data/doc/files/lib/long-decimal_rb.src/M000001.html +1 -1
  151. data/doc/files/lib/long-decimal_rb.src/M000002.html +1 -1
  152. data/doc/fr_method_index.html +102 -95
  153. data/lib/long-decimal.rb +206 -49
  154. data/test/testlongdecimal.rb +736 -21
  155. data/test/testlongdeclib.rb +136 -25
  156. data/test/testrandlib.rb +87 -0
  157. data/test/testrandom.rb +30 -45
  158. data/test/testrandpower.rb +72 -0
  159. metadata +4 -2
@@ -2,8 +2,8 @@
2
2
  #
3
3
  # testlongdecimal.rb -- runit test for long-decimal.rb
4
4
  #
5
- # CVS-ID: $Header: /var/cvs/long-decimal/long-decimal/test/testlongdecimal.rb,v 1.41 2006/04/11 19:39:43 bk1 Exp $
6
- # CVS-Label: $Name: ALPHA_01_00 $
5
+ # CVS-ID: $Header: /var/cvs/long-decimal/long-decimal/test/testlongdecimal.rb,v 1.54 2006/05/01 12:22:12 bk1 Exp $
6
+ # CVS-Label: $Name: ALPHA_01_01 $
7
7
  # Author: $Author: bk1 $ (Karl Brodowsky)
8
8
  #
9
9
 
@@ -20,7 +20,7 @@ load "test/testlongdeclib.rb"
20
20
  class TestLongDecimal_class < RUNIT::TestCase
21
21
  include TestLongDecHelper
22
22
 
23
- @RCS_ID='-$Id: testlongdecimal.rb,v 1.41 2006/04/11 19:39:43 bk1 Exp $-'
23
+ @RCS_ID='-$Id: testlongdecimal.rb,v 1.54 2006/05/01 12:22:12 bk1 Exp $-'
24
24
 
25
25
  #
26
26
  # test split_to_words and merge_from_words
@@ -141,12 +141,18 @@ class TestLongDecimal_class < RUNIT::TestCase
141
141
  10.times do |i|
142
142
  n = (i*i+i)/2
143
143
  x = LongDecimal(n, 3*i)+LongMath.pi(20)
144
+ check_exp2_floated(x, n)
145
+
144
146
  y = LongMath.exp2(x, n)
145
147
  yy = LongMath.exp2(x, n + 5)
146
148
  assert_equal(yy.round_to_scale(y.scale, LongDecimal::ROUND_HALF_DOWN), y, "x=#{x} y=#{y} yy=#{yy}")
147
149
  z = LongMath.power(2, x, n)
148
150
  assert_equal(z, y, "exp2 x=#{x} y=#{y} z=#{z} i=#{i} n=#{n}")
149
151
  end
152
+
153
+ # random tests that have failed previously
154
+ check_exp2_floated(LongDecimal("-0.00147492625237084606064197462823289474038138852346725504592707365251736299180323394082648207114993022483949313246714392730651107673327728615912046468517225938833913598854936005"), 20)
155
+
150
156
  end
151
157
 
152
158
  #
@@ -156,6 +162,8 @@ class TestLongDecimal_class < RUNIT::TestCase
156
162
  10.times do |i|
157
163
  n = (i*i+i)/2
158
164
  x = LongDecimal(n, 3*i)+LongMath.pi(20)
165
+ check_exp10_floated(x, n)
166
+
159
167
  y = LongMath.exp10(x, n)
160
168
  yy = LongMath.exp10(x, n + 5)
161
169
  assert_equal(yy.round_to_scale(y.scale, LongDecimal::ROUND_HALF_DOWN), y, "x=#{x} y=#{y} yy=#{yy}")
@@ -459,6 +467,10 @@ class TestLongDecimal_class < RUNIT::TestCase
459
467
  check_log_floated(LongDecimal("473.00000000000000000000000000000000003200056000000000000000000000000000000000000000000664"), 1)
460
468
  check_log_floated(LongDecimal("0.0000000000000000000000000000000000081600000000000000000000000000000000007510000886"), 101)
461
469
  check_log_floated(LongDecimal("0.99999999999999999999999571850000000000000000001833124224999999999999992151478630572500000000033603444243589176249999856126853469423130083125615992876877728537781582"), 37)
470
+ check_log_floated(LongDecimal("0.99999999999999999999999999999999999999999999999999999999999999999999999999091999999999999999999409997650000000000000000000000000000000000000000000008244640000000000000010714442676000000000003481027730055225"), 102)
471
+ check_log_floated(LongDecimal("0.99999999999999999999999999999999999999999999999999999999999999999999993359999909094250000000000000000000000000000000000000000000000000000000440896012072283682638553830625"), 84)
472
+ check_log_floated(LongDecimal("1.0000000000000000000000000000000000000000009604500000000000000000000000730"), 46)
473
+
462
474
  end
463
475
 
464
476
  #
@@ -491,6 +503,96 @@ class TestLongDecimal_class < RUNIT::TestCase
491
503
  check_power_floated(1.01, -1e-20, 20)
492
504
  check_power_floated(1e-20, -1.01, 21)
493
505
  check_power_floated(1.01, -1e-20, 21)
506
+
507
+ # random tests that have failed
508
+ check_power_floated(LongDecimal("1.000000000000000151000000000000000000000000000000000000000000000000000000000000057800000000205"),
509
+ LongDecimal("-680.0000000000000000000013100000000000000000000000000000000000000165000000000000000000234"),
510
+ 26)
511
+ check_power_floated(LongDecimal("1.0000000000000000000000000000000000000000000068000000000853000000000926"),
512
+ LongDecimal("-536.000000000086100000000000000000000000000019200000000000000000000000000000000000000000000000166"),
513
+ 49)
514
+ check_power_floated(LongDecimal("1.0000000000000000049000000000002090000000000447"),
515
+ LongDecimal("-328.00000000000000000000000000000000567000000000000000026600000000000000000000000679"),
516
+ 24)
517
+ check_power_floated(LongDecimal("1.0000000000000000000003580000000000000000000000376238"),
518
+ LongDecimal("-359.0000000003910721000000000000000000000000000000000000000000000000000000000000000000000000479"),
519
+ 39)
520
+ check_power_floated(LongDecimal("1.000000000000000000000032000000001500000000000000000000439"),
521
+ LongDecimal("-252.00000000000000025500000000000176907"),
522
+ 39)
523
+ check_power_floated(LongDecimal("1.0000000000000008590000521000000000000621"),
524
+ LongDecimal("-135.0000000000000000000000000000000000000000000000000000000074400000000000000000000000000321"),
525
+ 50)
526
+ check_power_floated(LongDecimal("1.000000000000000151000000000000000000000000000000000000000000000000000000000000057800000000205"),
527
+ LongDecimal("-680.0000000000000000000013100000000000000000000000000000000000000165000000000000000000234"),
528
+ 26)
529
+ check_power_floated(LongDecimal("1.02350000000000000000000356000000000000000000000000000000000000000000000000000000000104"),
530
+ LongDecimal("-971.0000000000000000055400000000000000000000000000000000000000000000000000040900000000000000000000000603"),
531
+ 45)
532
+ check_power_floated(LongDecimal("1.0023800000000000000000000000000000000000000000000000000000000000265000000000000000000000000000000453"),
533
+ LongDecimal("-277.000000000000000000000000000000000000000000000000000000000000113000000000000000000041400000294"),
534
+ 22)
535
+ check_power_floated(LongDecimal("0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003422250001093950095910422515315300670761"),
536
+ LongDecimal("-0.99999999999999999999999999999999999999999999999999997909999999999999999999999999667999957000000000000000065521500000000000000000000020816402696099999999999997719321110428280027729999999129874367303020000000000071412895105695789681563000036363932570289984431712381817869482773696988055442648559706239710901091550702341077381290973316336980640165855210736680"),
537
+ 46)
538
+ check_power_floated(LongDecimal("0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000049273899694369"),
539
+ LongDecimal("-0.99999999999999999999999999999999999999988899963450000000000000000000000000000001847988671170038537499999999999999999999658146648184996349480690906250000000000066400422857493760370353798820585648437488207957808220483456569835670219978619056054192244103752969215743872596800486621906638928959243058783356441503226136251748249991020724187893339868"),
540
+ 40)
541
+ check_power_floated(LongDecimal("0.0000000000000000000000000000003868840000000000000000000328416000000000000000000006969600000000000000000000000000000059338800000000000000000002518560000000000000000000000000000000000000000000000000000000227529"),
542
+ LongDecimal("-0.999999999999999999999999999999999999999999999999999998264999999999999999999999999999616741000000000000000004515337500000000000000000000001994863094999999999999986943149282831191620999999999993077825060350000000000033980453035745280148525000000024019946927993617107497210600671335038418031107762499920991889855598841096454678838495791189026426859181655270271342"),
543
+ 31)
544
+ check_power_floated(LongDecimal("0.0000000000000000000000000000000000000000000000435600000000000000000000000000000000000000000000000006204000000075240000000000000000000000000000000000000022090000000535800000003249"),
545
+ LongDecimal("-4.50377349099168904759987513420506734335755704389619751192197520413005925604849718759451665302464588879636922713303481423460050066204079523260315868192642742903330525895063299416"),
546
+ 20)
547
+ check_power_floated(LongDecimal("0.0000000000000000000000000000700720943029391693947940220429504569709269190190365416713568"),
548
+ LongDecimal("-6.633249580710799698229865473341373367854177091179010213018664944871230"),
549
+ 7)
550
+ check_power_floated(LongDecimal("0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000816700000697"),
551
+ LongDecimal("-0.58685446009389671361502347417840375586854460093896713614906034406753510106019528753113359342280707917300359276157963863070992095386428055722936293804476401957909668625460628698383384886591034139"),
552
+ 36)
553
+ check_power_floated(LongDecimal("0.000000000000000000000000000000000000046500000000000015087"),
554
+ LongDecimal("-1.0000000037300000000000000000000000000000000000000000003924"),
555
+ 3)
556
+ check_power_floated(LongDecimal("0.0000000000000000000000000000000000000000000000000000000000000000002450257484405715360000000000000000097614149083200000000000000000000000972196"),
557
+ LongDecimal("-1.00000008600000184900000000000000000000000000000000000000012640000543520000000000000000000013300000571900000000000000399424000000000000000000000000000840560000000000000000000000000000442225"),
558
+ 3)
559
+ check_power_floated(LongDecimal("0.00000000000000000000000000000000000000000000000000000000000000000000367236000000000000000093202800000000000000005914074196000000000000000058905400000000000000000000146689"),
560
+ LongDecimal("-1.000000000008800000000019360000000062800000000276320250000000001100000985960000000000007850000000000000015625"),
561
+ 4)
562
+ check_power_floated(LongDecimal("0.000000000000000000000000000000000000000000000000000000000000000000002777290000000006513720000000003819240000000000000000000000000000100340800000000117667200000000000000000000000000000000000000000000906304"),
563
+ LongDecimal("-0.5773502691896257645091447198050641552797247036332110311421498194545129249630222981047763195372146430879281215100223411775138874331819083544781222838698051829302865547075365868655847179043571799566074987574406310154782766513220296853158689786573196010629608653145605201822170964422894732870490642190250948498852022304300879727510280657218553"),
564
+ 23)
565
+ check_power_floated(LongDecimal("0.000000000000000000000000000000000000000000007350000295000915"),
566
+ LongDecimal("-1.000002193000861"),
567
+ 2)
568
+ check_power_floated(LongDecimal("0.0000000086862400000000000000015172960006039360000000662596000527472000104976"),
569
+ LongDecimal("-0.999999999999999999999999999999999999999999999999999999999997169999999999996784999999999687000000000000000000000000000012013350000000027295350000002672874337500003018885000000146896669625999999845508318999984783776699499965759759873248317316431267825611053489338193758007138415641516991908731376997678345955102618540146326218008264916981179817214058767402196571"),
570
+ 11)
571
+ check_power_floated(LongDecimal("0.00000000000000000000000000624000383000000000000000000000000000000000000000000000358"),
572
+ LongDecimal("-1.0000004600000000000000000000000000000004210"),
573
+ 3)
574
+ check_power_floated(LongDecimal("0.00000000006236994468492015585972291475115698519825552824875948893004062366348813472156776148562881057978611940708477498267201430163921921918813918304834563518614088250202460271818014152969"),
575
+ LongDecimal("-21.81742422927144044215775880732087497227530694228658299334049542576403906256739064739549866577137008231569804502022381108724983114382624747999460445291671084230968250529511708947428208082234"),
576
+ 6)
577
+ check_power_floated(LongDecimal("0.0000000000000000000000000000000000000000000000000000000000000000000035600000000928000000000000000450"),
578
+ LongDecimal("-0.70821529745042492917661444999959874487397062785764977666003279651340417551441776107007487983685090756343178115766012078677210548592741818458068450268168492334992979756923"),
579
+ 13)
580
+ check_power_floated(LongDecimal("0.0000000000000000000000000000025900000000000000000000000000000000000000000022100000000000000000032"),
581
+ LongDecimal("-0.999943403203378688766215832183174473300891276419706031790088430934495839737458766990116492"),
582
+ 4)
583
+ check_power_floated(LongDecimal("0.002658925294303146195800785280451092866235470739838791730450519159432915"),
584
+ LongDecimal("-87.0000000000000008330000000000000000000000000000000000000000000000000000000000000000000000000092046"),
585
+ 90)
586
+ check_power_floated(LongDecimal("0.0014814814814814814812905349794238683127818125285779606767229367555739725854802645575188374989810195213530274617178142875856830586369415448003164084698537116523550097"),
587
+ LongDecimal("-52.0000000000000000000000000000000000000000683000000000000000000238000000000228"),
588
+ 25)
589
+ check_power_floated(LongDecimal("0.00000000000000000000047400000000000000000084700000892"),
590
+ LongDecimal("-17.000000001310000000000000000000000000000000000000000000000000002800000000000000217"),
591
+ 56)
592
+ check_power_floated(LongDecimal("0.00000000000000000000005110000000000000000004800000000000000000000000000000163"),
593
+ LongDecimal("-37.000000009170000000000000000000000000000000000000000000000000000000000000055800048"),
594
+ 21)
595
+
494
596
  end
495
597
 
496
598
  #
@@ -518,6 +620,13 @@ class TestLongDecimal_class < RUNIT::TestCase
518
620
  check_log10_floated(LongDecimal("0.0000000000000000000000000000000000000000180000000063000000000000000000000000000000000025"), 74)
519
621
  check_log10_floated(LongDecimal("0.0000000000000000000000000006200000000000000000000000000000000000000000000000007940000015"), 74)
520
622
  check_log10_floated(LongDecimal("0.00000000000000000000000000000000000000000032900000000000000000000233000000000000000000000000000000254"), 10)
623
+ check_log10_floated(LongDecimal("0.00000000000000000000000233000000094800000000000000000000000000000000000000000000000000000000000000682"), 100)
624
+ check_log10_floated(LongDecimal("0.000000000000000000000000000000000000097000000041500000000000000000784"), 97)
625
+ check_log10_floated(LongDecimal("185.000025300000000000000006320000000000000000000000000000737"), 27)
626
+ check_log10_floated(LongDecimal("0.00000000000000000000000000000302000000000000000000000000000000000000000000000000000000060673"), 100)
627
+ check_log10_floated(LongDecimal("442.000000000000045300000000000000000000000000000000000000000000000000000000000000000000000721000000000752"), 97)
628
+ check_log10_floated(LongDecimal("0.001030927835051546391752577284408545010096715910298651428936221023301883588097777204212461151695109779555577162172"), 62)
629
+
521
630
  end
522
631
 
523
632
  #
@@ -544,6 +653,37 @@ class TestLongDecimal_class < RUNIT::TestCase
544
653
  check_log2_floated(LongDecimal("504.00000000000000000000000000000000000000000000000000000000000000000000000000000000000327400000000000828"), 1)
545
654
  check_log2_floated(LongDecimal("0.0033222591362126245847176079734219269102990032888157967351353737817463383406363175903135730345286354858609181999523961456225622835123748782987926188031081"), 48)
546
655
  check_log2_floated(LongDecimal("0.000802000000000000000000197000000000000000000000302"), 84)
656
+ check_log2_floated(LongDecimal("0.00000000000000000000000000000000000000000000000000000000000000000000000452000000000069480"), 3)
657
+ check_log2_floated(LongDecimal("0.0000000000000000000000000000000000000000000000000000930000000000000000000000000983000000000000300"), 61)
658
+ check_log2_floated(LongDecimal("0.000000000000000000000000000000000000000000000000000000000086000133000000000000000000000000947"), 106)
659
+ check_log2_floated(LongDecimal("0.00000000000000000000000000000276000000000000000000000000000000000008560000000000000000000000000000161"), 81)
660
+
661
+ end
662
+
663
+ #
664
+ # test the calculation of the base-x-logarithm of sqrt(x)
665
+ #
666
+ def test_log_of_sqrt
667
+ # n = 125
668
+ n = 30
669
+ m = 5
670
+ xe = LongMath.sqrt(LongMath.exp(1, 2*n), n)
671
+ x2 = LongMath.sqrt(2, n)
672
+ x10 = LongMath.sqrt(10, n)
673
+
674
+ (2*m).times do |i|
675
+ check_log_floated(xe, n+m-i)
676
+ check_log2_floated(x2, n+m-i)
677
+ check_log10_floated(x10, n+m-i)
678
+ end
679
+
680
+ ye = check_log_floated(xe, n)
681
+ assert((ye*2).one?, "xe=#{xe} ye=#{ye}")
682
+ y2 = check_log2_floated(x2, n)
683
+ assert((y2*2).one?, "xe=#{x2} ye=#{y2}")
684
+ y10 = check_log10_floated(x10, n)
685
+ assert((y10*2).one?, "xe=#{x10} ye=#{y10}")
686
+
547
687
  end
548
688
 
549
689
 
@@ -1067,6 +1207,33 @@ class TestLongDecimal_class < RUNIT::TestCase
1067
1207
  assert_equal(4, LongMath.int_digits10(9999), "9999")
1068
1208
  end
1069
1209
 
1210
+ #
1211
+ # test LongMath.multiplicity_of_10(n)
1212
+ #
1213
+ def test_lm_multiplicity_of_10
1214
+ assert_equal(0, LongMath.multiplicity_of_10(-999), "-999")
1215
+ assert_equal(0, LongMath.multiplicity_of_10(-1), "-1")
1216
+ assert_equal(0, LongMath.multiplicity_of_10(-5), "-5")
1217
+ assert_equal(0, LongMath.multiplicity_of_10(1), "1")
1218
+ assert_equal(0, LongMath.multiplicity_of_10(2), "2")
1219
+ assert_equal(0, LongMath.multiplicity_of_10(8), "8")
1220
+ assert_equal(0, LongMath.multiplicity_of_10(1024), "1024")
1221
+ assert_equal(0, LongMath.multiplicity_of_10(5), "5")
1222
+ assert_equal(0, LongMath.multiplicity_of_10(625), "625")
1223
+ assert_equal(1, LongMath.multiplicity_of_10(-1230), "-1230")
1224
+ 10.times do |i|
1225
+ n = i*i+i+1
1226
+ while (n % 10) == 0 do
1227
+ n /= 10
1228
+ end
1229
+ 10.times do |j|
1230
+ m = j*j
1231
+ x = n * 10**m
1232
+ assert_equal(m, LongMath.multiplicity_of_10(x), "x=#{x} i=#{i} j=#{j} n=#{n} m=#{m}")
1233
+ end
1234
+ end
1235
+ end
1236
+
1070
1237
  #
1071
1238
  # test round_trailing_zeros of LongDecimal
1072
1239
  #
@@ -1530,6 +1697,16 @@ class TestLongDecimal_class < RUNIT::TestCase
1530
1697
  assert((l.to_f - 0.224).abs < 0.224 * 0.000001, "l=#{l.inspect}")
1531
1698
  l = LongDecimal(224, 4)
1532
1699
  assert((l.to_f - 0.0224).abs < 0.0224 * 0.000001, "l=#{l.inspect}")
1700
+
1701
+ l = LongDecimal("0." + ("0" * 30) + "1" + ("0" * 500))
1702
+ assert((l.to_f - 1e-31).abs < 1e-32, "l=#{l.inspect}=#{l.to_s}=#{l.to_f}=#{l.to_s.to_f}")
1703
+ l = LongDecimal("0." + ("0" * 200) + "1" + ("0" * 500))
1704
+ assert((l.to_f - 1e-201).abs < 1e-202, "l=#{l.inspect}=#{l.to_s}=#{l.to_f}=#{l.to_s.to_f}")
1705
+ l = LongDecimal("0." + ("0" * 280) + "1" + ("0" * 500))
1706
+ assert((l.to_f - 1e-281).abs < 1e-282, "l=#{l.inspect}=#{l.to_s}=#{l.to_f}=#{l.to_s.to_f}")
1707
+
1708
+ l = LongDecimal("0.00000000000000000000000000000000000000000000000000002090000000000000000000000000332000042999999999999999934478499999999999999999999979183597303900000000000002280678889571719972270000000870125632696979999999999928587104894304210318436999963636067429710015568287618182130517226303011944557351440293760289098908449297658922618709026683663019359834144789263320")
1709
+ assert((l.to_f - 0.0000000000000000000000000000000000000000000000000000209).abs < 1e-60, "l=#{l.inspect}")
1533
1710
  end
1534
1711
 
1535
1712
  #
@@ -2101,6 +2278,498 @@ class TestLongDecimal_class < RUNIT::TestCase
2101
2278
 
2102
2279
  end
2103
2280
 
2281
+ #
2282
+ # test division of LongDecimal
2283
+ #
2284
+ def test_divide
2285
+ x = LongDecimal(224, 2) # 2.24 dx=1 sx=2
2286
+
2287
+ y = LongDecimal(3, 1) # 0.3 dy=0 sy=1
2288
+ # 2dy+sy+sx-max(dx+sx,dy+sy)-3 = -3 -> use 0
2289
+ z = x.divide(y, LongMath::ROUND_DOWN)
2290
+ zz = Rational(224, 30).to_ld(0, LongMath::ROUND_DOWN)
2291
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2292
+ assert_equal(zz, z, "z=#{z.inspect}")
2293
+ z = x.divide(y, LongMath::ROUND_UP)
2294
+ zz = Rational(224, 30).to_ld(0, LongMath::ROUND_UP)
2295
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2296
+ assert_equal(zz, z, "z=#{z.inspect}")
2297
+ # 2dx+sx+sy-max(dx+sx,dy+sy)-3 = -1 -> use 0
2298
+ z = y.divide(x, LongMath::ROUND_DOWN)
2299
+ zz = Rational(30, 224).to_ld(0, LongMath::ROUND_DOWN)
2300
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2301
+ assert_equal(zz, z, "z=#{z.inspect}")
2302
+ z = y.divide(x, LongMath::ROUND_UP)
2303
+ zz = Rational(30, 224).to_ld(0, LongMath::ROUND_UP)
2304
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2305
+ assert_equal(zz, z, "z=#{z.inspect}")
2306
+
2307
+ # x= 2.24 dx=1 sx=2
2308
+ y = LongDecimal(30000000, 8) # 0.30000000 dy=0 sy=8
2309
+ # 2dy+sy+sx-max(dx+sx,dy+sy)-3 = -1 -> use 0
2310
+ z = x.divide(y, LongMath::ROUND_DOWN)
2311
+ zz = Rational(224, 30).to_ld(0, LongMath::ROUND_DOWN)
2312
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2313
+ assert_equal(zz, z, "z=#{z.inspect}")
2314
+ z = x.divide(y, LongMath::ROUND_UP)
2315
+ zz = Rational(224, 30).to_ld(0, LongMath::ROUND_UP)
2316
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2317
+ assert_equal(zz, z, "z=#{z.inspect}")
2318
+ # 2dx+sx+sy-max(dx+sx,dy+sy)-3 = 1
2319
+ z = y.divide(x, LongMath::ROUND_DOWN)
2320
+ zz = Rational(30, 224).to_ld(1, LongMath::ROUND_DOWN)
2321
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2322
+ assert_equal(zz, z, "z=#{z.inspect}")
2323
+ z = y.divide(x, LongMath::ROUND_UP)
2324
+ zz = Rational(30, 224).to_ld(1, LongMath::ROUND_UP)
2325
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2326
+ assert_equal(zz, z, "z=#{z.inspect}")
2327
+
2328
+ # x= 2.24 dx=1 sx=2
2329
+ y = LongDecimal(3, 4) # 0.0003 dy=-4 sy=4
2330
+ # 2dy+sy+sx-max(dx+sx,dy+sy)-3 = -8 -> use 0
2331
+ z = x.divide(y, LongMath::ROUND_DOWN)
2332
+ zz = Rational(22400, 3).to_ld(0, LongMath::ROUND_DOWN)
2333
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2334
+ assert_equal(zz, z, "z=#{z.inspect}")
2335
+ z = x.divide(y, LongMath::ROUND_UP)
2336
+ zz = Rational(22400, 3).to_ld(0, LongMath::ROUND_UP)
2337
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2338
+ assert_equal(zz, z, "z=#{z.inspect}")
2339
+ # 2dx+sx+sy-max(dx+sx,dy+sy)-3 = 2
2340
+ z = y.divide(x, LongMath::ROUND_DOWN)
2341
+ zz = Rational(3, 22400).to_ld(2, LongMath::ROUND_DOWN)
2342
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2343
+ assert_equal(zz, z, "z=#{z.inspect}")
2344
+ z = y.divide(x, LongMath::ROUND_UP)
2345
+ zz = Rational(3, 22400).to_ld(2, LongMath::ROUND_UP)
2346
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2347
+ assert_equal(zz, z, "z=#{z.inspect}")
2348
+
2349
+ # x= 2.24 dx=1 sx=2
2350
+ y = LongDecimal(3333, 2) # 33.33 dy=2 sy=2
2351
+ # 2dy+sy+sx-max(dx+sx,dy+sy)-3 = 1
2352
+ z = x.divide(y, LongMath::ROUND_DOWN)
2353
+ zz = Rational(224, 3333).to_ld(1, LongMath::ROUND_DOWN)
2354
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2355
+ assert_equal(zz, z, "z=#{z.inspect}")
2356
+ z = x.divide(y, LongMath::ROUND_UP)
2357
+ zz = Rational(224, 3333).to_ld(1, LongMath::ROUND_UP)
2358
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2359
+ assert_equal(zz, z, "z=#{z.inspect}")
2360
+ # 2dx+sx+sy-max(dx+sx,dy+sy)-3 = -1 -> use 0
2361
+ z = y.divide(x, LongMath::ROUND_DOWN)
2362
+ zz = Rational(3333, 224).to_ld(0, LongMath::ROUND_DOWN)
2363
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2364
+ assert_equal(zz, z, "z=#{z.inspect}")
2365
+ z = y.divide(x, LongMath::ROUND_UP)
2366
+ zz = Rational(3333, 224).to_ld(0, LongMath::ROUND_UP)
2367
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2368
+ assert_equal(zz, z, "z=#{z.inspect}")
2369
+
2370
+ # x= 2.24 dx=1 sx=2
2371
+ y = LongDecimal(33333, 2) # 333.33 dy=3 sy=2
2372
+ # 2dy+sy+sx-max(dx+sx,dy+sy)-3 = 2
2373
+ z = x.divide(y, LongMath::ROUND_DOWN)
2374
+ zz = Rational(224, 33333).to_ld(2, LongMath::ROUND_DOWN)
2375
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2376
+ assert_equal(zz, z, "z=#{z.inspect}")
2377
+ z = x.divide(y, LongMath::ROUND_UP)
2378
+ zz = Rational(224, 33333).to_ld(2, LongMath::ROUND_UP)
2379
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2380
+ assert_equal(zz, z, "z=#{z.inspect}")
2381
+ # 2dx+sx+sy-max(dx+sx,dy+sy)-3 = -2 -> use 0
2382
+ z = y.divide(x, LongMath::ROUND_DOWN)
2383
+ zz = Rational(33333, 224).to_ld(0, LongMath::ROUND_DOWN)
2384
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2385
+ assert_equal(zz, z, "z=#{z.inspect}")
2386
+ z = y.divide(x, LongMath::ROUND_UP)
2387
+ zz = Rational(33333, 224).to_ld(0, LongMath::ROUND_UP)
2388
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2389
+ assert_equal(zz, z, "z=#{z.inspect}")
2390
+
2391
+ # x= 2.24 dx=1 sx=2
2392
+ y = LongDecimal(33333, 3) # 33.333 dy=2 sy=3
2393
+ # 2dy+sy+sx-max(dx+sx,dy+sy)-3 = 1
2394
+ z = x.divide(y, LongMath::ROUND_DOWN)
2395
+ zz = Rational(2240, 33333).to_ld(1, LongMath::ROUND_DOWN)
2396
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2397
+ assert_equal(zz, z, "z=#{z.inspect}")
2398
+ z = x.divide(y, LongMath::ROUND_UP)
2399
+ zz = Rational(2240, 33333).to_ld(1, LongMath::ROUND_UP)
2400
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2401
+ assert_equal(zz, z, "z=#{z.inspect}")
2402
+ # 2dx+sx+sy-max(dx+sx,dy+sy)-3 = -1 -> use 0
2403
+ z = y.divide(x, LongMath::ROUND_DOWN)
2404
+ zz = Rational(33333, 2240).to_ld(0, LongMath::ROUND_DOWN)
2405
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2406
+ assert_equal(zz, z, "z=#{z.inspect}")
2407
+ z = y.divide(x, LongMath::ROUND_UP)
2408
+ zz = Rational(33333, 2240).to_ld(0, LongMath::ROUND_UP)
2409
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2410
+ assert_equal(zz, z, "z=#{z.inspect}")
2411
+
2412
+ # x= 2.24 dx=1 sx=2
2413
+ y = LongDecimal(3333, 3) # 3.333 dy=1 sy=3
2414
+ # 2dy+sy+sx-max(dx+sx,dy+sy)-3 = 0
2415
+ z = x.divide(y, LongMath::ROUND_DOWN)
2416
+ zz = Rational(2240, 3333).to_ld(0, LongMath::ROUND_DOWN)
2417
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2418
+ assert_equal(zz, z, "z=#{z.inspect}")
2419
+ z = x.divide(y, LongMath::ROUND_UP)
2420
+ zz = Rational(2240, 3333).to_ld(0, LongMath::ROUND_UP)
2421
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2422
+ assert_equal(zz, z, "z=#{z.inspect}")
2423
+ # 2dx+sx+sy-max(dx+sx,dy+sy)-3 = 0
2424
+ z = y.divide(x, LongMath::ROUND_DOWN)
2425
+ zz = Rational(3333, 2240).to_ld(0, LongMath::ROUND_DOWN)
2426
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2427
+ assert_equal(zz, z, "z=#{z.inspect}")
2428
+ z = y.divide(x, LongMath::ROUND_UP)
2429
+ zz = Rational(3333, 2240).to_ld(0, LongMath::ROUND_UP)
2430
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2431
+ assert_equal(zz, z, "z=#{z.inspect}")
2432
+
2433
+ # x= 2.24 dx=1 sx=2
2434
+ y = LongDecimal(123456789, 3) # 123456.789 dy=6 sy=3
2435
+ # 2dy+sy+sx-max(dx+sx,dy+sy)-3 = 5
2436
+ z = x.divide(y, LongMath::ROUND_DOWN)
2437
+ zz = Rational(2240, 123456789).to_ld(5, LongMath::ROUND_DOWN)
2438
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2439
+ assert_equal(zz, z, "z=#{z.inspect}")
2440
+ z = x.divide(y, LongMath::ROUND_UP)
2441
+ zz = Rational(2240, 123456789).to_ld(5, LongMath::ROUND_UP)
2442
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2443
+ assert_equal(zz, z, "z=#{z.inspect}")
2444
+ # 2dx+sx+sy-max(dx+sx,dy+sy)-3 = -5 -> use 0
2445
+ z = y.divide(x, LongMath::ROUND_DOWN)
2446
+ zz = Rational(123456789, 2240).to_ld(0, LongMath::ROUND_DOWN)
2447
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2448
+ assert_equal(zz, z, "z=#{z.inspect}")
2449
+ z = y.divide(x, LongMath::ROUND_UP)
2450
+ zz = Rational(123456789, 2240).to_ld(0, LongMath::ROUND_UP)
2451
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2452
+ assert_equal(zz, z, "z=#{z.inspect}")
2453
+
2454
+ # x= 2.24 dx=1 sx=2
2455
+ y = 5.to_ld # 5 dy=1 sy=0
2456
+ # 2dy+sy+sx-max(dx+sx,dy+sy)-3 = -2 -> use 0
2457
+ z = x.divide(y, LongMath::ROUND_DOWN)
2458
+ zz = Rational(224, 500).to_ld(0, LongMath::ROUND_DOWN)
2459
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2460
+ assert_equal(zz, z, "z=#{z.inspect}")
2461
+ z = x.divide(y, LongMath::ROUND_UP)
2462
+ zz = Rational(224, 500).to_ld(0, LongMath::ROUND_UP)
2463
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2464
+ assert_equal(zz, z, "z=#{z.inspect}")
2465
+ # 2dx+sx+sy-max(dx+sx,dy+sy)-3 = -2 -> use 0
2466
+ z = y.divide(x, LongMath::ROUND_DOWN)
2467
+ zz = Rational(500, 224).to_ld(0, LongMath::ROUND_DOWN)
2468
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2469
+ assert_equal(zz, z, "z=#{z.inspect}")
2470
+ z = y.divide(x, LongMath::ROUND_UP)
2471
+ zz = Rational(500, 224).to_ld(0, LongMath::ROUND_UP)
2472
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2473
+ assert_equal(zz, z, "z=#{z.inspect}")
2474
+
2475
+ # x= 2.24 dx=1 sx=2
2476
+ y = 5.001.to_ld # dy=1 sy=3
2477
+ # 2dy+sy+sx-max(dx+sx,dy+sy)-3 = 0
2478
+ z = x.divide(y, LongMath::ROUND_DOWN)
2479
+ zz = Rational(224, 500).to_ld(0, LongMath::ROUND_DOWN)
2480
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2481
+ assert_equal(zz, z, "z=#{z.inspect}")
2482
+ z = x.divide(y, LongMath::ROUND_UP)
2483
+ zz = Rational(224, 500).to_ld(0, LongMath::ROUND_UP)
2484
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2485
+ assert_equal(zz, z, "z=#{z.inspect}")
2486
+ # 2dx+sx+sy-max(dx+sx,dy+sy)-3 = 0
2487
+ z = y.divide(x, LongMath::ROUND_DOWN)
2488
+ zz = Rational(500, 224).to_ld(0, LongMath::ROUND_DOWN)
2489
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2490
+ assert_equal(zz, z, "z=#{z.inspect}")
2491
+ z = y.divide(x, LongMath::ROUND_UP)
2492
+ zz = Rational(500, 224).to_ld(0, LongMath::ROUND_UP)
2493
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2494
+ assert_equal(zz, z, "z=#{z.inspect}")
2495
+
2496
+ y = Rational(5, 3).to_ld
2497
+ # y is has no scale, use scale of x
2498
+ z = x.divide(y, LongMath::ROUND_DOWN)
2499
+ zz = Rational(224*3, 500).to_ld(0, LongMath::ROUND_DOWN)
2500
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2501
+ assert_equal(zz, z, "z=#{z.inspect}")
2502
+ z = x.divide(y, LongMath::ROUND_UP)
2503
+ zz = Rational(224*3, 500).to_ld(0, LongMath::ROUND_UP)
2504
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2505
+ assert_equal(zz, z, "z=#{z.inspect}")
2506
+ # y is has no scale, use scale of x
2507
+ z = y.divide(x, LongMath::ROUND_DOWN)
2508
+ zz = Rational(500, 224*3).to_ld(0, LongMath::ROUND_DOWN)
2509
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2510
+ assert_equal(zz, z, "z=#{z.inspect}")
2511
+ z = y.divide(x, LongMath::ROUND_UP)
2512
+ zz = Rational(500, 224*3).to_ld(0, LongMath::ROUND_UP)
2513
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2514
+ assert_equal(zz, z, "z=#{z.inspect}")
2515
+
2516
+ y = LongDecimalQuot(Rational(5, 3), 3).to_ld
2517
+ z = x.divide(y, LongMath::ROUND_DOWN)
2518
+ zz = Rational(224*3, 500).to_ld(0, LongMath::ROUND_DOWN)
2519
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2520
+ assert_equal(zz, z, "z=#{z.inspect}")
2521
+ z = x.divide(y, LongMath::ROUND_UP)
2522
+ zz = Rational(224*3, 500).to_ld(0, LongMath::ROUND_UP)
2523
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2524
+ assert_equal(zz, z, "z=#{z.inspect}")
2525
+ z = y.divide(x, LongMath::ROUND_DOWN)
2526
+ zz = Rational(500, 224*3).to_ld(0, LongMath::ROUND_DOWN)
2527
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2528
+ assert_equal(zz, z, "z=#{z.inspect}")
2529
+ z = y.divide(x, LongMath::ROUND_UP)
2530
+ zz = Rational(500, 224*3).to_ld(0, LongMath::ROUND_UP)
2531
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2532
+ assert_equal(zz, z, "z=#{z.inspect}")
2533
+
2534
+ y = Complex(5, 3)
2535
+ z = x.divide(y, LongMath::ROUND_DOWN)
2536
+ zz = 2.24 / Complex(5, 3)
2537
+ assert_kind_of(Complex, z, "z=#{z.inspect}")
2538
+ assert((zz-z).abs < 1e-9, "z=#{z.inspect}")
2539
+
2540
+ end # test_divide
2541
+
2542
+ #
2543
+ # test division of LongDecimal
2544
+ #
2545
+ def test_divide_s
2546
+ x = LongDecimal(224, 2) # 2.24
2547
+
2548
+ y = LongDecimal(3, 1) # 0.3
2549
+ z = x.divide_s(y, 1, LongMath::ROUND_DOWN)
2550
+ zz = Rational(224, 30).to_ld(1, LongMath::ROUND_DOWN)
2551
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2552
+ assert_equal(zz, z, "z=#{z.inspect}")
2553
+ z = x.divide_s(y, 1, LongMath::ROUND_UP)
2554
+ zz = Rational(224, 30).to_ld(1, LongMath::ROUND_UP)
2555
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2556
+ assert_equal(zz, z, "z=#{z.inspect}")
2557
+ z = y.divide_s(x, 1, LongMath::ROUND_DOWN)
2558
+ zz = Rational(30, 224).to_ld(1, LongMath::ROUND_DOWN)
2559
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2560
+ assert_equal(zz, z, "z=#{z.inspect}")
2561
+ z = y.divide_s(x, 1, LongMath::ROUND_UP)
2562
+ zz = Rational(30, 224).to_ld(1, LongMath::ROUND_UP)
2563
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2564
+ assert_equal(zz, z, "z=#{z.inspect}")
2565
+
2566
+ y = LongDecimal(30000000, 8) # 0.30000000
2567
+ z = x.divide_s(y, 1, LongMath::ROUND_DOWN)
2568
+ zz = Rational(224, 30).to_ld(1, LongMath::ROUND_DOWN)
2569
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2570
+ assert_equal(zz, z, "z=#{z.inspect}")
2571
+ z = x.divide_s(y, 1, LongMath::ROUND_UP)
2572
+ zz = Rational(224, 30).to_ld(1, LongMath::ROUND_UP)
2573
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2574
+ assert_equal(zz, z, "z=#{z.inspect}")
2575
+ z = y.divide_s(x, 2, LongMath::ROUND_DOWN)
2576
+ zz = Rational(30, 224).to_ld(2, LongMath::ROUND_DOWN)
2577
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2578
+ assert_equal(zz, z, "z=#{z.inspect}")
2579
+ z = y.divide_s(x, 20, LongMath::ROUND_UP)
2580
+ zz = Rational(30, 224).to_ld(20, LongMath::ROUND_UP)
2581
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2582
+ assert_equal(zz, z, "z=#{z.inspect}")
2583
+
2584
+ y = LongDecimal(3, 4) # 0.0003
2585
+ z = x.divide_s(y, 2, LongMath::ROUND_DOWN)
2586
+ zz = Rational(22400, 3).to_ld(2, LongMath::ROUND_DOWN)
2587
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2588
+ assert_equal(zz, z, "z=#{z.inspect}")
2589
+ z = x.divide_s(y, 2, LongMath::ROUND_UP)
2590
+ zz = Rational(22400, 3).to_ld(2, LongMath::ROUND_UP)
2591
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2592
+ assert_equal(zz, z, "z=#{z.inspect}")
2593
+ z = y.divide_s(x, 3, LongMath::ROUND_DOWN)
2594
+ zz = Rational(3, 22400).to_ld(3, LongMath::ROUND_DOWN)
2595
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2596
+ assert_equal(zz, z, "z=#{z.inspect}")
2597
+ z = y.divide_s(x, 2, LongMath::ROUND_UP)
2598
+ zz = Rational(3, 22400).to_ld(2, LongMath::ROUND_UP)
2599
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2600
+ assert_equal(zz, z, "z=#{z.inspect}")
2601
+
2602
+ y = LongDecimal(3333, 2) # 33.33
2603
+ z = x.divide_s(y, 4, LongMath::ROUND_DOWN)
2604
+ zz = Rational(224, 3333).to_ld(4, LongMath::ROUND_DOWN)
2605
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2606
+ assert_equal(zz, z, "z=#{z.inspect}")
2607
+ z = x.divide_s(y, 30, LongMath::ROUND_UP)
2608
+ zz = Rational(224, 3333).to_ld(30, LongMath::ROUND_UP)
2609
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2610
+ assert_equal(zz, z, "z=#{z.inspect}")
2611
+ z = y.divide_s(x, 4, LongMath::ROUND_DOWN)
2612
+ zz = Rational(3333, 224).to_ld(4, LongMath::ROUND_DOWN)
2613
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2614
+ assert_equal(zz, z, "z=#{z.inspect}")
2615
+ z = y.divide_s(x, 1, LongMath::ROUND_UP)
2616
+ zz = Rational(3333, 224).to_ld(1, LongMath::ROUND_UP)
2617
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2618
+ assert_equal(zz, z, "z=#{z.inspect}")
2619
+
2620
+ y = LongDecimal(33333, 2) # 333.33
2621
+ z = x.divide_s(y, 3, LongMath::ROUND_DOWN)
2622
+ zz = Rational(224, 33333).to_ld(3, LongMath::ROUND_DOWN)
2623
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2624
+ assert_equal(zz, z, "z=#{z.inspect}")
2625
+ z = x.divide_s(y, 3, LongMath::ROUND_UP)
2626
+ zz = Rational(224, 33333).to_ld(3, LongMath::ROUND_UP)
2627
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2628
+ assert_equal(zz, z, "z=#{z.inspect}")
2629
+ z = y.divide_s(x, 33, LongMath::ROUND_DOWN)
2630
+ zz = Rational(33333, 224).to_ld(33, LongMath::ROUND_DOWN)
2631
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2632
+ assert_equal(zz, z, "z=#{z.inspect}")
2633
+ z = y.divide_s(x, 4, LongMath::ROUND_UP)
2634
+ zz = Rational(33333, 224).to_ld(4, LongMath::ROUND_UP)
2635
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2636
+ assert_equal(zz, z, "z=#{z.inspect}")
2637
+
2638
+ y = LongDecimal(33333, 3) # 33.333
2639
+ z = x.divide_s(y, 2, LongMath::ROUND_DOWN)
2640
+ zz = Rational(2240, 33333).to_ld(2, LongMath::ROUND_DOWN)
2641
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2642
+ assert_equal(zz, z, "z=#{z.inspect}")
2643
+ z = x.divide_s(y, 2, LongMath::ROUND_UP)
2644
+ zz = Rational(2240, 33333).to_ld(2, LongMath::ROUND_UP)
2645
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2646
+ assert_equal(zz, z, "z=#{z.inspect}")
2647
+ z = y.divide_s(x, 2, LongMath::ROUND_DOWN)
2648
+ zz = Rational(33333, 2240).to_ld(2, LongMath::ROUND_DOWN)
2649
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2650
+ assert_equal(zz, z, "z=#{z.inspect}")
2651
+ z = y.divide_s(x, 1, LongMath::ROUND_UP)
2652
+ zz = Rational(33333, 2240).to_ld(1, LongMath::ROUND_UP)
2653
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2654
+ assert_equal(zz, z, "z=#{z.inspect}")
2655
+
2656
+ y = LongDecimal(3333, 3) # 3.333
2657
+ z = x.divide_s(y, 1, LongMath::ROUND_DOWN)
2658
+ zz = Rational(2240, 3333).to_ld(1, LongMath::ROUND_DOWN)
2659
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2660
+ assert_equal(zz, z, "z=#{z.inspect}")
2661
+ z = x.divide_s(y, 1, LongMath::ROUND_UP)
2662
+ zz = Rational(2240, 3333).to_ld(1, LongMath::ROUND_UP)
2663
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2664
+ assert_equal(zz, z, "z=#{z.inspect}")
2665
+ z = y.divide_s(x, 1, LongMath::ROUND_DOWN)
2666
+ zz = Rational(3333, 2240).to_ld(1, LongMath::ROUND_DOWN)
2667
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2668
+ assert_equal(zz, z, "z=#{z.inspect}")
2669
+ z = y.divide_s(x, 1, LongMath::ROUND_UP)
2670
+ zz = Rational(3333, 2240).to_ld(1, LongMath::ROUND_UP)
2671
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2672
+ assert_equal(zz, z, "z=#{z.inspect}")
2673
+
2674
+ y = LongDecimal(123456789, 3) # 123456.789
2675
+ z = x.divide_s(y, 3, LongMath::ROUND_DOWN)
2676
+ zz = Rational(2240, 123456789).to_ld(3, LongMath::ROUND_DOWN)
2677
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2678
+ assert_equal(zz, z, "z=#{z.inspect}")
2679
+ z = x.divide_s(y, 7, LongMath::ROUND_UP)
2680
+ zz = Rational(2240, 123456789).to_ld(7, LongMath::ROUND_UP)
2681
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2682
+ assert_equal(zz, z, "z=#{z.inspect}")
2683
+ z = y.divide_s(x, 0, LongMath::ROUND_DOWN)
2684
+ zz = Rational(123456789, 2240).to_ld(0, LongMath::ROUND_DOWN)
2685
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2686
+ assert_equal(zz, z, "z=#{z.inspect}")
2687
+ z = y.divide_s(x, 9, LongMath::ROUND_UP)
2688
+ zz = Rational(123456789, 2240).to_ld(9, LongMath::ROUND_UP)
2689
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2690
+ assert_equal(zz, z, "z=#{z.inspect}")
2691
+
2692
+ y = 5.to_ld # 5
2693
+ z = x.divide_s(y, 1, LongMath::ROUND_DOWN)
2694
+ zz = Rational(224, 500).to_ld(1, LongMath::ROUND_DOWN)
2695
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2696
+ assert_equal(zz, z, "z=#{z.inspect}")
2697
+ z = x.divide_s(y, 1, LongMath::ROUND_UP)
2698
+ zz = Rational(224, 500).to_ld(1, LongMath::ROUND_UP)
2699
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2700
+ assert_equal(zz, z, "z=#{z.inspect}")
2701
+ z = y.divide_s(x, 1, LongMath::ROUND_DOWN)
2702
+ zz = Rational(500, 224).to_ld(1, LongMath::ROUND_DOWN)
2703
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2704
+ assert_equal(zz, z, "z=#{z.inspect}")
2705
+ z = y.divide_s(x, 1, LongMath::ROUND_UP)
2706
+ zz = Rational(500, 224).to_ld(1, LongMath::ROUND_UP)
2707
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2708
+ assert_equal(zz, z, "z=#{z.inspect}")
2709
+
2710
+ y = 5.001.to_ld # 5.001
2711
+ z = x.divide_s(y, 1, LongMath::ROUND_DOWN)
2712
+ zz = Rational(224, 500).to_ld(1, LongMath::ROUND_DOWN)
2713
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2714
+ assert_equal(zz, z, "z=#{z.inspect}")
2715
+ z = x.divide_s(y, 1, LongMath::ROUND_UP)
2716
+ zz = Rational(224, 500).to_ld(1, LongMath::ROUND_UP)
2717
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2718
+ assert_equal(zz, z, "z=#{z.inspect}")
2719
+ z = y.divide_s(x, 1, LongMath::ROUND_DOWN)
2720
+ zz = Rational(500, 224).to_ld(1, LongMath::ROUND_DOWN)
2721
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2722
+ assert_equal(zz, z, "z=#{z.inspect}")
2723
+ z = y.divide_s(x, 1, LongMath::ROUND_UP)
2724
+ zz = Rational(500, 224).to_ld(1, LongMath::ROUND_UP)
2725
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2726
+ assert_equal(zz, z, "z=#{z.inspect}")
2727
+
2728
+ y = Rational(5, 3).to_ld(3) # 1.667
2729
+ z = x.divide_s(y, 4, LongMath::ROUND_DOWN)
2730
+ zz = Rational(2240, 1667).to_ld(4, LongMath::ROUND_DOWN)
2731
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2732
+ assert_equal(zz, z, "x=#{x} y=#{y} z=#{z} z=#{z.inspect}")
2733
+ z = x.divide_s(y, 1, LongMath::ROUND_UP)
2734
+ zz = Rational(2240, 1667).to_ld(1, LongMath::ROUND_UP)
2735
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2736
+ assert_equal(zz, z, "z=#{z.inspect}")
2737
+ # y is has no scale, use scale of x
2738
+ z = y.divide_s(x, 1, LongMath::ROUND_DOWN)
2739
+ zz = Rational(1667, 2240).to_ld(1, LongMath::ROUND_DOWN)
2740
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2741
+ assert_equal(zz, z, "z=#{z.inspect}")
2742
+ z = y.divide_s(x, 1, LongMath::ROUND_UP)
2743
+ zz = Rational(1667, 2240).to_ld(1, LongMath::ROUND_UP)
2744
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2745
+ assert_equal(zz, z, "z=#{z.inspect}")
2746
+
2747
+ y = LongDecimalQuot(Rational(5, 3), 3).to_ld
2748
+ z = x.divide_s(y, 1, LongMath::ROUND_DOWN)
2749
+ zz = Rational(2240, 1667).to_ld(1, LongMath::ROUND_DOWN)
2750
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2751
+ assert_equal(zz, z, "z=#{z.inspect}")
2752
+ z = x.divide_s(y, 1, LongMath::ROUND_UP)
2753
+ zz = Rational(2240, 1667).to_ld(1, LongMath::ROUND_UP)
2754
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2755
+ assert_equal(zz, z, "z=#{z.inspect}")
2756
+ z = y.divide_s(x, 2, LongMath::ROUND_DOWN)
2757
+ zz = Rational(1667, 2240).to_ld(2, LongMath::ROUND_DOWN)
2758
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2759
+ assert_equal(zz, z, "z=#{z.inspect}")
2760
+ z = y.divide_s(x, 224, LongMath::ROUND_UP)
2761
+ zz = Rational(1667, 2240).to_ld(224, LongMath::ROUND_UP)
2762
+ assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
2763
+ assert_equal(zz, z, "z=#{z.inspect}")
2764
+
2765
+ y = Complex(5, 3)
2766
+ z = x.divide_s(y, 2, LongMath::ROUND_DOWN)
2767
+ zz = 2.24 / Complex(5, 3)
2768
+ assert_kind_of(Complex, z, "z=#{z.inspect}")
2769
+ assert((zz-z).abs < 1e-9, "z=#{z.inspect}")
2770
+
2771
+ end # test_divide_s
2772
+
2104
2773
  #
2105
2774
  # test square of LongDecimal
2106
2775
  #
@@ -2951,7 +3620,7 @@ class TestLongDecimal_class < RUNIT::TestCase
2951
3620
  end
2952
3621
 
2953
3622
  #
2954
- # test .unit() of LongDecimal
3623
+ # test unit() of LongDecimal
2955
3624
  #
2956
3625
  def test_unit
2957
3626
  10.times do |i|
@@ -2959,9 +3628,39 @@ class TestLongDecimal_class < RUNIT::TestCase
2959
3628
  u = x.unit
2960
3629
  v = LongDecimal(1, i)
2961
3630
  assert_equal(u, v, "unit i=#{i}")
2962
- x = i.to_ld(i*i)
3631
+ n = i*i
3632
+ x = i.to_ld(n)
2963
3633
  u = x.unit
2964
- v = LongDecimal(1, i*i)
3634
+ v = LongDecimal(1, n)
3635
+ assert_equal(u, v, "unit i=#{i}")
3636
+ n = i*i+i
3637
+ x = (-i).to_ld(n)
3638
+ u = x.unit
3639
+ v = LongDecimal(1, n)
3640
+ assert_equal(u, v, "unit i=#{i}")
3641
+ end
3642
+ end
3643
+
3644
+ #
3645
+ # test sunit() of LongDecimal
3646
+ #
3647
+ def test_sunit
3648
+ 10.times do |i|
3649
+ x = LongDecimal.zero!(i)
3650
+ u = x.sunit
3651
+ v = LongDecimal(0, i)
3652
+ assert_equal(u, v, "unit i=#{i}")
3653
+ n = i*i
3654
+ k = 2*i+1
3655
+ x = k.to_ld(n)
3656
+ u = x.sunit
3657
+ v = LongDecimal(1, n)
3658
+ assert_equal(u, v, "unit i=#{i}")
3659
+ n = i*i+i
3660
+ k = -2*i-1
3661
+ x = k.to_ld(n)
3662
+ u = x.sunit
3663
+ v = LongDecimal(-1, n)
2965
3664
  assert_equal(u, v, "unit i=#{i}")
2966
3665
  end
2967
3666
  end
@@ -4155,21 +4854,37 @@ class TestLongDecimal_class < RUNIT::TestCase
4155
4854
  assert_equal(x, x, "x equals x")
4156
4855
  assert_equal(y, y, "y equals y")
4157
4856
  end
4158
-
4159
- #
4160
- # test inverse of RoundingMode
4161
- #
4162
- def test_rm_inverse
4163
- assert_equal(LongMath::ROUND_UP, LongMath::ROUND_DOWN.inverse)
4164
- assert_equal(LongMath::ROUND_DOWN, LongMath::ROUND_UP.inverse)
4165
- assert_equal(LongMath::ROUND_CEILING, LongMath::ROUND_FLOOR.inverse)
4166
- assert_equal(LongMath::ROUND_FLOOR, LongMath::ROUND_CEILING.inverse)
4167
- assert_equal(LongMath::ROUND_HALF_UP, LongMath::ROUND_HALF_DOWN.inverse)
4168
- assert_equal(LongMath::ROUND_HALF_DOWN, LongMath::ROUND_HALF_UP.inverse)
4169
- assert_equal(LongMath::ROUND_HALF_CEILING, LongMath::ROUND_HALF_FLOOR.inverse)
4170
- assert_equal(LongMath::ROUND_HALF_FLOOR, LongMath::ROUND_HALF_CEILING.inverse)
4171
- assert_equal(LongMath::ROUND_HALF_EVEN, LongMath::ROUND_HALF_EVEN.inverse)
4172
- assert_equal(LongMath::ROUND_UNNECESSARY, LongMath::ROUND_UNNECESSARY.inverse)
4857
+
4858
+ #
4859
+ # test mul minverse of RoundingMode
4860
+ #
4861
+ def test_rm_minverse
4862
+ assert_equal(LongMath::ROUND_UP, LongMath::ROUND_DOWN.minverse)
4863
+ assert_equal(LongMath::ROUND_DOWN, LongMath::ROUND_UP.minverse)
4864
+ assert_equal(LongMath::ROUND_CEILING, LongMath::ROUND_FLOOR.minverse)
4865
+ assert_equal(LongMath::ROUND_FLOOR, LongMath::ROUND_CEILING.minverse)
4866
+ assert_equal(LongMath::ROUND_HALF_UP, LongMath::ROUND_HALF_DOWN.minverse)
4867
+ assert_equal(LongMath::ROUND_HALF_DOWN, LongMath::ROUND_HALF_UP.minverse)
4868
+ assert_equal(LongMath::ROUND_HALF_CEILING, LongMath::ROUND_HALF_FLOOR.minverse)
4869
+ assert_equal(LongMath::ROUND_HALF_FLOOR, LongMath::ROUND_HALF_CEILING.minverse)
4870
+ assert_equal(LongMath::ROUND_HALF_EVEN, LongMath::ROUND_HALF_EVEN.minverse)
4871
+ assert_equal(LongMath::ROUND_UNNECESSARY, LongMath::ROUND_UNNECESSARY.minverse)
4872
+ end
4873
+
4874
+ #
4875
+ # test ainverse of RoundingMode
4876
+ #
4877
+ def test_rm_ainverse
4878
+ assert_equal(LongMath::ROUND_UP, LongMath::ROUND_UP.ainverse)
4879
+ assert_equal(LongMath::ROUND_DOWN, LongMath::ROUND_DOWN.ainverse)
4880
+ assert_equal(LongMath::ROUND_CEILING, LongMath::ROUND_FLOOR.ainverse)
4881
+ assert_equal(LongMath::ROUND_FLOOR, LongMath::ROUND_CEILING.ainverse)
4882
+ assert_equal(LongMath::ROUND_HALF_UP, LongMath::ROUND_HALF_UP.ainverse)
4883
+ assert_equal(LongMath::ROUND_HALF_DOWN, LongMath::ROUND_HALF_DOWN.ainverse)
4884
+ assert_equal(LongMath::ROUND_HALF_CEILING, LongMath::ROUND_HALF_FLOOR.ainverse)
4885
+ assert_equal(LongMath::ROUND_HALF_FLOOR, LongMath::ROUND_HALF_CEILING.ainverse)
4886
+ assert_equal(LongMath::ROUND_HALF_EVEN, LongMath::ROUND_HALF_EVEN.ainverse)
4887
+ assert_equal(LongMath::ROUND_UNNECESSARY, LongMath::ROUND_UNNECESSARY.ainverse)
4173
4888
  end
4174
4889
 
4175
4890