Diff of /test/trunk/ooRexx/base/keyword/LOSTDIGITS.testGroup [000000] .. [r8668] Maximize Restore

  Switch to unified view

a b/test/trunk/ooRexx/base/keyword/LOSTDIGITS.testGroup
1
#!/usr/bin/rexx
2
/*
3
  SVN Revision: $Rev: 3371 $
4
  Change Date:  $Date: 2008-09-21 00:33:29 -0400 (Sun, 21 Sep 2008) $
5
*/
6
/*----------------------------------------------------------------------------*/
7
/*                                                                            */
8
/* Copyright (c) 2007 Rexx Language Association. All rights reserved.         */
9
/*                                                                            */
10
/* This program and the accompanying materials are made available under       */
11
/* the terms of the Common Public License v1.0 which accompanies this         */
12
/* distribution. A copy is also available at the following address:           */
13
/* http://www.oorexx.org/license.html                                         */
14
/*                                                                            */
15
/* Redistribution and use in source and binary forms, with or                 */
16
/* without modification, are permitted provided that the following            */
17
/* conditions are met:                                                        */
18
/*                                                                            */
19
/* Redistributions of source code must retain the above copyright             */
20
/* notice, this list of conditions and the following disclaimer.              */
21
/* Redistributions in binary form must reproduce the above copyright          */
22
/* notice, this list of conditions and the following disclaimer in            */
23
/* the documentation and/or other materials provided with the distribution.   */
24
/*                                                                            */
25
/* Neither the name of Rexx Language Association nor the names                */
26
/* of its contributors may be used to endorse or promote products             */
27
/* derived from this software without specific prior written permission.      */
28
/*                                                                            */
29
/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS        */
30
/* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT          */
31
/* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS          */
32
/* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT   */
33
/* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,      */
34
/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED   */
35
/* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,        */
36
/* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY     */
37
/* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING    */
38
/* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS         */
39
/* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.               */
40
/*                                                                            */
41
/*----------------------------------------------------------------------------*/
42
  parse source . . s
43
  group = .TestGroup~new(s)
44
  group~add(.LOSTDIGITS.testGroup)
45
46
  if group~isAutomatedTest then return group
47
48
  testResult = group~suite~execute~~print
49
50
return testResult
51
52
53
54
::requires 'ooTest.frm' -- load the ooRexxUnit classes
55
56
::class "LOSTDIGITS.testGroup" subclass ooTestCase public
57
58
::method assertLostdigits
59
  use arg expr, digits=9
60
  signal on lostdigits
61
  numeric digits digits
62
  interpret "x="expr
63
  self~fail("LOSTDIGITS not raised for" expr)
64
65
lostdigits:
66
  return
67
68
::method assertNoLostdigits
69
  use arg expr, digits=9
70
  signal on lostdigits
71
  numeric digits digits
72
  interpret "x="expr
73
  return
74
75
lostdigits:
76
  self~fail("LOSTDIGITS incorrectly raised for" expr)
77
78
::method testAddition
79
  self~assertNoLostDigits("111111111+1")
80
  self~assertNoLostDigits("1+111111111")
81
  self~assertNoLostDigits("11111.1111+1")
82
  self~assertNoLostDigits("1+11111.1111")
83
  self~assertNoLostDigits("1111111111+1", 10)
84
  self~assertNoLostDigits("1+1111111111", 10)
85
  self~assertNoLostDigits("'-111111111'+1")
86
  self~assertNoLostDigits("1+'-111111111'")
87
  self~assertNoLostDigits("'-1111111111'+1", 10)
88
  self~assertNoLostDigits("1+'-1111111111'", 10)
89
  self~assertNoLostDigits("0111111111+1")
90
  self~assertNoLostDigits("1+0111111111")
91
  self~assertNoLostDigits("1e10+1")
92
  self~assertNoLostDigits("1+1e10")
93
  self~assertNoLostDigits("0.000000111111111+1")
94
  self~assertNoLostDigits("1+0.00000111111111")
95
96
  self~assertLostDigits("1111111111+1")
