summaryrefslogtreecommitdiffstats
path: root/Lib/test/decimaltestdata/tointegralx.decTest
blob: 0ce0d0935e1951cdbb58572bdd9c1b06b23eb3f3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
------------------------------------------------------------------------
-- tointegralx.decTest -- round decimal to integral value, exact      --
-- Copyright (c) IBM Corporation, 2001, 2008.  All rights reserved.   --
------------------------------------------------------------------------
-- Please see the document "General Decimal Arithmetic Testcases"     --
-- at http://www2.hursley.ibm.com/decimal for the description of      --
-- these testcases.                                                   --
--                                                                    --
-- These testcases are experimental ('beta' versions), and they       --
-- may contain errors.  They are offered on an as-is basis.  In       --
-- particular, achieving the same results as the tests here is not    --
-- a guarantee that an implementation complies with any Standard      --
-- or specification.  The tests are not exhaustive.                   --
--                                                                    --
-- Please send comments, suggestions, and corrections to the author:  --
--   Mike Cowlishaw, IBM Fellow                                       --
--   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --
--   mfc@uk.ibm.com                                                   --
------------------------------------------------------------------------
version: 2.59

-- This set of tests tests the extended specification 'round-to-integral
-- value' operation (from IEEE 854, later modified in 754r).
-- All non-zero results are defined as being those from either copy or
-- quantize, so those are assumed to have been tested.

-- This tests toIntegraExact, which may set Inexact

extended:    1
precision:   9
rounding:    half_up
maxExponent: 999
minExponent: -999

intxx001 tointegralx      0     ->  0
intxx002 tointegralx      0.0   ->  0
intxx003 tointegralx      0.1   ->  0 Inexact Rounded
intxx004 tointegralx      0.2   ->  0 Inexact Rounded
intxx005 tointegralx      0.3   ->  0 Inexact Rounded
intxx006 tointegralx      0.4   ->  0 Inexact Rounded
intxx007 tointegralx      0.5   ->  1 Inexact Rounded
intxx008 tointegralx      0.6   ->  1 Inexact Rounded
intxx009 tointegralx      0.7   ->  1 Inexact Rounded
intxx010 tointegralx      0.8   ->  1 Inexact Rounded
intxx011 tointegralx      0.9   ->  1 Inexact Rounded
intxx012 tointegralx      1     ->  1
intxx013 tointegralx      1.0   ->  1 Rounded
intxx014 tointegralx      1.1   ->  1 Inexact Rounded
intxx015 tointegralx      1.2   ->  1 Inexact Rounded
intxx016 tointegralx      1.3   ->  1 Inexact Rounded
intxx017 tointegralx      1.4   ->  1 Inexact Rounded
intxx018 tointegralx      1.5   ->  2 Inexact Rounded
intxx019 tointegralx      1.6   ->  2 Inexact Rounded
intxx020 tointegralx      1.7   ->  2 Inexact Rounded
intxx021 tointegralx      1.8   ->  2 Inexact Rounded
intxx022 tointegralx      1.9   ->  2 Inexact Rounded
-- negatives
intxx031 tointegralx     -0     -> -0
intxx032 tointegralx     -0.0   -> -0
intxx033 tointegralx     -0.1   -> -0 Inexact Rounded
intxx034 tointegralx     -0.2   -> -0 Inexact Rounded
intxx035 tointegralx     -0.3   -> -0 Inexact Rounded
intxx036 tointegralx     -0.4   -> -0 Inexact Rounded
intxx037 tointegralx     -0.5   -> -1 Inexact Rounded
intxx038 tointegralx     -0.6   -> -1 Inexact Rounded
intxx039 tointegralx     -0.7   -> -1 Inexact Rounded
intxx040 tointegralx     -0.8   -> -1 Inexact Rounded
intxx041 tointegralx     -0.9   -> -1 Inexact Rounded
intxx042 tointegralx     -1     -> -1
intxx043 tointegralx     -1.0   -> -1 Rounded
intxx044 tointegralx     -1.1   -> -1 Inexact Rounded
intxx045 tointegralx     -1.2   -> -1 Inexact Rounded
intxx046 tointegralx     -1.3   -> -1 Inexact Rounded
intxx047 tointegralx     -1.4   -> -1 Inexact Rounded
intxx048 tointegralx     -1.5   -> -2 Inexact Rounded
intxx049 tointegralx     -1.6   -> -2 Inexact Rounded
intxx050 tointegralx     -1.7   -> -2 Inexact Rounded
intxx051 tointegralx     -1.8   -> -2 Inexact Rounded
intxx052 tointegralx     -1.9   -> -2 Inexact Rounded
-- next two would be NaN using quantize(x, 0)
intxx053 tointegralx    10E+30  -> 1.0E+31
intxx054 tointegralx   -10E+30  -> -1.0E+31

