dqToIntegral.decTest 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257
  1. ------------------------------------------------------------------------
  2. -- dqToIntegral.decTest -- round Quad to integral value --
  3. -- Copyright (c) IBM Corporation, 2001, 2008. All rights reserved. --
  4. ------------------------------------------------------------------------
  5. -- Please see the document "General Decimal Arithmetic Testcases" --
  6. -- at http://www2.hursley.ibm.com/decimal for the description of --
  7. -- these testcases. --
  8. -- --
  9. -- These testcases are experimental ('beta' versions), and they --
  10. -- may contain errors. They are offered on an as-is basis. In --
  11. -- particular, achieving the same results as the tests here is not --
  12. -- a guarantee that an implementation complies with any Standard --
  13. -- or specification. The tests are not exhaustive. --
  14. -- --
  15. -- Please send comments, suggestions, and corrections to the author: --
  16. -- Mike Cowlishaw, IBM Fellow --
  17. -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK --
  18. -- mfc@uk.ibm.com --
  19. ------------------------------------------------------------------------
  20. version: 2.59
  21. -- This set of tests tests the extended specification 'round-to-integral
  22. -- value-exact' operations (from IEEE 854, later modified in 754r).
  23. -- All non-zero results are defined as being those from either copy or
  24. -- quantize, so those are assumed to have been tested extensively
  25. -- elsewhere; the tests here are for integrity, rounding mode, etc.
  26. -- Also, it is assumed the test harness will use these tests for both
  27. -- ToIntegralExact (which does set Inexact) and the fixed-name
  28. -- functions (which do not set Inexact).
  29. -- Note that decNumber implements an earlier definition of toIntegral
  30. -- which never sets Inexact; the decTest operator for that is called
  31. -- 'tointegral' instead of 'tointegralx'.
  32. extended: 1
  33. clamp: 1
  34. precision: 34
  35. maxExponent: 6144
  36. minExponent: -6143
  37. rounding: half_even
  38. dqintx001 tointegralx 0 -> 0
  39. dqintx002 tointegralx 0.0 -> 0
  40. dqintx003 tointegralx 0.1 -> 0 Inexact Rounded
  41. dqintx004 tointegralx 0.2 -> 0 Inexact Rounded
  42. dqintx005 tointegralx 0.3 -> 0 Inexact Rounded
  43. dqintx006 tointegralx 0.4 -> 0 Inexact Rounded
  44. dqintx007 tointegralx 0.5 -> 0 Inexact Rounded
  45. dqintx008 tointegralx 0.6 -> 1 Inexact Rounded
  46. dqintx009 tointegralx 0.7 -> 1 Inexact Rounded
  47. dqintx010 tointegralx 0.8 -> 1 Inexact Rounded
  48. dqintx011 tointegralx 0.9 -> 1 Inexact Rounded
  49. dqintx012 tointegralx 1 -> 1
  50. dqintx013 tointegralx 1.0 -> 1 Rounded
  51. dqintx014 tointegralx 1.1 -> 1 Inexact Rounded
  52. dqintx015 tointegralx 1.2 -> 1 Inexact Rounded
  53. dqintx016 tointegralx 1.3 -> 1 Inexact Rounded
  54. dqintx017 tointegralx 1.4 -> 1 Inexact Rounded
  55. dqintx018 tointegralx 1.5 -> 2 Inexact Rounded
  56. dqintx019 tointegralx 1.6 -> 2 Inexact Rounded
  57. dqintx020 tointegralx 1.7 -> 2 Inexact Rounded
  58. dqintx021 tointegralx 1.8 -> 2 Inexact Rounded
  59. dqintx022 tointegralx 1.9 -> 2 Inexact Rounded
  60. -- negatives
  61. dqintx031 tointegralx -0 -> -0
  62. dqintx032 tointegralx -0.0 -> -0
  63. dqintx033 tointegralx -0.1 -> -0 Inexact Rounded
  64. dqintx034 tointegralx -0.2 -> -0 Inexact Rounded
  65. dqintx035 tointegralx -0.3 -> -0 Inexact Rounded
  66. dqintx036 tointegralx -0.4 -> -0 Inexact Rounded
  67. dqintx037 tointegralx -0.5 -> -0 Inexact Rounded
  68. dqintx038 tointegralx -0.6 -> -1 Inexact Rounded
  69. dqintx039 tointegralx -0.7 -> -1 Inexact Rounded
  70. dqintx040 tointegralx -0.8 -> -1 Inexact Rounded
  71. dqintx041 tointegralx -0.9 -> -1 Inexact Rounded
  72. dqintx042 tointegralx -1 -> -1
  73. dqintx043 tointegralx -1.0 -> -1 Rounded
  74. dqintx044 tointegralx -1.1 -> -1 Inexact Rounded
  75. dqintx045 tointegralx -1.2 -> -1 Inexact Rounded
  76. dqintx046 tointegralx -1.3 -> -1 Inexact Rounded
  77. dqintx047 tointegralx -1.4 -> -1 Inexact Rounded
  78. dqintx048 tointegralx -1.5 -> -2 Inexact Rounded
  79. dqintx049 tointegralx -1.6 -> -2 Inexact Rounded
  80. dqintx050 tointegralx -1.7 -> -2 Inexact Rounded
  81. dqintx051 tointegralx -1.8 -> -2 Inexact Rounded
  82. dqintx052 tointegralx -1.9 -> -2 Inexact Rounded
  83. -- next two would be NaN using quantize(x, 0)
  84. dqintx053 tointegralx 10E+60 -> 1.0E+61
  85. dqintx054 tointegralx -10E+60 -> -1.0E+61
  86. -- numbers around precision
  87. dqintx060 tointegralx '56267E-17' -> '0' Inexact Rounded
  88. dqintx061 tointegralx '56267E-5' -> '1' Inexact Rounded
  89. dqintx062 tointegralx '56267E-2' -> '563' Inexact Rounded
  90. dqintx063 tointegralx '56267E-1' -> '5627' Inexact Rounded
  91. dqintx065 tointegralx '56267E-0' -> '56267'
  92. dqintx066 tointegralx '56267E+0' -> '56267'
  93. dqintx067 tointegralx '56267E+1' -> '5.6267E+5'
  94. dqintx068 tointegralx '56267E+9' -> '5.6267E+13'
  95. dqintx069 tointegralx '56267E+10' -> '5.6267E+14'
  96. dqintx070 tointegralx '56267E+11' -> '5.6267E+15'
  97. dqintx071 tointegralx '56267E+12' -> '5.6267E+16'
  98. dqintx072 tointegralx '56267E+13' -> '5.6267E+17'
  99. dqintx073 tointegralx '1.23E+96' -> '1.23E+96'
  100. dqintx074 tointegralx '1.23E+6144' -> #47ffd300000000000000000000000000 Clamped
  101. dqintx080 tointegralx '-56267E-10' -> '-0' Inexact Rounded
  102. dqintx081 tointegralx '-56267E-5' -> '-1' Inexact Rounded
  103. dqintx082 tointegralx '-56267E-2' -> '-563' Inexact Rounded
  104. dqintx083 tointegralx '-56267E-1' -> '-5627' Inexact Rounded
  105. dqintx085 tointegralx '-56267E-0' -> '-56267'
  106. dqintx086 tointegralx '-56267E+0' -> '-56267'
  107. dqintx087 tointegralx '-56267E+1' -> '-5.6267E+5'
  108. dqintx088 tointegralx '-56267E+9' -> '-5.6267E+13'
  109. dqintx089 tointegralx '-56267E+10' -> '-5.6267E+14'
  110. dqintx090 tointegralx '-56267E+11' -> '-5.6267E+15'
  111. dqintx091 tointegralx '-56267E+12' -> '-5.6267E+16'
  112. dqintx092 tointegralx '-56267E+13' -> '-5.6267E+17'
  113. dqintx093 tointegralx '-1.23E+96' -> '-1.23E+96'
  114. dqintx094 tointegralx '-1.23E+6144' -> #c7ffd300000000000000000000000000 Clamped
  115. -- subnormal inputs
  116. dqintx100 tointegralx 1E-299 -> 0 Inexact Rounded
  117. dqintx101 tointegralx 0.1E-299 -> 0 Inexact Rounded
  118. dqintx102 tointegralx 0.01E-299 -> 0 Inexact Rounded
  119. dqintx103 tointegralx 0E-299 -> 0
  120. -- specials and zeros
  121. dqintx120 tointegralx 'Inf' -> Infinity
  122. dqintx121 tointegralx '-Inf' -> -Infinity
  123. dqintx122 tointegralx NaN -> NaN
  124. dqintx123 tointegralx sNaN -> NaN Invalid_operation
  125. dqintx124 tointegralx 0 -> 0
  126. dqintx125 tointegralx -0 -> -0
  127. dqintx126 tointegralx 0.000 -> 0
  128. dqintx127 tointegralx 0.00 -> 0
  129. dqintx128 tointegralx 0.0 -> 0
  130. dqintx129 tointegralx 0 -> 0
  131. dqintx130 tointegralx 0E-3 -> 0
  132. dqintx131 tointegralx 0E-2 -> 0
  133. dqintx132 tointegralx 0E-1 -> 0
  134. dqintx133 tointegralx 0E-0 -> 0
  135. dqintx134 tointegralx 0E+1 -> 0E+1
  136. dqintx135 tointegralx 0E+2 -> 0E+2
  137. dqintx136 tointegralx 0E+3 -> 0E+3
  138. dqintx137 tointegralx 0E+4 -> 0E+4
  139. dqintx138 tointegralx 0E+5 -> 0E+5
  140. dqintx139 tointegralx -0.000 -> -0
  141. dqintx140 tointegralx -0.00 -> -0
  142. dqintx141 tointegralx -0.0 -> -0
  143. dqintx142 tointegralx -0 -> -0
  144. dqintx143 tointegralx -0E-3 -> -0
  145. dqintx144 tointegralx -0E-2 -> -0
  146. dqintx145 tointegralx -0E-1 -> -0
  147. dqintx146 tointegralx -0E-0 -> -0
  148. dqintx147 tointegralx -0E+1 -> -0E+1
  149. dqintx148 tointegralx -0E+2 -> -0E+2
  150. dqintx149 tointegralx -0E+3 -> -0E+3
  151. dqintx150 tointegralx -0E+4 -> -0E+4
  152. dqintx151 tointegralx -0E+5 -> -0E+5
  153. -- propagating NaNs
  154. dqintx152 tointegralx NaN808 -> NaN808
  155. dqintx153 tointegralx sNaN080 -> NaN80 Invalid_operation
  156. dqintx154 tointegralx -NaN808 -> -NaN808
  157. dqintx155 tointegralx -sNaN080 -> -NaN80 Invalid_operation
  158. dqintx156 tointegralx -NaN -> -NaN
  159. dqintx157 tointegralx -sNaN -> -NaN Invalid_operation
  160. -- examples
  161. rounding: half_up
  162. dqintx200 tointegralx 2.1 -> 2 Inexact Rounded
  163. dqintx201 tointegralx 100 -> 100
  164. dqintx202 tointegralx 100.0 -> 100 Rounded
  165. dqintx203 tointegralx 101.5 -> 102 Inexact Rounded
  166. dqintx204 tointegralx -101.5 -> -102 Inexact Rounded
  167. dqintx205 tointegralx 10E+5 -> 1.0E+6
  168. dqintx206 tointegralx 7.89E+77 -> 7.89E+77
  169. dqintx207 tointegralx -Inf -> -Infinity
  170. -- all rounding modes
  171. rounding: half_even
  172. dqintx210 tointegralx 55.5 -> 56 Inexact Rounded
  173. dqintx211 tointegralx 56.5 -> 56 Inexact Rounded
  174. dqintx212 tointegralx 57.5 -> 58 Inexact Rounded
  175. dqintx213 tointegralx -55.5 -> -56 Inexact Rounded
  176. dqintx214 tointegralx -56.5 -> -56 Inexact Rounded
  177. dqintx215 tointegralx -57.5 -> -58 Inexact Rounded
  178. rounding: half_up
  179. dqintx220 tointegralx 55.5 -> 56 Inexact Rounded
  180. dqintx221 tointegralx 56.5 -> 57 Inexact Rounded
  181. dqintx222 tointegralx 57.5 -> 58 Inexact Rounded
  182. dqintx223 tointegralx -55.5 -> -56 Inexact Rounded
  183. dqintx224 tointegralx -56.5 -> -57 Inexact Rounded
  184. dqintx225 tointegralx -57.5 -> -58 Inexact Rounded
  185. rounding: half_down
  186. dqintx230 tointegralx 55.5 -> 55 Inexact Rounded
  187. dqintx231 tointegralx 56.5 -> 56 Inexact Rounded
  188. dqintx232 tointegralx 57.5 -> 57 Inexact Rounded
  189. dqintx233 tointegralx -55.5 -> -55 Inexact Rounded
  190. dqintx234 tointegralx -56.5 -> -56 Inexact Rounded
  191. dqintx235 tointegralx -57.5 -> -57 Inexact Rounded
  192. rounding: up
  193. dqintx240 tointegralx 55.3 -> 56 Inexact Rounded
  194. dqintx241 tointegralx 56.3 -> 57 Inexact Rounded
  195. dqintx242 tointegralx 57.3 -> 58 Inexact Rounded
  196. dqintx243 tointegralx -55.3 -> -56 Inexact Rounded
  197. dqintx244 tointegralx -56.3 -> -57 Inexact Rounded
  198. dqintx245 tointegralx -57.3 -> -58 Inexact Rounded
  199. rounding: down
  200. dqintx250 tointegralx 55.7 -> 55 Inexact Rounded
  201. dqintx251 tointegralx 56.7 -> 56 Inexact Rounded
  202. dqintx252 tointegralx 57.7 -> 57 Inexact Rounded
  203. dqintx253 tointegralx -55.7 -> -55 Inexact Rounded
  204. dqintx254 tointegralx -56.7 -> -56 Inexact Rounded
  205. dqintx255 tointegralx -57.7 -> -57 Inexact Rounded
  206. rounding: ceiling
  207. dqintx260 tointegralx 55.3 -> 56 Inexact Rounded
  208. dqintx261 tointegralx 56.3 -> 57 Inexact Rounded
  209. dqintx262 tointegralx 57.3 -> 58 Inexact Rounded
  210. dqintx263 tointegralx -55.3 -> -55 Inexact Rounded
  211. dqintx264 tointegralx -56.3 -> -56 Inexact Rounded
  212. dqintx265 tointegralx -57.3 -> -57 Inexact Rounded
  213. rounding: floor
  214. dqintx270 tointegralx 55.7 -> 55 Inexact Rounded
  215. dqintx271 tointegralx 56.7 -> 56 Inexact Rounded
  216. dqintx272 tointegralx 57.7 -> 57 Inexact Rounded
  217. dqintx273 tointegralx -55.7 -> -56 Inexact Rounded
  218. dqintx274 tointegralx -56.7 -> -57 Inexact Rounded
  219. dqintx275 tointegralx -57.7 -> -58 Inexact Rounded
  220. -- Int and uInt32 edge values for testing conversions
  221. dqintx300 tointegralx -2147483646 -> -2147483646
  222. dqintx301 tointegralx -2147483647 -> -2147483647
  223. dqintx302 tointegralx -2147483648 -> -2147483648
  224. dqintx303 tointegralx -2147483649 -> -2147483649
  225. dqintx304 tointegralx 2147483646 -> 2147483646
  226. dqintx305 tointegralx 2147483647 -> 2147483647
  227. dqintx306 tointegralx 2147483648 -> 2147483648
  228. dqintx307 tointegralx 2147483649 -> 2147483649
  229. dqintx308 tointegralx 4294967294 -> 4294967294
  230. dqintx309 tointegralx 4294967295 -> 4294967295
  231. dqintx310 tointegralx 4294967296 -> 4294967296
  232. dqintx311 tointegralx 4294967297 -> 4294967297