97
  self~assertLostDigits("1+1111111111")
98
  self~assertLostDigits("111111111+1", 8)
99
  self~assertLostDigits("1+111111111", 8)
100
  self~assertLostDigits("'-1111111111'+1")
101
  self~assertLostDigits("1+'-1111111111'")
102
  self~assertLostDigits("'-111111111'+1", 8)
103
  self~assertLostDigits("1+'-111111111'", 8)
104
105
  self~assertLostDigits("1000000000+1")
106
  self~assertLostDigits("1+1000000000")
107
  self~assertLostDigits("1.111111111+1")
108
  self~assertLostDigits("1+1.111111111")
109
  self~assertLostDigits("1.000000000+1")
110
  self~assertLostDigits("1+1.000000000")
111
  self~assertLostDigits("11111.11111+1")
112
  self~assertLostDigits("1+11111.11111")
113
114
::method testSubtraction
115
  self~assertNoLostDigits("111111111-1")
116
  self~assertNoLostDigits("1-111111111")
117
  self~assertNoLostDigits("11111.1111-1")
118
  self~assertNoLostDigits("1-11111.1111")
119
  self~assertNoLostDigits("1111111111-1", 10)
120
  self~assertNoLostDigits("1-1111111111", 10)
121
  self~assertNoLostDigits("'-111111111'-1")
122
  self~assertNoLostDigits("1-'-111111111'")
123
  self~assertNoLostDigits("'-1111111111'-1", 10)
124
  self~assertNoLostDigits("1-'-1111111111'", 10)
125
  self~assertNoLostDigits("0111111111-1")
126
  self~assertNoLostDigits("1-0111111111")
127
  self~assertNoLostDigits("1e10-1")
128
  self~assertNoLostDigits("1-1e10")
129
  self~assertNoLostDigits("0.000000111111111-1")
130
  self~assertNoLostDigits("1-0.00000111111111")
131
132
  self~assertLostDigits("1111111111-1")
133
  self~assertLostDigits("1-1111111111")
134
  self~assertLostDigits("111111111-1", 8)
135
  self~assertLostDigits("1-111111111", 8)
136
  self~assertLostDigits("'-1111111111'-1")
137
  self~assertLostDigits("1-'-1111111111'")
138
  self~assertLostDigits("'-111111111'-1", 8)
139
  self~assertLostDigits("1-'-111111111'", 8)
140
141
  self~assertLostDigits("1000000000-1")
142
  self~assertLostDigits("1-1000000000")
143
  self~assertLostDigits("1.111111111-1")
144
  self~assertLostDigits("1-1.111111111")
145
  self~assertLostDigits("1.000000000-1")
146
  self~assertLostDigits("1-1.000000000")
147
  self~assertLostDigits("11111.11111-1")
148
  self~assertLostDigits("1-11111.11111")
149
150
::method testMultiply
151
  self~assertNoLostDigits("111111111*1")
152
  self~assertNoLostDigits("1*111111111")
153
  self~assertNoLostDigits("11111.1111*1")
154
  self~assertNoLostDigits("1*11111.1111")
155
  self~assertNoLostDigits("1111111111*1", 10)
156
  self~assertNoLostDigits("1*1111111111", 10)
157
  self~assertNoLostDigits("'-111111111'*1")
158
  self~assertNoLostDigits("1*'-111111111'")
159
  self~assertNoLostDigits("'-1111111111'*1", 10)
160
  self~assertNoLostDigits("1*'-1111111111'", 10)
161
  self~assertNoLostDigits("0111111111*1")
162
  self~assertNoLostDigits("1*0111111111")
163
  self~assertNoLostDigits("1e10*1")
164
  self~assertNoLostDigits("1*1e10")
165
  self~assertNoLostDigits("0.000000111111111*1")
166
  self~assertNoLostDigits("1*0.00000111111111")
167
168
  self~assertLostDigits("1111111111*1")
169
  self~assertLostDigits("1*1111111111")
170
  self~assertLostDigits("111111111*1", 8)