-- numbers around precision
precision: 9
intxx060 tointegralx '56267E-10'   -> '0'               Inexact Rounded
intxx061 tointegralx '56267E-5'    -> '1'               Inexact Rounded
intxx062 tointegralx '56267E-2'    -> '563'             Inexact Rounded
intxx063 tointegralx '56267E-1'    -> '5627'            Inexact Rounded
intxx065 tointegralx '56267E-0'    -> '56267'
intxx066 tointegralx '56267E+0'    -> '56267'
intxx067 tointegralx '56267E+1'    -> '5.6267E+5'
intxx068 tointegralx '56267E+2'    -> '5.6267E+6'
intxx069 tointegralx '56267E+3'    -> '5.6267E+7'
intxx070 tointegralx '56267E+4'    -> '5.6267E+8'
intxx071 tointegralx '56267E+5'    -> '5.6267E+9'
intxx072 tointegralx '56267E+6'    -> '5.6267E+10'
intxx073 tointegralx '1.23E+96'    -> '1.23E+96'
intxx074 tointegralx '1.23E+384'   -> '1.23E+384'
intxx075 tointegralx '1.23E+999'   -> '1.23E+999'

intxx080 tointegralx '-56267E-10'  -> '-0'              Inexact Rounded
intxx081 tointegralx '-56267E-5'   -> '-1'              Inexact Rounded
intxx082 tointegralx '-56267E-2'   -> '-563'            Inexact Rounded
intxx083 tointegralx '-56267E-1'   -> '-5627'           Inexact Rounded
intxx085 tointegralx '-56267E-0'   -> '-56267'
intxx086 tointegralx '-56267E+0'   -> '-56267'
intxx087 tointegralx '-56267E+1'   -> '-5.6267E+5'
intxx088 tointegralx '-56267E+2'   -> '-5.6267E+6'
intxx089 tointegralx '-56267E+3'   -> '-5.6267E+7'
intxx090 tointegralx '-56267E+4'   -> '-5.6267E+8'
intxx091 tointegralx '-56267E+5'   -> '-5.6267E+9'
intxx092 tointegralx '-56267E+6'   -> '-5.6267E+10'
intxx093 tointegralx '-1.23E+96'   -> '-1.23E+96'
intxx094 tointegralx '-1.23E+384'  -> '-1.23E+384'
intxx095 tointegralx '-1.23E+999'  -> '-1.23E+999'

-- subnormal inputs
intxx100 tointegralx        1E-999 -> 0                 Inexact Rounded
intxx101 tointegralx      0.1E-999 -> 0                 Inexact Rounded
intxx102 tointegralx     0.01E-999 -> 0                 Inexact Rounded
intxx103 tointegralx        0E-999 -> 0

-- specials and zeros
intxx120 tointegralx 'Inf'       ->  Infinity
intxx121 tointegralx '-Inf'      -> -Infinity
intxx122 tointegralx   NaN       ->  NaN
intxx123 tointegralx  sNaN       ->  NaN  Invalid_operation
intxx124 tointegralx     0       ->  0
intxx125 tointegralx    -0       -> -0
intxx126 tointegralx     0.000   ->  0
intxx127 tointegralx     0.00    ->  0
intxx128 tointegralx     0.0     ->  0
intxx129 tointegralx     0       ->  0
intxx130 tointegralx     0E-3    ->  0
intxx131 tointegralx     0E-2    ->  0
intxx132 tointegralx     0E-1    ->  0
intxx133 tointegralx     0E-0    ->  0
intxx134 tointegralx     0E+1    ->  0E+1
intxx135 tointegralx     0E+2    ->  0E+2
intxx136 tointegralx     0E+3    ->  0E+3
intxx137 tointegralx     0E+4    ->  0E+4
intxx138 tointegralx     0E+5    ->  0E+5
intxx139 tointegralx    -0.000   -> -0
intxx140 tointegralx    -0.00    -> -0
intxx141 tointegralx    -0.0     -> -0
intxx142 tointegralx    -0       -> -0
intxx143 tointegralx    -0E-3    -> -0
intxx144 tointegralx    -0E-2    -> -0
intxx145 tointegralx    -0E-1    -> -0
intxx146 tointegralx    -0E-0    -> -0
intxx147 tointegralx    -0E+1    -> -0E+1
intxx148 tointegralx    -0E+2    -> -0E+2
intxx149 tointegralx    -0E+3    -> -0E+3
intxx150 tointegralx    -0E+4    -> -0E+4
intxx151 tointegralx    -0E+5    -> -0E+5
-- propagating NaNs
intxx152 tointegralx   NaN808    ->  NaN808
intxx153 tointegralx  sNaN080    ->  NaN80  Invalid_operation
intxx154 tointegralx  -NaN808    -> -NaN808
intxx155 tointegralx -sNaN080    -> -NaN80  Invalid_operation
intxx156 tointegralx  -NaN       -> -NaN
intxx157 tointegralx -sNaN       -> -NaN    Invalid_operation