171
  self~assertLostDigits("1*111111111", 8)
172
  self~assertLostDigits("'-1111111111'*1")
173
  self~assertLostDigits("1*'-1111111111'")
174
  self~assertLostDigits("'-111111111'*1", 8)
175
  self~assertLostDigits("1*'-111111111'", 8)
176
177
  self~assertLostDigits("1000000000*1")
178
  self~assertLostDigits("1*1000000000")
179
  self~assertLostDigits("1.111111111*1")
180
  self~assertLostDigits("1*1.111111111")
181
  self~assertLostDigits("1.000000000*1")
182
  self~assertLostDigits("1*1.000000000")
183
  self~assertLostDigits("11111.11111*1")
184
  self~assertLostDigits("1*11111.11111")
185
186
::method testDivide
187
  self~assertNoLostDigits("111111111/1")
188
  self~assertNoLostDigits("1/111111111")
189
  self~assertNoLostDigits("11111.1111/1")
190
  self~assertNoLostDigits("1/11111.1111")
191
  self~assertNoLostDigits("1111111111/1", 10)
192
  self~assertNoLostDigits("1/1111111111", 10)
193
  self~assertNoLostDigits("'-111111111'/1")
194
  self~assertNoLostDigits("1/'-111111111'")
195
  self~assertNoLostDigits("'-1111111111'/1", 10)
196
  self~assertNoLostDigits("1/'-1111111111'", 10)
197
  self~assertNoLostDigits("0111111111/1")
198
  self~assertNoLostDigits("1/0111111111")
199
  self~assertNoLostDigits("1e10/1")
200
  self~assertNoLostDigits("1/1e10")
201
  self~assertNoLostDigits("0.000000111111111/1")
202
  self~assertNoLostDigits("1/0.00000111111111")
203
204
  self~assertLostDigits("1111111111/1")
205
  self~assertLostDigits("1/1111111111")
206
  self~assertLostDigits("111111111/1", 8)
207
  self~assertLostDigits("1/111111111", 8)
208
  self~assertLostDigits("'-1111111111'/1")
209
  self~assertLostDigits("1/'-1111111111'")
210
  self~assertLostDigits("'-111111111'/1", 8)
211
  self~assertLostDigits("1/'-111111111'", 8)
212
213
  self~assertLostDigits("1000000000/1")
214
  self~assertLostDigits("1/1000000000")
215
  self~assertLostDigits("1.111111111/1")
216
  self~assertLostDigits("1/1.111111111")
217
  self~assertLostDigits("1.000000000/1")
218
  self~assertLostDigits("1/1.000000000")
219
  self~assertLostDigits("11111.11111/1")
220
  self~assertLostDigits("1/11111.11111")
221
222
::method testIntegerDivide
223
  self~assertNoLostDigits("111111111%1")
224
  self~assertNoLostDigits("1%111111111")
225
  self~assertNoLostDigits("11111.1111%1")
226
  self~assertNoLostDigits("1%11111.1111")
227
  self~assertNoLostDigits("1111111111%1", 10)
228
  self~assertNoLostDigits("1%1111111111", 10)
229
  self~assertNoLostDigits("'-111111111'%1")
230
  self~assertNoLostDigits("1%'-111111111'")
231
  self~assertNoLostDigits("'-1111111111'%1", 10)
232
  self~assertNoLostDigits("1%'-1111111111'", 10)
233
  self~assertNoLostDigits("0111111111%1")
234
  self~assertNoLostDigits("1%0111111111")
235
  self~assertNoLostDigits("1e10%1000")
236
  self~assertNoLostDigits("1%1e10")
237
  self~assertNoLostDigits("0.000000111111111%1")
238
  self~assertNoLostDigits("1%0.00000111111111")
239
240
  self~assertLostDigits("1111111111%1")
241
  self~assertLostDigits("1%1111111111")
242
  self~assertLostDigits("111111111%1", 8)
243
  self~assertLostDigits("1%111111111", 8)
244
  self~assertLostDigits("'-1111111111'%1")
245
  self~assertLostDigits("1%'-1111111111'")
246
  self~assertLostDigits("'-111111111'%1", 8)
247
  self~assertLostDigits("1%'-111111111'", 8)
248
249
  self~assertLostDigits("1000000000%1")
250
  self~assertLostDigits("1%1000000000")
251
  self~assertLostDigits("1.111111111%1")
252
  self~assertLostDigits("1%1.111111111")
253
  self~assertLostDigits("1.000000000%1")
254
  self~assertLostDigits("1%1.000000000")
255
  self~assertLostDigits("11111.11111%1")
256
  self~assertLostDigits("1%11111.11111")
257
258
::method testRemainder
259
  self~assertNoLostDigits("111111111//1")
260
  self~assertNoLostDigits("1//111111111")
261
  self~assertNoLostDigits("11111.1111//1")
262
  self~assertNoLostDigits("1//11111.1111")
263
  self~assertNoLostDigits("1111111111//1", 10)
264
  self~assertNoLostDigits("1//1111111111", 10)
265
  self~assertNoLostDigits("'-111111111'//1")
266
  self~assertNoLostDigits("1//'-111111111'")
267
  self~assertNoLostDigits("'-1111111111'//1", 10)
268
  self~assertNoLostDigits("1//'-1111111111'", 10)
269
  self~assertNoLostDigits("0111111111//1")
270
  self~assertNoLostDigits("1//0111111111")
271
  self~assertNoLostDigits("1e10//10000")
272
  self~assertNoLostDigits("1//1e10")
273
  self~assertNoLostDigits("0.000000111111111//1")
274
  self~assertNoLostDigits("1//0.00000111111111")
275
276
  self~assertLostDigits("1111111111//1")
277
  self~assertLostDigits("1//1111111111")
278
  self~assertLostDigits("111111111//1", 8)
279
  self~assertLostDigits("1//111111111", 8)
280
  self~assertLostDigits("'-1111111111'//1")
281
  self~assertLostDigits("1//'-1111111111'")
282
  self~assertLostDigits("'-111111111'//1", 8)
283
  self~assertLostDigits("1//'-111111111'", 8)
284
285
  self~assertLostDigits("1000000000//1")
286
  self~assertLostDigits("1//1000000000")
287
  self~assertLostDigits("1.111111111//1")
288
  self~assertLostDigits("1//1.111111111")
289
  self~assertLostDigits("1.000000000//1")
290
  self~assertLostDigits("1//1.000000000")
291
  self~assertLostDigits("11111.11111//1")
292
  self~assertLostDigits("1//11111.11111")
293
294
::method testCompare
295
  self~assertNoLostDigits("111111111=1")
296
  self~assertNoLostDigits("1=111111111")
297
  self~assertNoLostDigits("11111.1111=1")
298
  self~assertNoLostDigits("1=11111.1111")
299
  self~assertNoLostDigits("1111111111=1", 10)
300
  self~assertNoLostDigits("1=1111111111", 10)
301
  self~assertNoLostDigits("'-111111111'=1")
302
  self~assertNoLostDigits("1='-111111111'")
303
  self~assertNoLostDigits("'-1111111111'=1", 10)
304
  self~assertNoLostDigits("1='-1111111111'", 10)
305
  self~assertNoLostDigits("0111111111=1")
306
  self~assertNoLostDigits("1=0111111111")
307
  self~assertNoLostDigits("1e10=10000")
308
  self~assertNoLostDigits("1=1e10")
309
  self~assertNoLostDigits("0.000000111111111=1")
310
  self~assertNoLostDigits("1=0.00000111111111")
311
312
  self~assertLostDigits("1111111111=1")
313
  self~assertLostDigits("1=1111111111")
314
  self~assertLostDigits("111111111=1", 8)
315
  self~assertLostDigits("1=111111111", 8)
316
  self~assertLostDigits("'-1111111111'=1")
317
  self~assertLostDigits("1='-1111111111'")
318
  self~assertLostDigits("'-111111111'=1", 8)
319
  self~assertLostDigits("1='-111111111'", 8)