-- examples
rounding:    half_up
precision:   9
intxx200 tointegralx     2.1    -> 2                    Inexact Rounded
intxx201 tointegralx   100      -> 100
intxx202 tointegralx   100.0    -> 100                  Rounded
intxx203 tointegralx   101.5    -> 102                  Inexact Rounded
intxx204 tointegralx  -101.5    -> -102                 Inexact Rounded
intxx205 tointegralx   10E+5    -> 1.0E+6
intxx206 tointegralx  7.89E+77  -> 7.89E+77
intxx207 tointegralx   -Inf     -> -Infinity


-- all rounding modes
rounding:    half_even

intxx210 tointegralx     55.5   ->  56   Inexact Rounded
intxx211 tointegralx     56.5   ->  56   Inexact Rounded
intxx212 tointegralx     57.5   ->  58   Inexact Rounded
intxx213 tointegralx    -55.5   -> -56   Inexact Rounded
intxx214 tointegralx    -56.5   -> -56   Inexact Rounded
intxx215 tointegralx    -57.5   -> -58   Inexact Rounded

rounding:    half_up

intxx220 tointegralx     55.5   ->  56   Inexact Rounded
intxx221 tointegralx     56.5   ->  57   Inexact Rounded
intxx222 tointegralx     57.5   ->  58   Inexact Rounded
intxx223 tointegralx    -55.5   -> -56   Inexact Rounded
intxx224 tointegralx    -56.5   -> -57   Inexact Rounded
intxx225 tointegralx    -57.5   -> -58   Inexact Rounded

rounding:    half_down

intxx230 tointegralx     55.5   ->  55   Inexact Rounded
intxx231 tointegralx     56.5   ->  56   Inexact Rounded
intxx232 tointegralx     57.5   ->  57   Inexact Rounded
intxx233 tointegralx    -55.5   -> -55   Inexact Rounded
intxx234 tointegralx    -56.5   -> -56   Inexact Rounded
intxx235 tointegralx    -57.5   -> -57   Inexact Rounded

rounding:    up

intxx240 tointegralx     55.3   ->  56   Inexact Rounded
intxx241 tointegralx     56.3   ->  57   Inexact Rounded
intxx242 tointegralx     57.3   ->  58   Inexact Rounded
intxx243 tointegralx    -55.3   -> -56   Inexact Rounded
intxx244 tointegralx    -56.3   -> -57   Inexact Rounded
intxx245 tointegralx    -57.3   -> -58   Inexact Rounded

rounding:    down

intxx250 tointegralx     55.7   ->  55   Inexact Rounded
intxx251 tointegralx     56.7   ->  56   Inexact Rounded
intxx252 tointegralx     57.7   ->  57   Inexact Rounded
intxx253 tointegralx    -55.7   -> -55   Inexact Rounded
intxx254 tointegralx    -56.7   -> -56   Inexact Rounded
intxx255 tointegralx    -57.7   -> -57   Inexact Rounded

rounding:    ceiling

intxx260 tointegralx     55.3   ->  56   Inexact Rounded
intxx261 tointegralx     56.3   ->  57   Inexact Rounded
intxx262 tointegralx     57.3   ->  58   Inexact Rounded
intxx263 tointegralx    -55.3   -> -55   Inexact Rounded
intxx264 tointegralx    -56.3   -> -56   Inexact Rounded
intxx265 tointegralx    -57.3   -> -57   Inexact Rounded

rounding:    floor

intxx270 tointegralx     55.7   ->  55   Inexact Rounded
intxx271 tointegralx     56.7   ->  56   Inexact Rounded
intxx272 tointegralx     57.7   ->  57   Inexact Rounded
intxx273 tointegralx    -55.7   -> -56   Inexact Rounded
intxx274 tointegralx    -56.7   -> -57   Inexact Rounded
intxx275 tointegralx    -57.7   -> -58   Inexact Rounded

-- Int and uInt32 edge values for testing conversions
precision: 16
intxx300 tointegralx -2147483646  -> -2147483646
intxx301 tointegralx -2147483647  -> -2147483647
intxx302 tointegralx -2147483648  -> -2147483648
intxx303 tointegralx -2147483649  -> -2147483649
intxx304 tointegralx  2147483646  ->  2147483646
intxx305 tointegralx  2147483647  ->  2147483647
intxx306 tointegralx  2147483648  ->  2147483648
intxx307 tointegralx  2147483649  ->  2147483649
intxx308 tointegralx  4294967294  ->  4294967294
intxx309 tointegralx  4294967295  ->  4294967295
intxx310 tointegralx  4294967296  ->  4294967296
intxx311 tointegralx  4294967297  ->  4294967297