320
321
  self~assertLostDigits("1000000000=1")
322
  self~assertLostDigits("1=1000000000")
323
  self~assertLostDigits("1.111111111=1")
324
  self~assertLostDigits("1=1.111111111")
325
  self~assertLostDigits("1.000000000=1")
326
  self~assertLostDigits("1=1.000000000")
327
  self~assertLostDigits("11111.11111=1")
328
  self~assertLostDigits("1=11111.11111")
329
330
::method testPrefixMinus
331
  self~assertNoLostDigits("-111111111")
332
  self~assertNoLostDigits("-11111.1111")
333
  self~assertNoLostDigits("-1111111111", 10)
334
  self~assertNoLostDigits("-'-111111111'")
335
  self~assertNoLostDigits("-'-1111111111'", 10)
336
  self~assertNoLostDigits("-0111111111")
337
  self~assertNoLostDigits("-1e10")
338
  self~assertNoLostDigits("-0.000000111111111")
339
340
  self~assertLostDigits("-1111111111")
341
  self~assertLostDigits("-111111111", 8)
342
  self~assertLostDigits("-'-1111111111'")
343
  self~assertLostDigits("-'-111111111'", 8)
344
345
  self~assertLostDigits("-1000000000")
346
  self~assertLostDigits("-1.111111111")
347
  self~assertLostDigits("-1.000000000")
348
  self~assertLostDigits("-11111.11111")
349
350
::method testPrefixPlus
351
  self~assertNoLostDigits("+111111111")
352
  self~assertNoLostDigits("+11111.1111")
353
  self~assertNoLostDigits("+1111111111", 10)
354
  self~assertNoLostDigits("+'-111111111'")
355
  self~assertNoLostDigits("+'-1111111111'", 10)
356
  self~assertNoLostDigits("+0111111111")
357
  self~assertNoLostDigits("+1e10")
358
  self~assertNoLostDigits("+0.000000111111111")
359
360
  self~assertLostDigits("+1111111111")
361
  self~assertLostDigits("+111111111", 8)
362
  self~assertLostDigits("+'-1111111111'")
363
  self~assertLostDigits("+'-111111111'", 8)
364
365
  self~assertLostDigits("+1000000000")
366
  self~assertLostDigits("+1.111111111")
367
  self~assertLostDigits("+1.000000000")
368
  self~assertLostDigits("+11111.11111")
369
370
371
::method testPower
372
  self~assertNoLostDigits("111111111**2")
373
  self~assertNoLostDigits("11111.1111**2")
374
  self~assertNoLostDigits("1111111111**2", 10)
375
  self~assertNoLostDigits("'-111111111'**2")
376
  self~assertNoLostDigits("'-1111111111'**2", 10)
377
  self~assertNoLostDigits("0111111111**2")
378
  self~assertNoLostDigits("1e10**2")
379
  self~assertNoLostDigits("0.000000111111111**2")
380
381
  self~assertLostDigits("1111111111**2")
382
  self~assertLostDigits("111111111**2", 8)
383
  self~assertLostDigits("'-1111111111'**2")
384
  self~assertLostDigits("'-111111111'**2", 8)
385
386
  self~assertLostDigits("1000000000**2")
387
  self~assertLostDigits("1.111111111**2")
388
  self~assertLostDigits("1.000000000**2")
389
  self~assertLostDigits("11111.11111**2")
390
391
::method testBifs
392
  -- the arithmetic builtin functions do not honor lostdigits, since they are
393
  -- defined as performing a round operation on the arguments before processing.
394
395
  self~assertNoLostDigits("trunc(11111.11111, 2)")
396
  self~assertNoLostDigits("11111.11111~round")
397
  self~assertNoLostDigits("11111.11111~floor")
398
  self~assertNoLostDigits("11111.11111~ceiling")
399
  self~assertNoLostDigits("max(11111.11111, 2)")
400
  self~assertNoLostDigits("min(11111.11111, 2)")
401
  self~assertNoLostDigits("format(11111.11111, 6, 8)")