1
2(********************************************************************)
3(*                                                                  *)
4(*  chkovf.sd7    Checks catching of integer overflows.             *)
5(*  Copyright (C) 2014, 2018 - 2020  Thomas Mertes                  *)
6(*                                                                  *)
7(*  This program is free software; you can redistribute it and/or   *)
8(*  modify it under the terms of the GNU General Public License as  *)
9(*  published by the Free Software Foundation; either version 2 of  *)
10(*  the License, or (at your option) any later version.             *)
11(*                                                                  *)
12(*  This program is distributed in the hope that it will be useful, *)
13(*  but WITHOUT ANY WARRANTY; without even the implied warranty of  *)
14(*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the   *)
15(*  GNU General Public License for more details.                    *)
16(*                                                                  *)
17(*  You should have received a copy of the GNU General Public       *)
18(*  License along with this program; if not, write to the           *)
19(*  Free Software Foundation, Inc., 51 Franklin Street,             *)
20(*  Fifth Floor, Boston, MA  02110-1301, USA.                       *)
21(*                                                                  *)
22(********************************************************************)
23
24
25$ include "seed7_05.s7i";
26  include "stdio.s7i";
27  include "bin32.s7i";
28
29
30const integer: INT32_MIN is pred(-2147483647);
31const integer: INT32_MAX is 2147483647;
32const integer: INT64_MIN is integer.first;
33const integer: INT64_MAX is integer.last;
34
35
36const func integer: intExpr (in integer: number) is
37  return number + length(str(rand(1, 9))[2 ..]);
38
39
40const func string: striExpr (in string: stri) is
41  return stri & str(rand(1, 9))[2 ..];
42
43
44const func char: charExpr (in char: ch) is
45  return chr(ord(ch) + length(str(rand(1, 9))[2 ..]));
46
47
48const func boolean: boolExpr (ref boolean: value) is
49  return value and str(rand(1, 9))[2 ..] = "";
50
51
52const func boolean: raisesOverflowError (ref func integer: expression) is func
53  result
54    var boolean: raisesOverflowError is FALSE;
55  local
56    var integer: exprResult is 0;
57  begin
58    block
59      exprResult := expression;
60    exception
61      catch NUMERIC_ERROR:  raisesOverflowError := FALSE;
62      catch OVERFLOW_ERROR: raisesOverflowError := TRUE;
63    end block;
64  end func;
65
66
67const func boolean: raisesOverflowError (ref func bin32: expression) is func
68  result
69    var boolean: raisesOverflowError is FALSE;
70  local
71    var bin32: exprResult is bin32(0);
72  begin
73    block
74      exprResult := expression;
75    exception
76      catch NUMERIC_ERROR:  raisesOverflowError := FALSE;
77      catch OVERFLOW_ERROR: raisesOverflowError := TRUE;
78    end block;
79  end func;
80
81
82const func boolean: raisesOverflowError (ref proc: statement) is func
83  result
84    var boolean: raisesOverflowError is FALSE;
85  begin
86    block
87      statement;
88    exception
89      catch NUMERIC_ERROR:  raisesOverflowError := FALSE;
90      catch OVERFLOW_ERROR: raisesOverflowError := TRUE;
91    end block;
92  end func;
93
94
95const func string: exceptionName (ref func integer: expression) is func
96  result
97    var string: exceptionName is "";
98  local
99    var integer: exprResult is 0;
100  begin
101    block
102      exprResult := expression;
103    exception
104      catch NUMERIC_ERROR: exceptionName := "NUMERIC_ERROR";
105      catch OVERFLOW_ERROR: exceptionName := "OVERFLOW_ERROR";
106    end block;
107  end func;
108
109
110const func string: exceptionName (ref proc: statement) is func
111  result
112    var string: exceptionName is "";
113  begin
114    block
115      statement;
116    exception
117      catch NUMERIC_ERROR: exceptionName := "NUMERIC_ERROR";
118      catch OVERFLOW_ERROR: exceptionName := "OVERFLOW_ERROR";
119    end block;
120  end func;
121
122
123const proc: check_negation is func
124  local
125    var boolean: okay is TRUE;
126  begin
127    if  not raisesOverflowError(-                      INT64_MIN)   or
128        not raisesOverflowError(-intExpr(              INT64_MIN))  or
129        not raisesOverflowError(-        (-9223372036854775807-1))  or
130        not raisesOverflowError(-intExpr((-9223372036854775807-1))) then
131      writeln(" ***** Negation -(-9223372036854775808) does not raise OVERFLOW_ERROR.");
132      okay := FALSE;
133    end if;
134
135    if okay then
136      writeln("Overflow checking of negation works correct.");
137    else
138      writeln(" ***** Overflow checking of negation does not work correct.");
139    end if;
140  end func;
141
142
143(**
144 *  Tests for the compiler optimization to reduce overflow checking
145 *  for addition and subtraction.
146 *)
147const func boolean: check_reduced_overflow_checking_for_sums is func
148  result
149    var boolean: okay is TRUE;
150  begin
151    if  not raisesOverflowError(intExpr( integer.last) div -integer.last +        integer.first) or
152        not raisesOverflowError(intExpr( integer.last) div  -34359738368 + -9223372036586340354) or
153        not raisesOverflowError(intExpr( integer.last) div   -1234567890 + -9223372029383844392) or
154        not raisesOverflowError(intExpr( integer.last) div            -2 + -4611686018427387906) or
155        not raisesOverflowError(intExpr( integer.last) div            -1 +                   -2) or
156        not raisesOverflowError(intExpr(integer.first) div             1 +                   -1) or
157        not raisesOverflowError(intExpr(integer.first) div             2 + -4611686018427387905) or
158        not raisesOverflowError(intExpr(integer.first) div    1234567890 + -9223372029383844392) or
159        not raisesOverflowError(intExpr(integer.first) div   34359738368 + -9223372036586340353) or
160        not raisesOverflowError(intExpr(integer.first) div  integer.last +        integer.first) then
161      writeln(" ***** Reduced overflow check for sums failed: Minimum division result if the divisor is known.");
162      okay := FALSE;
163    end if;
164
165    if  not raisesOverflowError(intExpr(integer.first) div integer.first +  9223372036854775807) or
166        not raisesOverflowError(intExpr(integer.first) div -integer.last +  9223372036854775807) or
167        not raisesOverflowError(intExpr(integer.first) div  -34359738368 +  9223372036586340352) or
168        not raisesOverflowError(intExpr(integer.first) div   -1234567890 +  9223372029383844392) or
169        not raisesOverflowError(intExpr(integer.first) div            -2 +  4611686018427387904) or
170        not raisesOverflowError(intExpr( integer.last) div             1 +                    1) or
171        not raisesOverflowError(intExpr( integer.last) div             2 +  4611686018427387905) or
172        not raisesOverflowError(intExpr( integer.last) div    1234567890 +  9223372029383844391) or
173        not raisesOverflowError(intExpr( integer.last) div   34359738368 +  9223372036586340353) or
174        not raisesOverflowError(intExpr( integer.last) div  integer.last +  9223372036854775807) then
175      writeln(" ***** Reduced overflow check for sums failed: Maximum division result if the divisor is known.");
176      okay := FALSE;
177    end if;
178
179    if  not raisesOverflowError(       integer.first div intExpr( 1) +                   -1) or
180        not raisesOverflowError(-9223372036854775807 div intExpr( 1) +                   -2) or
181        not raisesOverflowError(-9223372036854775806 div intExpr( 1) +                   -3) or
182        not raisesOverflowError(-4611686018427387904 div intExpr( 1) + -4611686018427387905) or
183        not raisesOverflowError(         -1234567890 div intExpr( 1) + -9223372035620207919) or
184        not raisesOverflowError(                  -1 div intExpr( 1) +        integer.first) or
185        not raisesOverflowError(                   1 div intExpr(-1) +        integer.first) or
186        not raisesOverflowError(          1234567890 div intExpr(-1) + -9223372035620207919) or
187        not raisesOverflowError( 4611686018427387904 div intExpr(-1) + -4611686018427387905) or
188        not raisesOverflowError( 9223372036854775806 div intExpr(-1) +                   -3) or
189        not raisesOverflowError( 9223372036854775807 div intExpr(-1) +                   -2) then
190      writeln(" ***** Reduced overflow check for sums failed: Minimum division result if the dividend is known.");
191      okay := FALSE;
192    end if;
193
194    if  not raisesOverflowError(-9223372036854775807 div intExpr(-1) +                    1) or
195        not raisesOverflowError(-9223372036854775806 div intExpr(-1) +                    2) or
196        not raisesOverflowError(-4611686018427387904 div intExpr(-1) +  4611686018427387904) or
197        not raisesOverflowError(         -1234567890 div intExpr(-1) +  9223372035620207918) or
198        not raisesOverflowError(                  -1 div intExpr(-1) +  9223372036854775807) or
199        not raisesOverflowError(                   1 div intExpr( 1) +  9223372036854775807) or
200        not raisesOverflowError(          1234567890 div intExpr( 1) +  9223372035620207918) or
201        not raisesOverflowError( 4611686018427387904 div intExpr( 1) +  4611686018427387904) or
202        not raisesOverflowError( 9223372036854775806 div intExpr( 1) +                    2) or
203        not raisesOverflowError( 9223372036854775807 div intExpr( 1) +                    1) then
204      writeln(" ***** Reduced overflow check for sums failed: Maximum division result if the dividend is known.");
205      okay := FALSE;
206    end if;
207
208    if  not raisesOverflowError(intExpr(       -integer.last) rem        integer.first +                   -2) or
209        not raisesOverflowError(intExpr(       -integer.last) rem -4611686018427387904 + -4611686018427387906) or
210        not raisesOverflowError(intExpr(       -integer.last) rem         -34359738368 + -9223372002495037442) or
211        not raisesOverflowError(intExpr(         -6172839449) rem          -1234567890 + -9223372035620207920) or
212        not raisesOverflowError(intExpr(       -123456789123) rem                   -2 +        integer.first) or
213        not raisesOverflowError(intExpr(       -123456789123) rem                    2 +        integer.first) or
214        not raisesOverflowError(intExpr(         -6172839449) rem           1234567890 + -9223372035620207920) or
215        not raisesOverflowError(intExpr(       -integer.last) rem          34359738368 + -9223372002495037442) or
216        not raisesOverflowError(intExpr(       -integer.last) rem  4611686018427387904 + -4611686018427387906) or
217        not raisesOverflowError(intExpr(-9223372036854775806) rem         integer.last +                   -3) then
218      writeln(" ***** Reduced overflow check for sums failed: Minimum remainder result if the divisor is known.");
219      okay := FALSE;
220    end if;
221
222    if  not raisesOverflowError(intExpr(        integer.last) rem        integer.first +                    1) or
223        not raisesOverflowError(intExpr(        integer.last) rem -4611686018427387904 +  4611686018427387905) or
224        not raisesOverflowError(intExpr(        integer.last) rem         -34359738368 +  9223372002495037441) or
225        not raisesOverflowError(intExpr(          6172839449) rem          -1234567890 +  9223372035620207919) or
226        not raisesOverflowError(intExpr(        123456789123) rem                   -2 +  9223372036854775807) or
227        not raisesOverflowError(intExpr(        123456789123) rem                    2 +  9223372036854775807) or
228        not raisesOverflowError(intExpr(          6172839449) rem           1234567890 +  9223372035620207919) or
229        not raisesOverflowError(intExpr(        integer.last) rem          34359738368 +  9223372002495037441) or
230        not raisesOverflowError(intExpr(        integer.last) rem  4611686018427387904 +  4611686018427387905) or
231        not raisesOverflowError(intExpr( 9223372036854775806) rem         integer.last +                    2) then
232      writeln(" ***** Reduced overflow check for sums failed: Maximum remainder result if the divisor is known.");
233      okay := FALSE;
234    end if;
235
236    if  not raisesOverflowError(-9223372036854775807 rem intExpr(      integer.first) +                   -2) or
237        not raisesOverflowError(         -1234567890 rem intExpr(         2345678901) + -9223372035620207919) or
238        not raisesOverflowError(                  -1 rem intExpr(                  2) +        integer.first) then
239      writeln(" ***** Reduced overflow check for sums failed: Minimum remainder result if the dividend is known.");
240      okay := FALSE;
241    end if;
242
243    if  not raisesOverflowError(                   1 rem intExpr(                  2) +  9223372036854775807) or
244        not raisesOverflowError(          1234567890 rem intExpr(         2345678901) +  9223372035620207918) or
245        not raisesOverflowError( 9223372036854775807 rem intExpr(      integer.first) +                    1) then
246      writeln(" ***** Reduced overflow check for sums failed: Maximum remainder result if the dividend is known.");
247      okay := FALSE;
248    end if;
249
250    if  not raisesOverflowError(intExpr( integer.last) mdiv integer.first +        integer.first) or
251        not raisesOverflowError(intExpr( integer.last) mdiv  -34359738368 + -9223372036586340353) or
252        not raisesOverflowError(intExpr( integer.last) mdiv   -1234567890 + -9223372029383844391) or
253        not raisesOverflowError(intExpr( integer.last) mdiv            -2 + -4611686018427387905) or
254        not raisesOverflowError(intExpr( integer.last) mdiv            -1 +                   -2) or
255        not raisesOverflowError(intExpr(integer.first) mdiv             1 +                   -1) or
256        not raisesOverflowError(intExpr(integer.first) mdiv             2 + -4611686018427387905) or
257        not raisesOverflowError(intExpr(integer.first) mdiv    1234567890 + -9223372029383844391) or
258        not raisesOverflowError(intExpr(integer.first) mdiv   34359738368 + -9223372036586340353) or
259        not raisesOverflowError(intExpr(integer.first) mdiv  integer.last + -9223372036854775807) then
260      writeln(" ***** Reduced overflow check for sums failed: Minimum mdiv division result if the divisor is known.");
261      okay := FALSE;
262    end if;
263
264    if  not raisesOverflowError(intExpr(integer.first) mdiv integer.first +  9223372036854775807) or
265        not raisesOverflowError(intExpr(integer.first) mdiv  -34359738368 +  9223372036586340352) or
266        not raisesOverflowError(intExpr(integer.first) mdiv   -1234567890 +  9223372029383844392) or
267        not raisesOverflowError(intExpr(integer.first) mdiv            -2 +  4611686018427387904) or
268        not raisesOverflowError(intExpr( integer.last) mdiv             1 +                    1) or
269        not raisesOverflowError(intExpr( integer.last) mdiv             2 +  4611686018427387905) or
270        not raisesOverflowError(intExpr( integer.last) mdiv    1234567890 +  9223372029383844391) or
271        not raisesOverflowError(intExpr( integer.last) mdiv   34359738368 +  9223372036586340353) or
272        not raisesOverflowError(intExpr( integer.last) mdiv  integer.last +  9223372036854775807) then
273      writeln(" ***** Reduced overflow check for sums failed: Maximum mdiv division result if the divisor is known.");
274      okay := FALSE;
275    end if;
276
277    if  not raisesOverflowError(       integer.first mdiv intExpr( 1) +                   -1) or
278        not raisesOverflowError(-9223372036854775807 mdiv intExpr( 1) +                   -2) or
279        not raisesOverflowError(-9223372036854775806 mdiv intExpr( 1) +                   -3) or
280        not raisesOverflowError(-4611686018427387904 mdiv intExpr( 1) + -4611686018427387905) or
281        not raisesOverflowError(         -1234567890 mdiv intExpr( 1) + -9223372035620207919) or
282        not raisesOverflowError(                  -1 mdiv intExpr( 1) +        integer.first) or
283        not raisesOverflowError(                   1 mdiv intExpr(-1) +        integer.first) or
284        not raisesOverflowError(          1234567890 mdiv intExpr(-1) + -9223372035620207919) or
285        not raisesOverflowError( 4611686018427387904 mdiv intExpr(-1) + -4611686018427387905) or
286        not raisesOverflowError( 9223372036854775806 mdiv intExpr(-1) +                   -3) or
287        not raisesOverflowError( 9223372036854775807 mdiv intExpr(-1) +                   -2) then
288      writeln(" ***** Reduced overflow check for sums failed: Minimum mdiv division result if the dividend is known.");
289      okay := FALSE;
290    end if;
291
292    if  not raisesOverflowError(-9223372036854775807 mdiv intExpr(-1) +                    1) or
293        not raisesOverflowError(-9223372036854775806 mdiv intExpr(-1) +                    2) or
294        not raisesOverflowError(-4611686018427387904 mdiv intExpr(-1) +  4611686018427387904) or
295        not raisesOverflowError(         -1234567890 mdiv intExpr(-1) +  9223372035620207918) or
296        not raisesOverflowError(                  -1 mdiv intExpr(-1) +  9223372036854775807) or
297        not raisesOverflowError(                   1 mdiv intExpr( 1) +  9223372036854775807) or
298        not raisesOverflowError(          1234567890 mdiv intExpr( 1) +  9223372035620207918) or
299        not raisesOverflowError( 4611686018427387904 mdiv intExpr( 1) +  4611686018427387904) or
300        not raisesOverflowError( 9223372036854775806 mdiv intExpr( 1) +                    2) or
301        not raisesOverflowError( 9223372036854775807 mdiv intExpr( 1) +                    1) then
302      writeln(" ***** Reduced overflow check for sums failed: Maximum mdiv division result if the dividend is known.");
303      okay := FALSE;
304    end if;
305
306    if  not raisesOverflowError(intExpr(       -integer.last) mod        integer.first +                   -2) or
307        not raisesOverflowError(intExpr( 4611686018427387905) mod -4611686018427387904 + -4611686018427387906) or
308        not raisesOverflowError(intExpr( 9223372002495037441) mod         -34359738368 + -9223372002495037442) or
309        not raisesOverflowError(intExpr(          6172839451) mod          -1234567890 + -9223372035620207920) or
310        not raisesOverflowError(intExpr(        123456789123) mod                   -2 +        integer.first) then
311      writeln(" ***** Reduced overflow check for sums failed: Minimum modulo result if the divisor is known.");
312      okay := FALSE;
313    end if;
314
315    if  not raisesOverflowError(intExpr(        123456789123) mod                    2 +  9223372036854775807) or
316        not raisesOverflowError(intExpr(          6172839449) mod           1234567890 +  9223372035620207919) or
317        not raisesOverflowError(intExpr( 9223372002495037439) mod          34359738368 +  9223372002495037442) or
318        not raisesOverflowError(intExpr(        integer.last) mod  4611686018427387904 +  4611686018427387905) or
319        not raisesOverflowError(intExpr( 9223372036854775806) mod         integer.last +                    2) then
320      writeln(" ***** Reduced overflow check for sums failed: Maximum modulo result if the divisor is known.");
321      okay := FALSE;
322    end if;
323
324    if  not raisesOverflowError(       integer.first mod intExpr(-4611686018427387905) + -4611686018427387906) or
325        not raisesOverflowError(-9223372036854775807 mod intExpr(       integer.first) +                   -2) or
326        not raisesOverflowError(-7654321098765432109 mod intExpr(-7654321098765432110) + -1569050938089343700) or
327        not raisesOverflowError(-4611686018427387906 mod intExpr(-4611686018427387907) + -4611686018427387903) or
328        not raisesOverflowError(-4611686018427387905 mod intExpr(-4611686018427387906) + -4611686018427387904) or
329        not raisesOverflowError(-4611686018427387904 mod intExpr(-4611686018427387905) + -4611686018427387905) or
330        not raisesOverflowError(         -1234567890 mod intExpr(         -1234567891) + -9223372035620207919) or
331        not raisesOverflowError(                  -1 mod intExpr(                  -2) +        integer.first) or
332        not raisesOverflowError(                   1 mod intExpr(       integer.first) +                   -2) or
333        not raisesOverflowError(          1234567890 mod intExpr(       integer.first) +          -1234567891) or
334        not raisesOverflowError( 4611686018427387904 mod intExpr(       integer.first) + -4611686018427387905) or
335        not raisesOverflowError( 4611686018427387905 mod intExpr(-4611686018427387904) + -4611686018427387906) or
336        not raisesOverflowError( 4611686018427387906 mod intExpr(-4611686018427387905) + -4611686018427387905) or
337        not raisesOverflowError( 7654321098765432109 mod intExpr(-7654321098765432108) + -1569050938089343702) or
338        not raisesOverflowError( 9223372036854775806 mod intExpr(-9223372036854775805) +                   -5) or
339        not raisesOverflowError(        integer.last mod intExpr(-9223372036854775806) +                   -4) then
340      writeln(" ***** Reduced overflow check for sums failed: Minimum modulo result if the dividend is known.");
341      okay := FALSE;
342    end if;
343
344    if  not raisesOverflowError(       integer.first mod intExpr(        integer.last) +                    2) or
345        not raisesOverflowError(-9223372036854775807 mod intExpr( 9223372036854775806) +                    3) or
346        not raisesOverflowError(-7654321098765432109 mod intExpr( 7654321098765432108) +  1569050938089343701) or
347        not raisesOverflowError(-4611686018427387906 mod intExpr( 4611686018427387905) +  4611686018427387904) or
348        not raisesOverflowError(-4611686018427387905 mod intExpr( 4611686018427387904) +  4611686018427387905) or
349        not raisesOverflowError(-4611686018427387904 mod intExpr(        integer.last) +  4611686018427387905) or
350        not raisesOverflowError(         -1234567890 mod intExpr(        integer.last) +           1234567891) or
351        not raisesOverflowError(                  -1 mod intExpr(        integer.last) +                    2) or
352        not raisesOverflowError(                   1 mod intExpr(                   2) +  9223372036854775807) or
353        not raisesOverflowError(          1234567890 mod intExpr(          1234567891) +  9223372035620207918) or
354        not raisesOverflowError( 4611686018427387904 mod intExpr( 4611686018427387905) +  4611686018427387904) or
355        not raisesOverflowError( 4611686018427387905 mod intExpr( 4611686018427387906) +  4611686018427387903) or
356        not raisesOverflowError( 4611686018427387906 mod intExpr( 4611686018427387907) +  4611686018427387902) or
357        not raisesOverflowError( 7654321098765432109 mod intExpr( 7654321098765432110) +  1569050938089343699) or
358        not raisesOverflowError( 9223372036854775806 mod intExpr( 9223372036854775807) +                    2) or
359        not raisesOverflowError(        integer.last mod intExpr( 4611686018427387904) +  4611686018427387905) then
360      writeln(" ***** Reduced overflow check for sums failed: Maximum modulo result if the dividend is known.");
361      okay := FALSE;
362    end if;
363
364    if  not raisesOverflowError((intExpr(integer.first) >>  0) +                   -1) or
365        not raisesOverflowError((intExpr(integer.first) >>  1) + -4611686018427387905) or
366        not raisesOverflowError((intExpr(integer.first) >> 30) + -9223372028264841217) or
367        not raisesOverflowError((intExpr(integer.first) >> 62) + -9223372036854775807) or
368        not raisesOverflowError((intExpr(integer.first) >> 63) +        integer.first) then
369      writeln(" ***** Reduced overflow check for sums failed: Minimum rshift result if the shift amount is known.");
370      okay := FALSE;
371    end if;
372
373    if  not raisesOverflowError((intExpr( integer.last) >>  0) +                    1) or
374        not raisesOverflowError((intExpr( integer.last) >>  1) +  4611686018427387905) or
375        not raisesOverflowError((intExpr( integer.last) >> 30) +  9223372028264841217) or
376        not raisesOverflowError((intExpr( integer.last) >> 62) +  9223372036854775807) then
377      writeln(" ***** Reduced overflow check for sums failed: Maximum rshift result if the shift amount is known.");
378      okay := FALSE;
379    end if;
380
381    if  not raisesOverflowError((       integer.first >> intExpr( 0)) +                   -1) or
382        not raisesOverflowError((       -integer.last >> intExpr( 0)) +                   -2) or
383        not raisesOverflowError((-9012345678901234567 >> intExpr( 0)) +  -211026357953541242) or
384        not raisesOverflowError((-4611686018427387904 >> intExpr( 0)) + -4611686018427387905) or
385        not raisesOverflowError((         -1234567890 >> intExpr( 0)) + -9223372035620207919) or
386        not raisesOverflowError((                  -2 >> intExpr( 0)) + -9223372036854775807) or
387        not raisesOverflowError((                  -1 >> intExpr( 0)) +        integer.first) then
388      writeln(" ***** Reduced overflow check for sums failed: Minimum rshift result if the shifted value is known.");
389      okay := FALSE;
390    end if;
391
392    if  not raisesOverflowError((                   1 >> intExpr( 0)) +  9223372036854775807) or
393        not raisesOverflowError((                   2 >> intExpr( 0)) +  9223372036854775806) or
394        not raisesOverflowError((          1234567890 >> intExpr( 0)) +  9223372035620207918) or
395        not raisesOverflowError(( 4611686018427387903 >> intExpr( 0)) +  4611686018427387905) or
396        not raisesOverflowError(( 9012345678901234567 >> intExpr( 0)) +   211026357953541241) or
397        not raisesOverflowError(( 9223372036854775806 >> intExpr( 0)) +                    2) or
398        not raisesOverflowError((        integer.last >> intExpr( 0)) +                    1) then
399      writeln(" ***** Reduced overflow check for sums failed: Maximum rshift result if the shifted value is known.");
400      okay := FALSE;
401    end if;
402
403    if  not raisesOverflowError( abs(         intExpr( integer.last)) +                    1) or
404        not raisesOverflowError(-abs(         intExpr( integer.last)) -                    2) or
405        not raisesOverflowError(-abs(         intExpr(            0)) -        integer.first) or
406        not raisesOverflowError( log2(        intExpr(            0)) +        integer.first) or
407        not raisesOverflowError( log2(        intExpr( integer.last)) +  9223372036854775746) or
408        not raisesOverflowError(-log2(        intExpr( integer.last)) -  9223372036854775747) or
409        not raisesOverflowError(-log2(        intExpr(            0)) - -9223372036854775807) or
410        not raisesOverflowError( log10(       intExpr(            0)) +        integer.first) or
411        not raisesOverflowError( log10(       intExpr( integer.last)) +  9223372036854775790) or
412        not raisesOverflowError(-log10(       intExpr( integer.last)) -  9223372036854775791) or
413        not raisesOverflowError(-log10(       intExpr(            0)) - -9223372036854775807) or
414        not raisesOverflowError( sqrt(        intExpr( integer.last)) +  9223372033817775309) or
415        not raisesOverflowError(-sqrt(        intExpr( integer.last)) -  9223372033817775310) or
416        not raisesOverflowError(-sqrt(        intExpr(            0)) -        integer.first) or
417        not raisesOverflowError( bitLength(   intExpr( integer.last)) +  9223372036854775745) or
418        not raisesOverflowError( bitLength(   intExpr( integer.last)) + bitLength(   intExpr( integer.last)) +  9223372036854775682) or
419        not raisesOverflowError(-bitLength(   intExpr( integer.last)) -  9223372036854775746) or
420        not raisesOverflowError(-bitLength(   intExpr(            0)) -        integer.first) or
421        not raisesOverflowError(-bitLength(   intExpr( integer.last)) - bitLength(   intExpr( integer.last)) -  9223372036854775683) or
422        not raisesOverflowError(-bitLength(   intExpr(            0)) - bitLength(   intExpr(            0)) -        integer.first) or
423        not raisesOverflowError( lowestSetBit(intExpr(            0)) +        integer.first) or
424        not raisesOverflowError( lowestSetBit(intExpr(integer.first)) +  9223372036854775745) or
425        not raisesOverflowError(-lowestSetBit(intExpr(integer.first)) -  9223372036854775746) or
426        not raisesOverflowError(-lowestSetBit(intExpr(            0)) - -9223372036854775807) or
427
428        not raisesOverflowError( rand(        -1234567890,  intExpr(-1234567890)) + -9223372035620207919) or
429        not raisesOverflowError( rand(intExpr( 1234567890),          1234567890 ) +  9223372035620207918) or
430        not raisesOverflowError(-rand(intExpr( 1234567890),          1234567890 ) -  9223372035620207919) or
431        not raisesOverflowError(-rand(        -1234567890,  intExpr(-1234567890)) - -9223372035620207918) or
432
433        not raisesOverflowError( compare(intExpr(0), intExpr(1)) +        integer.first) or
434        not raisesOverflowError( compare(intExpr(1), intExpr(0)) +  9223372036854775807) or
435        not raisesOverflowError(-compare(intExpr(1), intExpr(0)) +        integer.first) or
436        not raisesOverflowError(-compare(intExpr(0), intExpr(1)) - -9223372036854775807) then
437      writeln(" ***** Reduced overflow check for sums failed: Various integer functions.");
438      okay := FALSE;
439    end if;
440
441    if  not raisesOverflowError( abs(ord(charExpr(char(-2147483648) ))) + 9223372034707292160) or
442        not raisesOverflowError( abs(ord(charExpr(char(-2147483648) ))) + abs(ord(charExpr(char(-2147483648) ))) + 9223372032559808512) or
443        not raisesOverflowError(-abs(ord(charExpr(char(-2147483648) ))) - 9223372034707292161) or
444        not raisesOverflowError(-abs(ord(charExpr(char(-2147483648) ))) - abs(ord(charExpr(char(-2147483648) ))) - 9223372032559808513) then
445      writeln(" ***** Reduced overflow check for sums failed: abs(ord(char))");
446      okay := FALSE;
447    end if;
448
449    if  not raisesOverflowError( ord(boolExpr(TRUE)) + 9223372036854775807) or
450        not raisesOverflowError(-ord(boolExpr(TRUE)) + integer.first) or
451        not raisesOverflowError( ord(boolExpr(TRUE)) + ord(boolExpr(TRUE)) + 9223372036854775806) or
452        not raisesOverflowError(-ord(boolExpr(TRUE)) - ord(boolExpr(TRUE)) - 9223372036854775807) or
453        not raisesOverflowError(ord(boolExpr(TRUE)) + ord(boolExpr(TRUE)) + ord(boolExpr(TRUE)) + 9223372036854775805) or
454        not raisesOverflowError(ord(boolExpr(TRUE)) + ord(boolExpr(TRUE)) + ord(boolExpr(TRUE)) + ord(boolExpr(TRUE)) + 9223372036854775804) or
455        not raisesOverflowError(ord(boolExpr( TRUE)) + sqrt(intExpr(integer.last)) +  9223372033817775308) or
456        not raisesOverflowError(ord(boolExpr(FALSE)) - sqrt(intExpr(integer.last)) + -9223372033817775310) or
457        not raisesOverflowError(ord(boolExpr( TRUE)) - sqrt(intExpr(           0)) +         integer.last) or
458        not raisesOverflowError(ord(boolExpr( TRUE)) + abs(intExpr(1)) +  9223372036854775806) or
459        not raisesOverflowError(ord(boolExpr(FALSE)) - abs(intExpr(1)) +        integer.first) then
460      writeln(" ***** Reduced overflow check for sums failed: ord(boolean)");
461      okay := FALSE;
462    end if;
463
464    if  not raisesOverflowError( ord(charExpr(char(-2147483648) )) + -9223372034707292161) or
465        not raisesOverflowError( ord(charExpr(    '\2147483647;')) +  9223372034707292161) or
466        not raisesOverflowError(-ord(charExpr(    '\2147483647;')) -  9223372034707292162) or
467        not raisesOverflowError(-ord(charExpr(char(-2147483648) )) - -9223372034707292160) or
468        not raisesOverflowError( ord(charExpr(char(-2147483648) )) + ord(charExpr(char(-2147483648) )) + -9223372032559808513) or
469        not raisesOverflowError( ord(charExpr(    '\2147483647;')) + ord(charExpr(    '\2147483647;')) +  9223372032559808514) or
470        not raisesOverflowError(-ord(charExpr(    '\2147483647;')) - ord(charExpr(    '\2147483647;')) -  9223372032559808515) or
471        not raisesOverflowError(-ord(charExpr(char(-2147483648) )) - ord(charExpr(char(-2147483648) )) - -9223372032559808512) or
472        not raisesOverflowError(ord(charExpr(char(-2147483648) )) + ord(charExpr(char(-2147483648) )) +
473                                ord(charExpr(char(-2147483648) )) + -9223372030412324865) or
474        not raisesOverflowError(ord(charExpr(    '\2147483647;')) + ord(charExpr(    '\2147483647;')) +
475                                ord(charExpr(    '\2147483647;')) +  9223372030412324867) or
476        not raisesOverflowError(ord(charExpr(char(-2147483648) )) + ord(charExpr(char(-2147483648) )) +
477                                ord(charExpr(char(-2147483648) )) + ord(charExpr(char(-2147483648) )) + -9223372028264841217) or
478        not raisesOverflowError(ord(charExpr(    '\2147483647;')) + ord(charExpr(    '\2147483647;')) +
479                                ord(charExpr(    '\2147483647;')) + ord(charExpr(    '\2147483647;')) +  9223372028264841220) or
480        not raisesOverflowError(ord(charExpr(char(-2147483648) )) - ord(charExpr(    '\2147483647;')) + -9223372032559808514) or
481        not raisesOverflowError(ord(charExpr(    '\2147483647;')) - ord(charExpr(char(-2147483648) )) +  9223372032559808513) or
482        not raisesOverflowError(ord(charExpr(char(-2147483648) )) + sqrt(intExpr(           0)) + -9223372034707292161) or
483        not raisesOverflowError(ord(charExpr(    '\2147483647;')) + sqrt(intExpr(integer.last)) +  9223372031670291662) or
484        not raisesOverflowError(ord(charExpr(char(-2147483648) )) - sqrt(intExpr(integer.last)) + -9223372031670291662) or
485        not raisesOverflowError(ord(charExpr(    '\2147483647;')) - sqrt(intExpr(           0)) +  9223372034707292161) or
486        not raisesOverflowError(ord(charExpr(char(-2147483648) )) + abs(intExpr(1)) + -9223372034707292162) or
487        not raisesOverflowError(ord(charExpr(    '\2147483647;')) + abs(intExpr(1)) +  9223372034707292160) or
488        not raisesOverflowError(ord(charExpr(char(-2147483648) )) - abs(intExpr(1)) + -9223372034707292160) or
489        not raisesOverflowError(ord(charExpr(    '\2147483647;')) - abs(intExpr(1)) +  9223372034707292163) then
490      writeln(" ***** Reduced overflow check for sums failed: ord(char)");
491      okay := FALSE;
492    end if;
493
494    if  not raisesOverflowError(pos("a",   striExpr("a")) + 9223372036854775807) or
495        not raisesOverflowError(pos("ab",  striExpr("b")) + 9223372036854775806) or
496        not raisesOverflowError(pos("abc", striExpr("c")) + 9223372036854775805) then
497      writeln(" ***** Reduced overflow check for sums failed: Maximum pos result if the main string is known.");
498      okay := FALSE;
499    end if;
500  end func;
501
502
503const proc: check_add is func
504  local
505    var boolean: okay is TRUE;
506  begin
507    if  not raisesOverflowError(           INT64_MIN +                   -1) or
508        not raisesOverflowError(-9223372036854775807 +                   -2) or
509        not raisesOverflowError(-9223372036854775806 +                   -3) or
510        not raisesOverflowError(-9223372036854775798 +                  -11) or
511        not raisesOverflowError(-9223372036854774952 +                 -857) or
512        not raisesOverflowError(-9223372036854771170 +                -4639) or
513        not raisesOverflowError(-9223372036854737536 +               -38273) or
514        not raisesOverflowError(-9223372036854131366 +              -644443) or
515        not raisesOverflowError(-9223372036844899256 +             -9876553) or
516        not raisesOverflowError(-9223372036842430156 +            -12345653) or
517        not raisesOverflowError(-9223372036731319018 +           -123456791) or
518        not raisesOverflowError(-9223372033817775310 +          -3037000499) or
519        not raisesOverflowError(-9223371962145462841 +         -74709312968) or
520        not raisesOverflowError(-9223371289760066696 +        -747094709113) or
521        not raisesOverflowError(-9223371102989282772 +        -933865493037) or
522        not raisesOverflowError(-9223357724693674122 +      -14312161101687) or
523        not raisesOverflowError(-9223131047853734481 +     -240989001041328) or
524        not raisesOverflowError(-9221383812660584222 +    -1988224194191587) or
525        not raisesOverflowError(-9212609642412704893 +   -10762394442070916) or
526        not raisesOverflowError(-8384883669867978009 +  -838488366986797800) or
527        not raisesOverflowError(-6148914691236517207 + -3074457345618258602) or
528        not raisesOverflowError(-3074457345618258602 + -6148914691236517207) or
529        not raisesOverflowError( -838488366986797800 + -8384883669867978009) or
530        not raisesOverflowError(  -10762394442070916 + -9212609642412704893) or
531        not raisesOverflowError(   -1988224194191587 + -9221383812660584222) or
532        not raisesOverflowError(    -240989001041328 + -9223131047853734481) or
533        not raisesOverflowError(     -14312161101687 + -9223357724693674122) or
534        not raisesOverflowError(       -933865493037 + -9223371102989282772) or
535        not raisesOverflowError(       -747094709113 + -9223371289760066696) or
536        not raisesOverflowError(        -74709312968 + -9223371962145462841) or
537        not raisesOverflowError(         -3037000499 + -9223372033817775310) or
538        not raisesOverflowError(          -123456791 + -9223372036731319018) or
539        not raisesOverflowError(           -12345653 + -9223372036842430156) or
540        not raisesOverflowError(            -9876553 + -9223372036844899256) or
541        not raisesOverflowError(             -644443 + -9223372036854131366) or
542        not raisesOverflowError(              -38273 + -9223372036854737536) or
543        not raisesOverflowError(               -4639 + -9223372036854771170) or
544        not raisesOverflowError(                -857 + -9223372036854774952) or
545        not raisesOverflowError(                 -11 + -9223372036854775798) or
546        not raisesOverflowError(                  -3 + -9223372036854775806) or
547        not raisesOverflowError(                  -2 + -9223372036854775807) or
548        not raisesOverflowError(                  -1 +            INT64_MIN) then
549      writeln(" ***** Addition underflow by one does not raise OVERFLOW_ERROR. (1)");
550      okay := FALSE;
551    end if;
552
553    if  not raisesOverflowError(intExpr(           INT64_MIN) +                   -1) or
554        not raisesOverflowError(intExpr(-9223372036854775807) +                   -2) or
555        not raisesOverflowError(intExpr(-9223372036854775806) +                   -3) or
556        not raisesOverflowError(intExpr(-9223372036854775798) +                  -11) or
557        not raisesOverflowError(intExpr(-9223372036854774952) +                 -857) or
558        not raisesOverflowError(intExpr(-9223372036854771170) +                -4639) or
559        not raisesOverflowError(intExpr(-9223372036854737536) +               -38273) or
560        not raisesOverflowError(intExpr(-9223372036854131366) +              -644443) or
561        not raisesOverflowError(intExpr(-9223372036844899256) +             -9876553) or
562        not raisesOverflowError(intExpr(-9223372036842430156) +            -12345653) or
563        not raisesOverflowError(intExpr(-9223372036731319018) +           -123456791) or
564        not raisesOverflowError(intExpr(-9223372033817775310) +          -3037000499) or
565        not raisesOverflowError(intExpr(-9223371962145462841) +         -74709312968) or
566        not raisesOverflowError(intExpr(-9223371289760066696) +        -747094709113) or
567        not raisesOverflowError(intExpr(-9223371102989282772) +        -933865493037) or
568        not raisesOverflowError(intExpr(-9223357724693674122) +      -14312161101687) or
569        not raisesOverflowError(intExpr(-9223131047853734481) +     -240989001041328) or
570        not raisesOverflowError(intExpr(-9221383812660584222) +    -1988224194191587) or
571        not raisesOverflowError(intExpr(-9212609642412704893) +   -10762394442070916) or
572        not raisesOverflowError(intExpr(-8384883669867978009) +  -838488366986797800) or
573        not raisesOverflowError(intExpr(-6148914691236517207) + -3074457345618258602) or
574        not raisesOverflowError(intExpr(-3074457345618258602) + -6148914691236517207) or
575        not raisesOverflowError(intExpr( -838488366986797800) + -8384883669867978009) or
576        not raisesOverflowError(intExpr(  -10762394442070916) + -9212609642412704893) or
577        not raisesOverflowError(intExpr(   -1988224194191587) + -9221383812660584222) or
578        not raisesOverflowError(intExpr(    -240989001041328) + -9223131047853734481) or
579        not raisesOverflowError(intExpr(     -14312161101687) + -9223357724693674122) or
580        not raisesOverflowError(intExpr(       -933865493037) + -9223371102989282772) or
581        not raisesOverflowError(intExpr(       -747094709113) + -9223371289760066696) or
582        not raisesOverflowError(intExpr(        -74709312968) + -9223371962145462841) or
583        not raisesOverflowError(intExpr(         -3037000499) + -9223372033817775310) or
584        not raisesOverflowError(intExpr(          -123456791) + -9223372036731319018) or
585        not raisesOverflowError(intExpr(           -12345653) + -9223372036842430156) or
586        not raisesOverflowError(intExpr(            -9876553) + -9223372036844899256) or
587        not raisesOverflowError(intExpr(             -644443) + -9223372036854131366) or
588        not raisesOverflowError(intExpr(              -38273) + -9223372036854737536) or
589        not raisesOverflowError(intExpr(               -4639) + -9223372036854771170) or
590        not raisesOverflowError(intExpr(                -857) + -9223372036854774952) or
591        not raisesOverflowError(intExpr(                 -11) + -9223372036854775798) or
592        not raisesOverflowError(intExpr(                  -3) + -9223372036854775806) or
593        not raisesOverflowError(intExpr(                  -2) + -9223372036854775807) or
594        not raisesOverflowError(intExpr(                  -1) +            INT64_MIN) then
595      writeln(" ***** Addition underflow by one does not raise OVERFLOW_ERROR. (2)");
596      okay := FALSE;
597    end if;
598
599    if  not raisesOverflowError(           INT64_MIN + intExpr(                  -1)) or
600        not raisesOverflowError(-9223372036854775807 + intExpr(                  -2)) or
601        not raisesOverflowError(-9223372036854775806 + intExpr(                  -3)) or
602        not raisesOverflowError(-9223372036854775798 + intExpr(                 -11)) or
603        not raisesOverflowError(-9223372036854774952 + intExpr(                -857)) or
604        not raisesOverflowError(-9223372036854771170 + intExpr(               -4639)) or
605        not raisesOverflowError(-9223372036854737536 + intExpr(              -38273)) or
606        not raisesOverflowError(-9223372036854131366 + intExpr(             -644443)) or
607        not raisesOverflowError(-9223372036844899256 + intExpr(            -9876553)) or
608        not raisesOverflowError(-9223372036842430156 + intExpr(           -12345653)) or
609        not raisesOverflowError(-9223372036731319018 + intExpr(          -123456791)) or
610        not raisesOverflowError(-9223372033817775310 + intExpr(         -3037000499)) or
611        not raisesOverflowError(-9223371962145462841 + intExpr(        -74709312968)) or
612        not raisesOverflowError(-9223371289760066696 + intExpr(       -747094709113)) or
613        not raisesOverflowError(-9223371102989282772 + intExpr(       -933865493037)) or
614        not raisesOverflowError(-9223357724693674122 + intExpr(     -14312161101687)) or
615        not raisesOverflowError(-9223131047853734481 + intExpr(    -240989001041328)) or
616        not raisesOverflowError(-9221383812660584222 + intExpr(   -1988224194191587)) or
617        not raisesOverflowError(-9212609642412704893 + intExpr(  -10762394442070916)) or
618        not raisesOverflowError(-8384883669867978009 + intExpr( -838488366986797800)) or
619        not raisesOverflowError(-6148914691236517207 + intExpr(-3074457345618258602)) or
620        not raisesOverflowError(-3074457345618258602 + intExpr(-6148914691236517207)) or
621        not raisesOverflowError( -838488366986797800 + intExpr(-8384883669867978009)) or
622        not raisesOverflowError(  -10762394442070916 + intExpr(-9212609642412704893)) or
623        not raisesOverflowError(   -1988224194191587 + intExpr(-9221383812660584222)) or
624        not raisesOverflowError(    -240989001041328 + intExpr(-9223131047853734481)) or
625        not raisesOverflowError(     -14312161101687 + intExpr(-9223357724693674122)) or
626        not raisesOverflowError(       -933865493037 + intExpr(-9223371102989282772)) or
627        not raisesOverflowError(       -747094709113 + intExpr(-9223371289760066696)) or
628        not raisesOverflowError(        -74709312968 + intExpr(-9223371962145462841)) or
629        not raisesOverflowError(         -3037000499 + intExpr(-9223372033817775310)) or
630        not raisesOverflowError(          -123456791 + intExpr(-9223372036731319018)) or
631        not raisesOverflowError(           -12345653 + intExpr(-9223372036842430156)) or
632        not raisesOverflowError(            -9876553 + intExpr(-9223372036844899256)) or
633        not raisesOverflowError(             -644443 + intExpr(-9223372036854131366)) or
634        not raisesOverflowError(              -38273 + intExpr(-9223372036854737536)) or
635        not raisesOverflowError(               -4639 + intExpr(-9223372036854771170)) or
636        not raisesOverflowError(                -857 + intExpr(-9223372036854774952)) or
637        not raisesOverflowError(                 -11 + intExpr(-9223372036854775798)) or
638        not raisesOverflowError(                  -3 + intExpr(-9223372036854775806)) or
639        not raisesOverflowError(                  -2 + intExpr(-9223372036854775807)) or
640        not raisesOverflowError(                  -1 + intExpr(           INT64_MIN)) then
641      writeln(" ***** Addition underflow by one does not raise OVERFLOW_ERROR. (3)");
642      okay := FALSE;
643    end if;
644
645    if  not raisesOverflowError(intExpr(           INT64_MIN) + intExpr(                  -1)) or
646        not raisesOverflowError(intExpr(-9223372036854775807) + intExpr(                  -2)) or
647        not raisesOverflowError(intExpr(-9223372036854775806) + intExpr(                  -3)) or
648        not raisesOverflowError(intExpr(-9223372036854775798) + intExpr(                 -11)) or
649        not raisesOverflowError(intExpr(-9223372036854774952) + intExpr(                -857)) or
650        not raisesOverflowError(intExpr(-9223372036854771170) + intExpr(               -4639)) or
651        not raisesOverflowError(intExpr(-9223372036854737536) + intExpr(              -38273)) or
652        not raisesOverflowError(intExpr(-9223372036854131366) + intExpr(             -644443)) or
653        not raisesOverflowError(intExpr(-9223372036844899256) + intExpr(            -9876553)) or
654        not raisesOverflowError(intExpr(-9223372036842430156) + intExpr(           -12345653)) or
655        not raisesOverflowError(intExpr(-9223372036731319018) + intExpr(          -123456791)) or
656        not raisesOverflowError(intExpr(-9223372033817775310) + intExpr(         -3037000499)) or
657        not raisesOverflowError(intExpr(-9223371962145462841) + intExpr(        -74709312968)) or
658        not raisesOverflowError(intExpr(-9223371289760066696) + intExpr(       -747094709113)) or
659        not raisesOverflowError(intExpr(-9223371102989282772) + intExpr(       -933865493037)) or
660        not raisesOverflowError(intExpr(-9223357724693674122) + intExpr(     -14312161101687)) or
661        not raisesOverflowError(intExpr(-9223131047853734481) + intExpr(    -240989001041328)) or
662        not raisesOverflowError(intExpr(-9221383812660584222) + intExpr(   -1988224194191587)) or
663        not raisesOverflowError(intExpr(-9212609642412704893) + intExpr(  -10762394442070916)) or
664        not raisesOverflowError(intExpr(-8384883669867978009) + intExpr( -838488366986797800)) or
665        not raisesOverflowError(intExpr(-6148914691236517207) + intExpr(-3074457345618258602)) or
666        not raisesOverflowError(intExpr(-3074457345618258602) + intExpr(-6148914691236517207)) or
667        not raisesOverflowError(intExpr( -838488366986797800) + intExpr(-8384883669867978009)) or
668        not raisesOverflowError(intExpr(  -10762394442070916) + intExpr(-9212609642412704893)) or
669        not raisesOverflowError(intExpr(   -1988224194191587) + intExpr(-9221383812660584222)) or
670        not raisesOverflowError(intExpr(    -240989001041328) + intExpr(-9223131047853734481)) or
671        not raisesOverflowError(intExpr(     -14312161101687) + intExpr(-9223357724693674122)) or
672        not raisesOverflowError(intExpr(       -933865493037) + intExpr(-9223371102989282772)) or
673        not raisesOverflowError(intExpr(       -747094709113) + intExpr(-9223371289760066696)) or
674        not raisesOverflowError(intExpr(        -74709312968) + intExpr(-9223371962145462841)) or
675        not raisesOverflowError(intExpr(         -3037000499) + intExpr(-9223372033817775310)) or
676        not raisesOverflowError(intExpr(          -123456791) + intExpr(-9223372036731319018)) or
677        not raisesOverflowError(intExpr(           -12345653) + intExpr(-9223372036842430156)) or
678        not raisesOverflowError(intExpr(            -9876553) + intExpr(-9223372036844899256)) or
679        not raisesOverflowError(intExpr(             -644443) + intExpr(-9223372036854131366)) or
680        not raisesOverflowError(intExpr(              -38273) + intExpr(-9223372036854737536)) or
681        not raisesOverflowError(intExpr(               -4639) + intExpr(-9223372036854771170)) or
682        not raisesOverflowError(intExpr(                -857) + intExpr(-9223372036854774952)) or
683        not raisesOverflowError(intExpr(                 -11) + intExpr(-9223372036854775798)) or
684        not raisesOverflowError(intExpr(                  -3) + intExpr(-9223372036854775806)) or
685        not raisesOverflowError(intExpr(                  -2) + intExpr(-9223372036854775807)) or
686        not raisesOverflowError(intExpr(                  -1) + intExpr(           INT64_MIN)) then
687      writeln(" ***** Addition underflow by one does not raise OVERFLOW_ERROR. (4)");
688      okay := FALSE;
689    end if;
690
691    if  not raisesOverflowError(9223372036854775807 +                   1) or
692        not raisesOverflowError(9223372036854775806 +                   2) or
693        not raisesOverflowError(9223372036854775805 +                   3) or
694        not raisesOverflowError(9223372036854775797 +                  11) or
695        not raisesOverflowError(9223372036854774951 +                 857) or
696        not raisesOverflowError(9223372036854771169 +                4639) or
697        not raisesOverflowError(9223372036854737535 +               38273) or
698        not raisesOverflowError(9223372036854131365 +              644443) or
699        not raisesOverflowError(9223372036844899255 +             9876553) or
700        not raisesOverflowError(9223372036842430155 +            12345653) or
701        not raisesOverflowError(9223372036731319017 +           123456791) or
702        not raisesOverflowError(9223372033817775309 +          3037000499) or
703        not raisesOverflowError(9223371962145462840 +         74709312968) or
704        not raisesOverflowError(9223371289760066695 +        747094709113) or
705        not raisesOverflowError(9223371102989282771 +        933865493037) or
706        not raisesOverflowError(9223357724693674121 +      14312161101687) or
707        not raisesOverflowError(9223131047853734480 +     240989001041328) or
708        not raisesOverflowError(9221383812660584221 +    1988224194191587) or
709        not raisesOverflowError(9212609642412704892 +   10762394442070916) or
710        not raisesOverflowError(8384883669867978008 +  838488366986797800) or
711        not raisesOverflowError(6148914691236517206 + 3074457345618258602) or
712        not raisesOverflowError(3074457345618258602 + 6148914691236517206) or
713        not raisesOverflowError( 838488366986797800 + 8384883669867978008) or
714        not raisesOverflowError(  10762394442070916 + 9212609642412704892) or
715        not raisesOverflowError(   1988224194191587 + 9221383812660584221) or
716        not raisesOverflowError(    240989001041328 + 9223131047853734480) or
717        not raisesOverflowError(     14312161101687 + 9223357724693674121) or
718        not raisesOverflowError(       933865493037 + 9223371102989282771) or
719        not raisesOverflowError(       747094709113 + 9223371289760066695) or
720        not raisesOverflowError(        74709312968 + 9223371962145462840) or
721        not raisesOverflowError(         3037000499 + 9223372033817775309) or
722        not raisesOverflowError(          123456791 + 9223372036731319017) or
723        not raisesOverflowError(           12345653 + 9223372036842430155) or
724        not raisesOverflowError(            9876553 + 9223372036844899255) or
725        not raisesOverflowError(             644443 + 9223372036854131365) or
726        not raisesOverflowError(              38273 + 9223372036854737535) or
727        not raisesOverflowError(               4639 + 9223372036854771169) or
728        not raisesOverflowError(                857 + 9223372036854774951) or
729        not raisesOverflowError(                 11 + 9223372036854775797) or
730        not raisesOverflowError(                  3 + 9223372036854775805) or
731        not raisesOverflowError(                  2 + 9223372036854775806) or
732        not raisesOverflowError(                  1 + 9223372036854775807) then
733      writeln(" ***** Addition overflow by one does not raise OVERFLOW_ERROR. (1)");
734      okay := FALSE;
735    end if;
736
737    if  not raisesOverflowError(intExpr(9223372036854775807) +                   1) or
738        not raisesOverflowError(intExpr(9223372036854775806) +                   2) or
739        not raisesOverflowError(intExpr(9223372036854775805) +                   3) or
740        not raisesOverflowError(intExpr(9223372036854775797) +                  11) or
741        not raisesOverflowError(intExpr(9223372036854774951) +                 857) or
742        not raisesOverflowError(intExpr(9223372036854771169) +                4639) or
743        not raisesOverflowError(intExpr(9223372036854737535) +               38273) or
744        not raisesOverflowError(intExpr(9223372036854131365) +              644443) or
745        not raisesOverflowError(intExpr(9223372036844899255) +             9876553) or
746        not raisesOverflowError(intExpr(9223372036842430155) +            12345653) or
747        not raisesOverflowError(intExpr(9223372036731319017) +           123456791) or
748        not raisesOverflowError(intExpr(9223372033817775309) +          3037000499) or
749        not raisesOverflowError(intExpr(9223371962145462840) +         74709312968) or
750        not raisesOverflowError(intExpr(9223371289760066695) +        747094709113) or
751        not raisesOverflowError(intExpr(9223371102989282771) +        933865493037) or
752        not raisesOverflowError(intExpr(9223357724693674121) +      14312161101687) or
753        not raisesOverflowError(intExpr(9223131047853734480) +     240989001041328) or
754        not raisesOverflowError(intExpr(9221383812660584221) +    1988224194191587) or
755        not raisesOverflowError(intExpr(9212609642412704892) +   10762394442070916) or
756        not raisesOverflowError(intExpr(8384883669867978008) +  838488366986797800) or
757        not raisesOverflowError(intExpr(6148914691236517206) + 3074457345618258602) or
758        not raisesOverflowError(intExpr(3074457345618258602) + 6148914691236517206) or
759        not raisesOverflowError(intExpr( 838488366986797800) + 8384883669867978008) or
760        not raisesOverflowError(intExpr(  10762394442070916) + 9212609642412704892) or
761        not raisesOverflowError(intExpr(   1988224194191587) + 9221383812660584221) or
762        not raisesOverflowError(intExpr(    240989001041328) + 9223131047853734480) or
763        not raisesOverflowError(intExpr(     14312161101687) + 9223357724693674121) or
764        not raisesOverflowError(intExpr(       933865493037) + 9223371102989282771) or
765        not raisesOverflowError(intExpr(       747094709113) + 9223371289760066695) or
766        not raisesOverflowError(intExpr(        74709312968) + 9223371962145462840) or
767        not raisesOverflowError(intExpr(         3037000499) + 9223372033817775309) or
768        not raisesOverflowError(intExpr(          123456791) + 9223372036731319017) or
769        not raisesOverflowError(intExpr(           12345653) + 9223372036842430155) or
770        not raisesOverflowError(intExpr(            9876553) + 9223372036844899255) or
771        not raisesOverflowError(intExpr(             644443) + 9223372036854131365) or
772        not raisesOverflowError(intExpr(              38273) + 9223372036854737535) or
773        not raisesOverflowError(intExpr(               4639) + 9223372036854771169) or
774        not raisesOverflowError(intExpr(                857) + 9223372036854774951) or
775        not raisesOverflowError(intExpr(                 11) + 9223372036854775797) or
776        not raisesOverflowError(intExpr(                  3) + 9223372036854775805) or
777        not raisesOverflowError(intExpr(                  2) + 9223372036854775806) or
778        not raisesOverflowError(intExpr(                  1) + 9223372036854775807) then
779      writeln(" ***** Addition overflow by one does not raise OVERFLOW_ERROR. (2)");
780      okay := FALSE;
781    end if;
782
783    if  not raisesOverflowError(9223372036854775807 + intExpr(                  1)) or
784        not raisesOverflowError(9223372036854775806 + intExpr(                  2)) or
785        not raisesOverflowError(9223372036854775805 + intExpr(                  3)) or
786        not raisesOverflowError(9223372036854775797 + intExpr(                 11)) or
787        not raisesOverflowError(9223372036854774951 + intExpr(                857)) or
788        not raisesOverflowError(9223372036854771169 + intExpr(               4639)) or
789        not raisesOverflowError(9223372036854737535 + intExpr(              38273)) or
790        not raisesOverflowError(9223372036854131365 + intExpr(             644443)) or
791        not raisesOverflowError(9223372036844899255 + intExpr(            9876553)) or
792        not raisesOverflowError(9223372036842430155 + intExpr(           12345653)) or
793        not raisesOverflowError(9223372036731319017 + intExpr(          123456791)) or
794        not raisesOverflowError(9223372033817775309 + intExpr(         3037000499)) or
795        not raisesOverflowError(9223371962145462840 + intExpr(        74709312968)) or
796        not raisesOverflowError(9223371289760066695 + intExpr(       747094709113)) or
797        not raisesOverflowError(9223371102989282771 + intExpr(       933865493037)) or
798        not raisesOverflowError(9223357724693674121 + intExpr(     14312161101687)) or
799        not raisesOverflowError(9223131047853734480 + intExpr(    240989001041328)) or
800        not raisesOverflowError(9221383812660584221 + intExpr(   1988224194191587)) or
801        not raisesOverflowError(9212609642412704892 + intExpr(  10762394442070916)) or
802        not raisesOverflowError(8384883669867978008 + intExpr( 838488366986797800)) or
803        not raisesOverflowError(6148914691236517206 + intExpr(3074457345618258602)) or
804        not raisesOverflowError(3074457345618258602 + intExpr(6148914691236517206)) or
805        not raisesOverflowError( 838488366986797800 + intExpr(8384883669867978008)) or
806        not raisesOverflowError(  10762394442070916 + intExpr(9212609642412704892)) or
807        not raisesOverflowError(   1988224194191587 + intExpr(9221383812660584221)) or
808        not raisesOverflowError(    240989001041328 + intExpr(9223131047853734480)) or
809        not raisesOverflowError(     14312161101687 + intExpr(9223357724693674121)) or
810        not raisesOverflowError(       933865493037 + intExpr(9223371102989282771)) or
811        not raisesOverflowError(       747094709113 + intExpr(9223371289760066695)) or
812        not raisesOverflowError(        74709312968 + intExpr(9223371962145462840)) or
813        not raisesOverflowError(         3037000499 + intExpr(9223372033817775309)) or
814        not raisesOverflowError(          123456791 + intExpr(9223372036731319017)) or
815        not raisesOverflowError(           12345653 + intExpr(9223372036842430155)) or
816        not raisesOverflowError(            9876553 + intExpr(9223372036844899255)) or
817        not raisesOverflowError(             644443 + intExpr(9223372036854131365)) or
818        not raisesOverflowError(              38273 + intExpr(9223372036854737535)) or
819        not raisesOverflowError(               4639 + intExpr(9223372036854771169)) or
820        not raisesOverflowError(                857 + intExpr(9223372036854774951)) or
821        not raisesOverflowError(                 11 + intExpr(9223372036854775797)) or
822        not raisesOverflowError(                  3 + intExpr(9223372036854775805)) or
823        not raisesOverflowError(                  2 + intExpr(9223372036854775806)) or
824        not raisesOverflowError(                  1 + intExpr(9223372036854775807)) then
825      writeln(" ***** Addition overflow by one does not raise OVERFLOW_ERROR. (3)");
826      okay := FALSE;
827    end if;
828
829    if  not raisesOverflowError(intExpr(9223372036854775807) + intExpr(                  1)) or
830        not raisesOverflowError(intExpr(9223372036854775806) + intExpr(                  2)) or
831        not raisesOverflowError(intExpr(9223372036854775805) + intExpr(                  3)) or
832        not raisesOverflowError(intExpr(9223372036854775797) + intExpr(                 11)) or
833        not raisesOverflowError(intExpr(9223372036854774951) + intExpr(                857)) or
834        not raisesOverflowError(intExpr(9223372036854771169) + intExpr(               4639)) or
835        not raisesOverflowError(intExpr(9223372036854737535) + intExpr(              38273)) or
836        not raisesOverflowError(intExpr(9223372036854131365) + intExpr(             644443)) or
837        not raisesOverflowError(intExpr(9223372036844899255) + intExpr(            9876553)) or
838        not raisesOverflowError(intExpr(9223372036842430155) + intExpr(           12345653)) or
839        not raisesOverflowError(intExpr(9223372036731319017) + intExpr(          123456791)) or
840        not raisesOverflowError(intExpr(9223372033817775309) + intExpr(         3037000499)) or
841        not raisesOverflowError(intExpr(9223371962145462840) + intExpr(        74709312968)) or
842        not raisesOverflowError(intExpr(9223371289760066695) + intExpr(       747094709113)) or
843        not raisesOverflowError(intExpr(9223371102989282771) + intExpr(       933865493037)) or
844        not raisesOverflowError(intExpr(9223357724693674121) + intExpr(     14312161101687)) or
845        not raisesOverflowError(intExpr(9223131047853734480) + intExpr(    240989001041328)) or
846        not raisesOverflowError(intExpr(9221383812660584221) + intExpr(   1988224194191587)) or
847        not raisesOverflowError(intExpr(9212609642412704892) + intExpr(  10762394442070916)) or
848        not raisesOverflowError(intExpr(8384883669867978008) + intExpr( 838488366986797800)) or
849        not raisesOverflowError(intExpr(6148914691236517206) + intExpr(3074457345618258602)) or
850        not raisesOverflowError(intExpr(3074457345618258602) + intExpr(6148914691236517206)) or
851        not raisesOverflowError(intExpr( 838488366986797800) + intExpr(8384883669867978008)) or
852        not raisesOverflowError(intExpr(  10762394442070916) + intExpr(9212609642412704892)) or
853        not raisesOverflowError(intExpr(   1988224194191587) + intExpr(9221383812660584221)) or
854        not raisesOverflowError(intExpr(    240989001041328) + intExpr(9223131047853734480)) or
855        not raisesOverflowError(intExpr(     14312161101687) + intExpr(9223357724693674121)) or
856        not raisesOverflowError(intExpr(       933865493037) + intExpr(9223371102989282771)) or
857        not raisesOverflowError(intExpr(       747094709113) + intExpr(9223371289760066695)) or
858        not raisesOverflowError(intExpr(        74709312968) + intExpr(9223371962145462840)) or
859        not raisesOverflowError(intExpr(         3037000499) + intExpr(9223372033817775309)) or
860        not raisesOverflowError(intExpr(          123456791) + intExpr(9223372036731319017)) or
861        not raisesOverflowError(intExpr(           12345653) + intExpr(9223372036842430155)) or
862        not raisesOverflowError(intExpr(            9876553) + intExpr(9223372036844899255)) or
863        not raisesOverflowError(intExpr(             644443) + intExpr(9223372036854131365)) or
864        not raisesOverflowError(intExpr(              38273) + intExpr(9223372036854737535)) or
865        not raisesOverflowError(intExpr(               4639) + intExpr(9223372036854771169)) or
866        not raisesOverflowError(intExpr(                857) + intExpr(9223372036854774951)) or
867        not raisesOverflowError(intExpr(                 11) + intExpr(9223372036854775797)) or
868        not raisesOverflowError(intExpr(                  3) + intExpr(9223372036854775805)) or
869        not raisesOverflowError(intExpr(                  2) + intExpr(9223372036854775806)) or
870        not raisesOverflowError(intExpr(                  1) + intExpr(9223372036854775807)) then
871      writeln(" ***** Addition overflow by one does not raise OVERFLOW_ERROR. (4)");
872      okay := FALSE;
873    end if;
874
875    if  not raisesOverflowError(           INT64_MIN +            INT64_MIN) or
876        not raisesOverflowError(           INT64_MIN + -9223372036854775807) or
877        not raisesOverflowError(-9223372036854775807 +            INT64_MIN) or
878        not raisesOverflowError(-9223372036854775807 + -9223372036854775807) or
879        not raisesOverflowError(intExpr(           INT64_MIN) +            INT64_MIN) or
880        not raisesOverflowError(intExpr(           INT64_MIN) + -9223372036854775807) or
881        not raisesOverflowError(intExpr(-9223372036854775807) +            INT64_MIN) or
882        not raisesOverflowError(intExpr(-9223372036854775807) + -9223372036854775807) or
883        not raisesOverflowError(           INT64_MIN + intExpr(           INT64_MIN)) or
884        not raisesOverflowError(           INT64_MIN + intExpr(-9223372036854775807)) or
885        not raisesOverflowError(-9223372036854775807 + intExpr(           INT64_MIN)) or
886        not raisesOverflowError(-9223372036854775807 + intExpr(-9223372036854775807)) or
887        not raisesOverflowError(intExpr(           INT64_MIN) + intExpr(           INT64_MIN)) or
888        not raisesOverflowError(intExpr(           INT64_MIN) + intExpr(-9223372036854775807)) or
889        not raisesOverflowError(intExpr(-9223372036854775807) + intExpr(           INT64_MIN)) or
890        not raisesOverflowError(intExpr(-9223372036854775807) + intExpr(-9223372036854775807)) then
891      writeln(" ***** Addition underflow does not raise OVERFLOW_ERROR.");
892      okay := FALSE;
893    end if;
894
895    if  not raisesOverflowError(9223372036854775807 + 9223372036854775807) or
896        not raisesOverflowError(9223372036854775807 + 9223372036854775806) or
897        not raisesOverflowError(9223372036854775806 + 9223372036854775807) or
898        not raisesOverflowError(9223372036854775806 + 9223372036854775806) or
899        not raisesOverflowError(intExpr(9223372036854775807) + 9223372036854775807) or
900        not raisesOverflowError(intExpr(9223372036854775807) + 9223372036854775806) or
901        not raisesOverflowError(intExpr(9223372036854775806) + 9223372036854775807) or
902        not raisesOverflowError(intExpr(9223372036854775806) + 9223372036854775806) or
903        not raisesOverflowError(9223372036854775807 + intExpr(9223372036854775807)) or
904        not raisesOverflowError(9223372036854775807 + intExpr(9223372036854775806)) or
905        not raisesOverflowError(9223372036854775806 + intExpr(9223372036854775807)) or
906        not raisesOverflowError(9223372036854775806 + intExpr(9223372036854775806)) or
907        not raisesOverflowError(intExpr(9223372036854775807) + intExpr(9223372036854775807)) or
908        not raisesOverflowError(intExpr(9223372036854775807) + intExpr(9223372036854775806)) or
909        not raisesOverflowError(intExpr(9223372036854775806) + intExpr(9223372036854775807)) or
910        not raisesOverflowError(intExpr(9223372036854775806) + intExpr(9223372036854775806)) then
911      writeln(" ***** Addition overflow does not raise OVERFLOW_ERROR.");
912      okay := FALSE;
913    end if;
914
915    if not check_reduced_overflow_checking_for_sums then
916      okay := FALSE;
917    end if;
918
919    if okay then
920      writeln("Overflow checking of addition works correct.");
921    else
922      writeln(" ***** Overflow checking of addition does not work correct.");
923    end if;
924  end func;
925
926
927const proc: check_add_assign is func
928  local
929    var boolean: okay is TRUE;
930    var boolean: ok is TRUE;
931    var integer: num is 0;
932    var array integer: arr is [] (0);
933  begin
934    num :=            INT64_MIN; ok := ok and raisesOverflowError(num +:=                   -1);
935    num := -9223372036854775807; ok := ok and raisesOverflowError(num +:=                   -2);
936    num := -9223372036854775806; ok := ok and raisesOverflowError(num +:=                   -3);
937    num := -9223372036854775798; ok := ok and raisesOverflowError(num +:=                  -11);
938    num := -9223372036854774952; ok := ok and raisesOverflowError(num +:=                 -857);
939    num := -9223372036854771170; ok := ok and raisesOverflowError(num +:=                -4639);
940    num := -9223372036854737536; ok := ok and raisesOverflowError(num +:=               -38273);
941    num := -9223372036854131366; ok := ok and raisesOverflowError(num +:=              -644443);
942    num := -9223372036844899256; ok := ok and raisesOverflowError(num +:=             -9876553);
943    num := -9223372036842430156; ok := ok and raisesOverflowError(num +:=            -12345653);
944    num := -9223372036731319018; ok := ok and raisesOverflowError(num +:=           -123456791);
945    num := -9223372033817775310; ok := ok and raisesOverflowError(num +:=          -3037000499);
946    num := -9223371962145462841; ok := ok and raisesOverflowError(num +:=         -74709312968);
947    num := -9223371289760066696; ok := ok and raisesOverflowError(num +:=        -747094709113);
948    num := -9223371102989282772; ok := ok and raisesOverflowError(num +:=        -933865493037);
949    num := -9223357724693674122; ok := ok and raisesOverflowError(num +:=      -14312161101687);
950    num := -9223131047853734481; ok := ok and raisesOverflowError(num +:=     -240989001041328);
951    num := -9221383812660584222; ok := ok and raisesOverflowError(num +:=    -1988224194191587);
952    num := -9212609642412704893; ok := ok and raisesOverflowError(num +:=   -10762394442070916);
953    num := -8384883669867978009; ok := ok and raisesOverflowError(num +:=  -838488366986797800);
954    num := -6148914691236517207; ok := ok and raisesOverflowError(num +:= -3074457345618258602);
955    num := -3074457345618258602; ok := ok and raisesOverflowError(num +:= -6148914691236517207);
956    num :=  -838488366986797800; ok := ok and raisesOverflowError(num +:= -8384883669867978009);
957    num :=   -10762394442070916; ok := ok and raisesOverflowError(num +:= -9212609642412704893);
958    num :=    -1988224194191587; ok := ok and raisesOverflowError(num +:= -9221383812660584222);
959    num :=     -240989001041328; ok := ok and raisesOverflowError(num +:= -9223131047853734481);
960    num :=      -14312161101687; ok := ok and raisesOverflowError(num +:= -9223357724693674122);
961    num :=        -933865493037; ok := ok and raisesOverflowError(num +:= -9223371102989282772);
962    num :=        -747094709113; ok := ok and raisesOverflowError(num +:= -9223371289760066696);
963    num :=         -74709312968; ok := ok and raisesOverflowError(num +:= -9223371962145462841);
964    num :=          -3037000499; ok := ok and raisesOverflowError(num +:= -9223372033817775310);
965    num :=           -123456791; ok := ok and raisesOverflowError(num +:= -9223372036731319018);
966    num :=            -12345653; ok := ok and raisesOverflowError(num +:= -9223372036842430156);
967    num :=             -9876553; ok := ok and raisesOverflowError(num +:= -9223372036844899256);
968    num :=              -644443; ok := ok and raisesOverflowError(num +:= -9223372036854131366);
969    num :=               -38273; ok := ok and raisesOverflowError(num +:= -9223372036854737536);
970    num :=                -4639; ok := ok and raisesOverflowError(num +:= -9223372036854771170);
971    num :=                 -857; ok := ok and raisesOverflowError(num +:= -9223372036854774952);
972    num :=                  -11; ok := ok and raisesOverflowError(num +:= -9223372036854775798);
973    num :=                   -3; ok := ok and raisesOverflowError(num +:= -9223372036854775806);
974    num :=                   -2; ok := ok and raisesOverflowError(num +:= -9223372036854775807);
975    num :=                   -1; ok := ok and raisesOverflowError(num +:=            INT64_MIN);
976    if not ok then
977      writeln(" ***** Addition assignment underflow by one does not raise OVERFLOW_ERROR. (1)");
978      okay := FALSE;
979    end if;
980
981    ok := TRUE;
982    num :=            INT64_MIN; ok := ok and raisesOverflowError(num +:= intExpr(                  -1));
983    num := -9223372036854775807; ok := ok and raisesOverflowError(num +:= intExpr(                  -2));
984    num := -9223372036854775806; ok := ok and raisesOverflowError(num +:= intExpr(                  -3));
985    num := -9223372036854775798; ok := ok and raisesOverflowError(num +:= intExpr(                 -11));
986    num := -9223372036854774952; ok := ok and raisesOverflowError(num +:= intExpr(                -857));
987    num := -9223372036854771170; ok := ok and raisesOverflowError(num +:= intExpr(               -4639));
988    num := -9223372036854737536; ok := ok and raisesOverflowError(num +:= intExpr(              -38273));
989    num := -9223372036854131366; ok := ok and raisesOverflowError(num +:= intExpr(             -644443));
990    num := -9223372036844899256; ok := ok and raisesOverflowError(num +:= intExpr(            -9876553));
991    num := -9223372036842430156; ok := ok and raisesOverflowError(num +:= intExpr(           -12345653));
992    num := -9223372036731319018; ok := ok and raisesOverflowError(num +:= intExpr(          -123456791));
993    num := -9223372033817775310; ok := ok and raisesOverflowError(num +:= intExpr(         -3037000499));
994    num := -9223371962145462841; ok := ok and raisesOverflowError(num +:= intExpr(        -74709312968));
995    num := -9223371289760066696; ok := ok and raisesOverflowError(num +:= intExpr(       -747094709113));
996    num := -9223371102989282772; ok := ok and raisesOverflowError(num +:= intExpr(       -933865493037));
997    num := -9223357724693674122; ok := ok and raisesOverflowError(num +:= intExpr(     -14312161101687));
998    num := -9223131047853734481; ok := ok and raisesOverflowError(num +:= intExpr(    -240989001041328));
999    num := -9221383812660584222; ok := ok and raisesOverflowError(num +:= intExpr(   -1988224194191587));
1000    num := -9212609642412704893; ok := ok and raisesOverflowError(num +:= intExpr(  -10762394442070916));
1001    num := -8384883669867978009; ok := ok and raisesOverflowError(num +:= intExpr( -838488366986797800));
1002    num := -6148914691236517207; ok := ok and raisesOverflowError(num +:= intExpr(-3074457345618258602));
1003    num := -3074457345618258602; ok := ok and raisesOverflowError(num +:= intExpr(-6148914691236517207));
1004    num :=  -838488366986797800; ok := ok and raisesOverflowError(num +:= intExpr(-8384883669867978009));
1005    num :=   -10762394442070916; ok := ok and raisesOverflowError(num +:= intExpr(-9212609642412704893));
1006    num :=    -1988224194191587; ok := ok and raisesOverflowError(num +:= intExpr(-9221383812660584222));
1007    num :=     -240989001041328; ok := ok and raisesOverflowError(num +:= intExpr(-9223131047853734481));
1008    num :=      -14312161101687; ok := ok and raisesOverflowError(num +:= intExpr(-9223357724693674122));
1009    num :=        -933865493037; ok := ok and raisesOverflowError(num +:= intExpr(-9223371102989282772));
1010    num :=        -747094709113; ok := ok and raisesOverflowError(num +:= intExpr(-9223371289760066696));
1011    num :=         -74709312968; ok := ok and raisesOverflowError(num +:= intExpr(-9223371962145462841));
1012    num :=          -3037000499; ok := ok and raisesOverflowError(num +:= intExpr(-9223372033817775310));
1013    num :=           -123456791; ok := ok and raisesOverflowError(num +:= intExpr(-9223372036731319018));
1014    num :=            -12345653; ok := ok and raisesOverflowError(num +:= intExpr(-9223372036842430156));
1015    num :=             -9876553; ok := ok and raisesOverflowError(num +:= intExpr(-9223372036844899256));
1016    num :=              -644443; ok := ok and raisesOverflowError(num +:= intExpr(-9223372036854131366));
1017    num :=               -38273; ok := ok and raisesOverflowError(num +:= intExpr(-9223372036854737536));
1018    num :=                -4639; ok := ok and raisesOverflowError(num +:= intExpr(-9223372036854771170));
1019    num :=                 -857; ok := ok and raisesOverflowError(num +:= intExpr(-9223372036854774952));
1020    num :=                  -11; ok := ok and raisesOverflowError(num +:= intExpr(-9223372036854775798));
1021    num :=                   -3; ok := ok and raisesOverflowError(num +:= intExpr(-9223372036854775806));
1022    num :=                   -2; ok := ok and raisesOverflowError(num +:= intExpr(-9223372036854775807));
1023    num :=                   -1; ok := ok and raisesOverflowError(num +:= intExpr(           INT64_MIN));
1024    if not ok then
1025      writeln(" ***** Addition assignment underflow by one does not raise OVERFLOW_ERROR. (2)");
1026      okay := FALSE;
1027    end if;
1028
1029    ok := TRUE;
1030    arr[1] :=            INT64_MIN; ok := ok and raisesOverflowError(arr[1] +:=                   -1);
1031    arr[1] := -9223372036854775807; ok := ok and raisesOverflowError(arr[1] +:=                   -2);
1032    arr[1] := -9223372036854775806; ok := ok and raisesOverflowError(arr[1] +:=                   -3);
1033    arr[1] := -9223372036854775798; ok := ok and raisesOverflowError(arr[1] +:=                  -11);
1034    arr[1] := -9223372036854774952; ok := ok and raisesOverflowError(arr[1] +:=                 -857);
1035    arr[1] := -9223372036854771170; ok := ok and raisesOverflowError(arr[1] +:=                -4639);
1036    arr[1] := -9223372036854737536; ok := ok and raisesOverflowError(arr[1] +:=               -38273);
1037    arr[1] := -9223372036854131366; ok := ok and raisesOverflowError(arr[1] +:=              -644443);
1038    arr[1] := -9223372036844899256; ok := ok and raisesOverflowError(arr[1] +:=             -9876553);
1039    arr[1] := -9223372036842430156; ok := ok and raisesOverflowError(arr[1] +:=            -12345653);
1040    arr[1] := -9223372036731319018; ok := ok and raisesOverflowError(arr[1] +:=           -123456791);
1041    arr[1] := -9223372033817775310; ok := ok and raisesOverflowError(arr[1] +:=          -3037000499);
1042    arr[1] := -9223371962145462841; ok := ok and raisesOverflowError(arr[1] +:=         -74709312968);
1043    arr[1] := -9223371289760066696; ok := ok and raisesOverflowError(arr[1] +:=        -747094709113);
1044    arr[1] := -9223371102989282772; ok := ok and raisesOverflowError(arr[1] +:=        -933865493037);
1045    arr[1] := -9223357724693674122; ok := ok and raisesOverflowError(arr[1] +:=      -14312161101687);
1046    arr[1] := -9223131047853734481; ok := ok and raisesOverflowError(arr[1] +:=     -240989001041328);
1047    arr[1] := -9221383812660584222; ok := ok and raisesOverflowError(arr[1] +:=    -1988224194191587);
1048    arr[1] := -9212609642412704893; ok := ok and raisesOverflowError(arr[1] +:=   -10762394442070916);
1049    arr[1] := -8384883669867978009; ok := ok and raisesOverflowError(arr[1] +:=  -838488366986797800);
1050    arr[1] := -6148914691236517207; ok := ok and raisesOverflowError(arr[1] +:= -3074457345618258602);
1051    arr[1] := -3074457345618258602; ok := ok and raisesOverflowError(arr[1] +:= -6148914691236517207);
1052    arr[1] :=  -838488366986797800; ok := ok and raisesOverflowError(arr[1] +:= -8384883669867978009);
1053    arr[1] :=   -10762394442070916; ok := ok and raisesOverflowError(arr[1] +:= -9212609642412704893);
1054    arr[1] :=    -1988224194191587; ok := ok and raisesOverflowError(arr[1] +:= -9221383812660584222);
1055    arr[1] :=     -240989001041328; ok := ok and raisesOverflowError(arr[1] +:= -9223131047853734481);
1056    arr[1] :=      -14312161101687; ok := ok and raisesOverflowError(arr[1] +:= -9223357724693674122);
1057    arr[1] :=        -933865493037; ok := ok and raisesOverflowError(arr[1] +:= -9223371102989282772);
1058    arr[1] :=        -747094709113; ok := ok and raisesOverflowError(arr[1] +:= -9223371289760066696);
1059    arr[1] :=         -74709312968; ok := ok and raisesOverflowError(arr[1] +:= -9223371962145462841);
1060    arr[1] :=          -3037000499; ok := ok and raisesOverflowError(arr[1] +:= -9223372033817775310);
1061    arr[1] :=           -123456791; ok := ok and raisesOverflowError(arr[1] +:= -9223372036731319018);
1062    arr[1] :=            -12345653; ok := ok and raisesOverflowError(arr[1] +:= -9223372036842430156);
1063    arr[1] :=             -9876553; ok := ok and raisesOverflowError(arr[1] +:= -9223372036844899256);
1064    arr[1] :=              -644443; ok := ok and raisesOverflowError(arr[1] +:= -9223372036854131366);
1065    arr[1] :=               -38273; ok := ok and raisesOverflowError(arr[1] +:= -9223372036854737536);
1066    arr[1] :=                -4639; ok := ok and raisesOverflowError(arr[1] +:= -9223372036854771170);
1067    arr[1] :=                 -857; ok := ok and raisesOverflowError(arr[1] +:= -9223372036854774952);
1068    arr[1] :=                  -11; ok := ok and raisesOverflowError(arr[1] +:= -9223372036854775798);
1069    arr[1] :=                   -3; ok := ok and raisesOverflowError(arr[1] +:= -9223372036854775806);
1070    arr[1] :=                   -2; ok := ok and raisesOverflowError(arr[1] +:= -9223372036854775807);
1071    arr[1] :=                   -1; ok := ok and raisesOverflowError(arr[1] +:=            INT64_MIN);
1072    if not ok then
1073      writeln(" ***** Addition assignment underflow by one does not raise OVERFLOW_ERROR. (3)");
1074      okay := FALSE;
1075    end if;
1076
1077    ok := TRUE;
1078    arr[1] :=            INT64_MIN; ok := ok and raisesOverflowError(arr[1] +:= intExpr(                  -1));
1079    arr[1] := -9223372036854775807; ok := ok and raisesOverflowError(arr[1] +:= intExpr(                  -2));
1080    arr[1] := -9223372036854775806; ok := ok and raisesOverflowError(arr[1] +:= intExpr(                  -3));
1081    arr[1] := -9223372036854775798; ok := ok and raisesOverflowError(arr[1] +:= intExpr(                 -11));
1082    arr[1] := -9223372036854774952; ok := ok and raisesOverflowError(arr[1] +:= intExpr(                -857));
1083    arr[1] := -9223372036854771170; ok := ok and raisesOverflowError(arr[1] +:= intExpr(               -4639));
1084    arr[1] := -9223372036854737536; ok := ok and raisesOverflowError(arr[1] +:= intExpr(              -38273));
1085    arr[1] := -9223372036854131366; ok := ok and raisesOverflowError(arr[1] +:= intExpr(             -644443));
1086    arr[1] := -9223372036844899256; ok := ok and raisesOverflowError(arr[1] +:= intExpr(            -9876553));
1087    arr[1] := -9223372036842430156; ok := ok and raisesOverflowError(arr[1] +:= intExpr(           -12345653));
1088    arr[1] := -9223372036731319018; ok := ok and raisesOverflowError(arr[1] +:= intExpr(          -123456791));
1089    arr[1] := -9223372033817775310; ok := ok and raisesOverflowError(arr[1] +:= intExpr(         -3037000499));
1090    arr[1] := -9223371962145462841; ok := ok and raisesOverflowError(arr[1] +:= intExpr(        -74709312968));
1091    arr[1] := -9223371289760066696; ok := ok and raisesOverflowError(arr[1] +:= intExpr(       -747094709113));
1092    arr[1] := -9223371102989282772; ok := ok and raisesOverflowError(arr[1] +:= intExpr(       -933865493037));
1093    arr[1] := -9223357724693674122; ok := ok and raisesOverflowError(arr[1] +:= intExpr(     -14312161101687));
1094    arr[1] := -9223131047853734481; ok := ok and raisesOverflowError(arr[1] +:= intExpr(    -240989001041328));
1095    arr[1] := -9221383812660584222; ok := ok and raisesOverflowError(arr[1] +:= intExpr(   -1988224194191587));
1096    arr[1] := -9212609642412704893; ok := ok and raisesOverflowError(arr[1] +:= intExpr(  -10762394442070916));
1097    arr[1] := -8384883669867978009; ok := ok and raisesOverflowError(arr[1] +:= intExpr( -838488366986797800));
1098    arr[1] := -6148914691236517207; ok := ok and raisesOverflowError(arr[1] +:= intExpr(-3074457345618258602));
1099    arr[1] := -3074457345618258602; ok := ok and raisesOverflowError(arr[1] +:= intExpr(-6148914691236517207));
1100    arr[1] :=  -838488366986797800; ok := ok and raisesOverflowError(arr[1] +:= intExpr(-8384883669867978009));
1101    arr[1] :=   -10762394442070916; ok := ok and raisesOverflowError(arr[1] +:= intExpr(-9212609642412704893));
1102    arr[1] :=    -1988224194191587; ok := ok and raisesOverflowError(arr[1] +:= intExpr(-9221383812660584222));
1103    arr[1] :=     -240989001041328; ok := ok and raisesOverflowError(arr[1] +:= intExpr(-9223131047853734481));
1104    arr[1] :=      -14312161101687; ok := ok and raisesOverflowError(arr[1] +:= intExpr(-9223357724693674122));
1105    arr[1] :=        -933865493037; ok := ok and raisesOverflowError(arr[1] +:= intExpr(-9223371102989282772));
1106    arr[1] :=        -747094709113; ok := ok and raisesOverflowError(arr[1] +:= intExpr(-9223371289760066696));
1107    arr[1] :=         -74709312968; ok := ok and raisesOverflowError(arr[1] +:= intExpr(-9223371962145462841));
1108    arr[1] :=          -3037000499; ok := ok and raisesOverflowError(arr[1] +:= intExpr(-9223372033817775310));
1109    arr[1] :=           -123456791; ok := ok and raisesOverflowError(arr[1] +:= intExpr(-9223372036731319018));
1110    arr[1] :=            -12345653; ok := ok and raisesOverflowError(arr[1] +:= intExpr(-9223372036842430156));
1111    arr[1] :=             -9876553; ok := ok and raisesOverflowError(arr[1] +:= intExpr(-9223372036844899256));
1112    arr[1] :=              -644443; ok := ok and raisesOverflowError(arr[1] +:= intExpr(-9223372036854131366));
1113    arr[1] :=               -38273; ok := ok and raisesOverflowError(arr[1] +:= intExpr(-9223372036854737536));
1114    arr[1] :=                -4639; ok := ok and raisesOverflowError(arr[1] +:= intExpr(-9223372036854771170));
1115    arr[1] :=                 -857; ok := ok and raisesOverflowError(arr[1] +:= intExpr(-9223372036854774952));
1116    arr[1] :=                  -11; ok := ok and raisesOverflowError(arr[1] +:= intExpr(-9223372036854775798));
1117    arr[1] :=                   -3; ok := ok and raisesOverflowError(arr[1] +:= intExpr(-9223372036854775806));
1118    arr[1] :=                   -2; ok := ok and raisesOverflowError(arr[1] +:= intExpr(-9223372036854775807));
1119    arr[1] :=                   -1; ok := ok and raisesOverflowError(arr[1] +:= intExpr(           INT64_MIN));
1120    if not ok then
1121      writeln(" ***** Addition assignment underflow by one does not raise OVERFLOW_ERROR. (4)");
1122      okay := FALSE;
1123    end if;
1124
1125    ok := TRUE;
1126    num := 9223372036854775807; ok := ok and raisesOverflowError(num +:=                   1);
1127    num := 9223372036854775806; ok := ok and raisesOverflowError(num +:=                   2);
1128    num := 9223372036854775805; ok := ok and raisesOverflowError(num +:=                   3);
1129    num := 9223372036854775797; ok := ok and raisesOverflowError(num +:=                  11);
1130    num := 9223372036854774951; ok := ok and raisesOverflowError(num +:=                 857);
1131    num := 9223372036854771169; ok := ok and raisesOverflowError(num +:=                4639);
1132    num := 9223372036854737535; ok := ok and raisesOverflowError(num +:=               38273);
1133    num := 9223372036854131365; ok := ok and raisesOverflowError(num +:=              644443);
1134    num := 9223372036844899255; ok := ok and raisesOverflowError(num +:=             9876553);
1135    num := 9223372036842430155; ok := ok and raisesOverflowError(num +:=            12345653);
1136    num := 9223372036731319017; ok := ok and raisesOverflowError(num +:=           123456791);
1137    num := 9223372033817775309; ok := ok and raisesOverflowError(num +:=          3037000499);
1138    num := 9223371962145462840; ok := ok and raisesOverflowError(num +:=         74709312968);
1139    num := 9223371289760066695; ok := ok and raisesOverflowError(num +:=        747094709113);
1140    num := 9223371102989282771; ok := ok and raisesOverflowError(num +:=        933865493037);
1141    num := 9223357724693674121; ok := ok and raisesOverflowError(num +:=      14312161101687);
1142    num := 9223131047853734480; ok := ok and raisesOverflowError(num +:=     240989001041328);
1143    num := 9221383812660584221; ok := ok and raisesOverflowError(num +:=    1988224194191587);
1144    num := 9212609642412704892; ok := ok and raisesOverflowError(num +:=   10762394442070916);
1145    num := 8384883669867978008; ok := ok and raisesOverflowError(num +:=  838488366986797800);
1146    num := 6148914691236517206; ok := ok and raisesOverflowError(num +:= 3074457345618258602);
1147    num := 3074457345618258602; ok := ok and raisesOverflowError(num +:= 6148914691236517206);
1148    num :=  838488366986797800; ok := ok and raisesOverflowError(num +:= 8384883669867978008);
1149    num :=   10762394442070916; ok := ok and raisesOverflowError(num +:= 9212609642412704892);
1150    num :=    1988224194191587; ok := ok and raisesOverflowError(num +:= 9221383812660584221);
1151    num :=     240989001041328; ok := ok and raisesOverflowError(num +:= 9223131047853734480);
1152    num :=      14312161101687; ok := ok and raisesOverflowError(num +:= 9223357724693674121);
1153    num :=        933865493037; ok := ok and raisesOverflowError(num +:= 9223371102989282771);
1154    num :=        747094709113; ok := ok and raisesOverflowError(num +:= 9223371289760066695);
1155    num :=         74709312968; ok := ok and raisesOverflowError(num +:= 9223371962145462840);
1156    num :=          3037000499; ok := ok and raisesOverflowError(num +:= 9223372033817775309);
1157    num :=           123456791; ok := ok and raisesOverflowError(num +:= 9223372036731319017);
1158    num :=            12345653; ok := ok and raisesOverflowError(num +:= 9223372036842430155);
1159    num :=             9876553; ok := ok and raisesOverflowError(num +:= 9223372036844899255);
1160    num :=              644443; ok := ok and raisesOverflowError(num +:= 9223372036854131365);
1161    num :=               38273; ok := ok and raisesOverflowError(num +:= 9223372036854737535);
1162    num :=                4639; ok := ok and raisesOverflowError(num +:= 9223372036854771169);
1163    num :=                 857; ok := ok and raisesOverflowError(num +:= 9223372036854774951);
1164    num :=                  11; ok := ok and raisesOverflowError(num +:= 9223372036854775797);
1165    num :=                   3; ok := ok and raisesOverflowError(num +:= 9223372036854775805);
1166    num :=                   2; ok := ok and raisesOverflowError(num +:= 9223372036854775806);
1167    num :=                   1; ok := ok and raisesOverflowError(num +:= 9223372036854775807);
1168    if not ok then
1169      writeln(" ***** Addition assignment overflow by one does not raise OVERFLOW_ERROR. (1)");
1170      okay := FALSE;
1171    end if;
1172
1173    ok := TRUE;
1174    num := 9223372036854775807; ok := ok and raisesOverflowError(num +:= intExpr(                  1));
1175    num := 9223372036854775806; ok := ok and raisesOverflowError(num +:= intExpr(                  2));
1176    num := 9223372036854775805; ok := ok and raisesOverflowError(num +:= intExpr(                  3));
1177    num := 9223372036854775797; ok := ok and raisesOverflowError(num +:= intExpr(                 11));
1178    num := 9223372036854774951; ok := ok and raisesOverflowError(num +:= intExpr(                857));
1179    num := 9223372036854771169; ok := ok and raisesOverflowError(num +:= intExpr(               4639));
1180    num := 9223372036854737535; ok := ok and raisesOverflowError(num +:= intExpr(              38273));
1181    num := 9223372036854131365; ok := ok and raisesOverflowError(num +:= intExpr(             644443));
1182    num := 9223372036844899255; ok := ok and raisesOverflowError(num +:= intExpr(            9876553));
1183    num := 9223372036842430155; ok := ok and raisesOverflowError(num +:= intExpr(           12345653));
1184    num := 9223372036731319017; ok := ok and raisesOverflowError(num +:= intExpr(          123456791));
1185    num := 9223372033817775309; ok := ok and raisesOverflowError(num +:= intExpr(         3037000499));
1186    num := 9223371962145462840; ok := ok and raisesOverflowError(num +:= intExpr(        74709312968));
1187    num := 9223371289760066695; ok := ok and raisesOverflowError(num +:= intExpr(       747094709113));
1188    num := 9223371102989282771; ok := ok and raisesOverflowError(num +:= intExpr(       933865493037));
1189    num := 9223357724693674121; ok := ok and raisesOverflowError(num +:= intExpr(     14312161101687));
1190    num := 9223131047853734480; ok := ok and raisesOverflowError(num +:= intExpr(    240989001041328));
1191    num := 9221383812660584221; ok := ok and raisesOverflowError(num +:= intExpr(   1988224194191587));
1192    num := 9212609642412704892; ok := ok and raisesOverflowError(num +:= intExpr(  10762394442070916));
1193    num := 8384883669867978008; ok := ok and raisesOverflowError(num +:= intExpr( 838488366986797800));
1194    num := 6148914691236517206; ok := ok and raisesOverflowError(num +:= intExpr(3074457345618258602));
1195    num := 3074457345618258602; ok := ok and raisesOverflowError(num +:= intExpr(6148914691236517206));
1196    num :=  838488366986797800; ok := ok and raisesOverflowError(num +:= intExpr(8384883669867978008));
1197    num :=   10762394442070916; ok := ok and raisesOverflowError(num +:= intExpr(9212609642412704892));
1198    num :=    1988224194191587; ok := ok and raisesOverflowError(num +:= intExpr(9221383812660584221));
1199    num :=     240989001041328; ok := ok and raisesOverflowError(num +:= intExpr(9223131047853734480));
1200    num :=      14312161101687; ok := ok and raisesOverflowError(num +:= intExpr(9223357724693674121));
1201    num :=        933865493037; ok := ok and raisesOverflowError(num +:= intExpr(9223371102989282771));
1202    num :=        747094709113; ok := ok and raisesOverflowError(num +:= intExpr(9223371289760066695));
1203    num :=         74709312968; ok := ok and raisesOverflowError(num +:= intExpr(9223371962145462840));
1204    num :=          3037000499; ok := ok and raisesOverflowError(num +:= intExpr(9223372033817775309));
1205    num :=           123456791; ok := ok and raisesOverflowError(num +:= intExpr(9223372036731319017));
1206    num :=            12345653; ok := ok and raisesOverflowError(num +:= intExpr(9223372036842430155));
1207    num :=             9876553; ok := ok and raisesOverflowError(num +:= intExpr(9223372036844899255));
1208    num :=              644443; ok := ok and raisesOverflowError(num +:= intExpr(9223372036854131365));
1209    num :=               38273; ok := ok and raisesOverflowError(num +:= intExpr(9223372036854737535));
1210    num :=                4639; ok := ok and raisesOverflowError(num +:= intExpr(9223372036854771169));
1211    num :=                 857; ok := ok and raisesOverflowError(num +:= intExpr(9223372036854774951));
1212    num :=                  11; ok := ok and raisesOverflowError(num +:= intExpr(9223372036854775797));
1213    num :=                   3; ok := ok and raisesOverflowError(num +:= intExpr(9223372036854775805));
1214    num :=                   2; ok := ok and raisesOverflowError(num +:= intExpr(9223372036854775806));
1215    num :=                   1; ok := ok and raisesOverflowError(num +:= intExpr(9223372036854775807));
1216    if not ok then
1217      writeln(" ***** Addition assignment overflow by one does not raise OVERFLOW_ERROR. (2)");
1218      okay := FALSE;
1219    end if;
1220
1221    ok := TRUE;
1222    arr[1] := 9223372036854775807; ok := ok and raisesOverflowError(arr[1] +:=                   1);
1223    arr[1] := 9223372036854775806; ok := ok and raisesOverflowError(arr[1] +:=                   2);
1224    arr[1] := 9223372036854775805; ok := ok and raisesOverflowError(arr[1] +:=                   3);
1225    arr[1] := 9223372036854775797; ok := ok and raisesOverflowError(arr[1] +:=                  11);
1226    arr[1] := 9223372036854774951; ok := ok and raisesOverflowError(arr[1] +:=                 857);
1227    arr[1] := 9223372036854771169; ok := ok and raisesOverflowError(arr[1] +:=                4639);
1228    arr[1] := 9223372036854737535; ok := ok and raisesOverflowError(arr[1] +:=               38273);
1229    arr[1] := 9223372036854131365; ok := ok and raisesOverflowError(arr[1] +:=              644443);
1230    arr[1] := 9223372036844899255; ok := ok and raisesOverflowError(arr[1] +:=             9876553);
1231    arr[1] := 9223372036842430155; ok := ok and raisesOverflowError(arr[1] +:=            12345653);
1232    arr[1] := 9223372036731319017; ok := ok and raisesOverflowError(arr[1] +:=           123456791);
1233    arr[1] := 9223372033817775309; ok := ok and raisesOverflowError(arr[1] +:=          3037000499);
1234    arr[1] := 9223371962145462840; ok := ok and raisesOverflowError(arr[1] +:=         74709312968);
1235    arr[1] := 9223371289760066695; ok := ok and raisesOverflowError(arr[1] +:=        747094709113);
1236    arr[1] := 9223371102989282771; ok := ok and raisesOverflowError(arr[1] +:=        933865493037);
1237    arr[1] := 9223357724693674121; ok := ok and raisesOverflowError(arr[1] +:=      14312161101687);
1238    arr[1] := 9223131047853734480; ok := ok and raisesOverflowError(arr[1] +:=     240989001041328);
1239    arr[1] := 9221383812660584221; ok := ok and raisesOverflowError(arr[1] +:=    1988224194191587);
1240    arr[1] := 9212609642412704892; ok := ok and raisesOverflowError(arr[1] +:=   10762394442070916);
1241    arr[1] := 8384883669867978008; ok := ok and raisesOverflowError(arr[1] +:=  838488366986797800);
1242    arr[1] := 6148914691236517206; ok := ok and raisesOverflowError(arr[1] +:= 3074457345618258602);
1243    arr[1] := 3074457345618258602; ok := ok and raisesOverflowError(arr[1] +:= 6148914691236517206);
1244    arr[1] :=  838488366986797800; ok := ok and raisesOverflowError(arr[1] +:= 8384883669867978008);
1245    arr[1] :=   10762394442070916; ok := ok and raisesOverflowError(arr[1] +:= 9212609642412704892);
1246    arr[1] :=    1988224194191587; ok := ok and raisesOverflowError(arr[1] +:= 9221383812660584221);
1247    arr[1] :=     240989001041328; ok := ok and raisesOverflowError(arr[1] +:= 9223131047853734480);
1248    arr[1] :=      14312161101687; ok := ok and raisesOverflowError(arr[1] +:= 9223357724693674121);
1249    arr[1] :=        933865493037; ok := ok and raisesOverflowError(arr[1] +:= 9223371102989282771);
1250    arr[1] :=        747094709113; ok := ok and raisesOverflowError(arr[1] +:= 9223371289760066695);
1251    arr[1] :=         74709312968; ok := ok and raisesOverflowError(arr[1] +:= 9223371962145462840);
1252    arr[1] :=          3037000499; ok := ok and raisesOverflowError(arr[1] +:= 9223372033817775309);
1253    arr[1] :=           123456791; ok := ok and raisesOverflowError(arr[1] +:= 9223372036731319017);
1254    arr[1] :=            12345653; ok := ok and raisesOverflowError(arr[1] +:= 9223372036842430155);
1255    arr[1] :=             9876553; ok := ok and raisesOverflowError(arr[1] +:= 9223372036844899255);
1256    arr[1] :=              644443; ok := ok and raisesOverflowError(arr[1] +:= 9223372036854131365);
1257    arr[1] :=               38273; ok := ok and raisesOverflowError(arr[1] +:= 9223372036854737535);
1258    arr[1] :=                4639; ok := ok and raisesOverflowError(arr[1] +:= 9223372036854771169);
1259    arr[1] :=                 857; ok := ok and raisesOverflowError(arr[1] +:= 9223372036854774951);
1260    arr[1] :=                  11; ok := ok and raisesOverflowError(arr[1] +:= 9223372036854775797);
1261    arr[1] :=                   3; ok := ok and raisesOverflowError(arr[1] +:= 9223372036854775805);
1262    arr[1] :=                   2; ok := ok and raisesOverflowError(arr[1] +:= 9223372036854775806);
1263    arr[1] :=                   1; ok := ok and raisesOverflowError(arr[1] +:= 9223372036854775807);
1264    if not ok then
1265      writeln(" ***** Addition assignment overflow by one does not raise OVERFLOW_ERROR. (3)");
1266      okay := FALSE;
1267    end if;
1268
1269    ok := TRUE;
1270    arr[1] := 9223372036854775807; ok := ok and raisesOverflowError(arr[1] +:= intExpr(                  1));
1271    arr[1] := 9223372036854775806; ok := ok and raisesOverflowError(arr[1] +:= intExpr(                  2));
1272    arr[1] := 9223372036854775805; ok := ok and raisesOverflowError(arr[1] +:= intExpr(                  3));
1273    arr[1] := 9223372036854775797; ok := ok and raisesOverflowError(arr[1] +:= intExpr(                 11));
1274    arr[1] := 9223372036854774951; ok := ok and raisesOverflowError(arr[1] +:= intExpr(                857));
1275    arr[1] := 9223372036854771169; ok := ok and raisesOverflowError(arr[1] +:= intExpr(               4639));
1276    arr[1] := 9223372036854737535; ok := ok and raisesOverflowError(arr[1] +:= intExpr(              38273));
1277    arr[1] := 9223372036854131365; ok := ok and raisesOverflowError(arr[1] +:= intExpr(             644443));
1278    arr[1] := 9223372036844899255; ok := ok and raisesOverflowError(arr[1] +:= intExpr(            9876553));
1279    arr[1] := 9223372036842430155; ok := ok and raisesOverflowError(arr[1] +:= intExpr(           12345653));
1280    arr[1] := 9223372036731319017; ok := ok and raisesOverflowError(arr[1] +:= intExpr(          123456791));
1281    arr[1] := 9223372033817775309; ok := ok and raisesOverflowError(arr[1] +:= intExpr(         3037000499));
1282    arr[1] := 9223371962145462840; ok := ok and raisesOverflowError(arr[1] +:= intExpr(        74709312968));
1283    arr[1] := 9223371289760066695; ok := ok and raisesOverflowError(arr[1] +:= intExpr(       747094709113));
1284    arr[1] := 9223371102989282771; ok := ok and raisesOverflowError(arr[1] +:= intExpr(       933865493037));
1285    arr[1] := 9223357724693674121; ok := ok and raisesOverflowError(arr[1] +:= intExpr(     14312161101687));
1286    arr[1] := 9223131047853734480; ok := ok and raisesOverflowError(arr[1] +:= intExpr(    240989001041328));
1287    arr[1] := 9221383812660584221; ok := ok and raisesOverflowError(arr[1] +:= intExpr(   1988224194191587));
1288    arr[1] := 9212609642412704892; ok := ok and raisesOverflowError(arr[1] +:= intExpr(  10762394442070916));
1289    arr[1] := 8384883669867978008; ok := ok and raisesOverflowError(arr[1] +:= intExpr( 838488366986797800));
1290    arr[1] := 6148914691236517206; ok := ok and raisesOverflowError(arr[1] +:= intExpr(3074457345618258602));
1291    arr[1] := 3074457345618258602; ok := ok and raisesOverflowError(arr[1] +:= intExpr(6148914691236517206));
1292    arr[1] :=  838488366986797800; ok := ok and raisesOverflowError(arr[1] +:= intExpr(8384883669867978008));
1293    arr[1] :=   10762394442070916; ok := ok and raisesOverflowError(arr[1] +:= intExpr(9212609642412704892));
1294    arr[1] :=    1988224194191587; ok := ok and raisesOverflowError(arr[1] +:= intExpr(9221383812660584221));
1295    arr[1] :=     240989001041328; ok := ok and raisesOverflowError(arr[1] +:= intExpr(9223131047853734480));
1296    arr[1] :=      14312161101687; ok := ok and raisesOverflowError(arr[1] +:= intExpr(9223357724693674121));
1297    arr[1] :=        933865493037; ok := ok and raisesOverflowError(arr[1] +:= intExpr(9223371102989282771));
1298    arr[1] :=        747094709113; ok := ok and raisesOverflowError(arr[1] +:= intExpr(9223371289760066695));
1299    arr[1] :=         74709312968; ok := ok and raisesOverflowError(arr[1] +:= intExpr(9223371962145462840));
1300    arr[1] :=          3037000499; ok := ok and raisesOverflowError(arr[1] +:= intExpr(9223372033817775309));
1301    arr[1] :=           123456791; ok := ok and raisesOverflowError(arr[1] +:= intExpr(9223372036731319017));
1302    arr[1] :=            12345653; ok := ok and raisesOverflowError(arr[1] +:= intExpr(9223372036842430155));
1303    arr[1] :=             9876553; ok := ok and raisesOverflowError(arr[1] +:= intExpr(9223372036844899255));
1304    arr[1] :=              644443; ok := ok and raisesOverflowError(arr[1] +:= intExpr(9223372036854131365));
1305    arr[1] :=               38273; ok := ok and raisesOverflowError(arr[1] +:= intExpr(9223372036854737535));
1306    arr[1] :=                4639; ok := ok and raisesOverflowError(arr[1] +:= intExpr(9223372036854771169));
1307    arr[1] :=                 857; ok := ok and raisesOverflowError(arr[1] +:= intExpr(9223372036854774951));
1308    arr[1] :=                  11; ok := ok and raisesOverflowError(arr[1] +:= intExpr(9223372036854775797));
1309    arr[1] :=                   3; ok := ok and raisesOverflowError(arr[1] +:= intExpr(9223372036854775805));
1310    arr[1] :=                   2; ok := ok and raisesOverflowError(arr[1] +:= intExpr(9223372036854775806));
1311    arr[1] :=                   1; ok := ok and raisesOverflowError(arr[1] +:= intExpr(9223372036854775807));
1312    if not ok then
1313      writeln(" ***** Addition assignment overflow by one does not raise OVERFLOW_ERROR. (4)");
1314      okay := FALSE;
1315    end if;
1316
1317    ok := TRUE;
1318    num :=            INT64_MIN; ok := ok and raisesOverflowError(num +:=            INT64_MIN);
1319    num :=            INT64_MIN; ok := ok and raisesOverflowError(num +:= -9223372036854775807);
1320    num := -9223372036854775807; ok := ok and raisesOverflowError(num +:=            INT64_MIN);
1321    num := -9223372036854775807; ok := ok and raisesOverflowError(num +:= -9223372036854775807);
1322    num :=            INT64_MIN; ok := ok and raisesOverflowError(num +:= intExpr(           INT64_MIN));
1323    num :=            INT64_MIN; ok := ok and raisesOverflowError(num +:= intExpr(-9223372036854775807));
1324    num := -9223372036854775807; ok := ok and raisesOverflowError(num +:= intExpr(           INT64_MIN));
1325    num := -9223372036854775807; ok := ok and raisesOverflowError(num +:= intExpr(-9223372036854775807));
1326    arr[1] :=            INT64_MIN; ok := ok and raisesOverflowError(arr[1] +:=            INT64_MIN);
1327    arr[1] :=            INT64_MIN; ok := ok and raisesOverflowError(arr[1] +:= -9223372036854775807);
1328    arr[1] := -9223372036854775807; ok := ok and raisesOverflowError(arr[1] +:=            INT64_MIN);
1329    arr[1] := -9223372036854775807; ok := ok and raisesOverflowError(arr[1] +:= -9223372036854775807);
1330    arr[1] :=            INT64_MIN; ok := ok and raisesOverflowError(arr[1] +:= intExpr(           INT64_MIN));
1331    arr[1] :=            INT64_MIN; ok := ok and raisesOverflowError(arr[1] +:= intExpr(-9223372036854775807));
1332    arr[1] := -9223372036854775807; ok := ok and raisesOverflowError(arr[1] +:= intExpr(           INT64_MIN));
1333    arr[1] := -9223372036854775807; ok := ok and raisesOverflowError(arr[1] +:= intExpr(-9223372036854775807));
1334    if not ok then
1335      writeln(" ***** Addition assignment underflow does not raise OVERFLOW_ERROR.");
1336      okay := FALSE;
1337    end if;
1338
1339    ok := TRUE;
1340    num := 9223372036854775807; ok := ok and raisesOverflowError(num +:= 9223372036854775807);
1341    num := 9223372036854775807; ok := ok and raisesOverflowError(num +:= 9223372036854775806);
1342    num := 9223372036854775806; ok := ok and raisesOverflowError(num +:= 9223372036854775807);
1343    num := 9223372036854775806; ok := ok and raisesOverflowError(num +:= 9223372036854775806);
1344    num := 9223372036854775807; ok := ok and raisesOverflowError(num +:= intExpr(9223372036854775807));
1345    num := 9223372036854775807; ok := ok and raisesOverflowError(num +:= intExpr(9223372036854775806));
1346    num := 9223372036854775806; ok := ok and raisesOverflowError(num +:= intExpr(9223372036854775807));
1347    num := 9223372036854775806; ok := ok and raisesOverflowError(num +:= intExpr(9223372036854775806));
1348    arr[1] := 9223372036854775807; ok := ok and raisesOverflowError(arr[1] +:= 9223372036854775807);
1349    arr[1] := 9223372036854775807; ok := ok and raisesOverflowError(arr[1] +:= 9223372036854775806);
1350    arr[1] := 9223372036854775806; ok := ok and raisesOverflowError(arr[1] +:= 9223372036854775807);
1351    arr[1] := 9223372036854775806; ok := ok and raisesOverflowError(arr[1] +:= 9223372036854775806);
1352    arr[1] := 9223372036854775807; ok := ok and raisesOverflowError(arr[1] +:= intExpr(9223372036854775807));
1353    arr[1] := 9223372036854775807; ok := ok and raisesOverflowError(arr[1] +:= intExpr(9223372036854775806));
1354    arr[1] := 9223372036854775806; ok := ok and raisesOverflowError(arr[1] +:= intExpr(9223372036854775807));
1355    arr[1] := 9223372036854775806; ok := ok and raisesOverflowError(arr[1] +:= intExpr(9223372036854775806));
1356    if not ok then
1357      writeln(" ***** Addition assignment overflow does not raise OVERFLOW_ERROR.");
1358      okay := FALSE;
1359    end if;
1360
1361    if okay then
1362      writeln("Overflow checking of addition assignment works correct.");
1363    else
1364      writeln(" ***** Overflow checking of addition assignment does not work correct.");
1365    end if;
1366  end func;
1367
1368
1369const proc: check_subtract is func
1370  local
1371    var boolean: okay is TRUE;
1372  begin
1373    if  not raisesOverflowError(           INT64_MIN -                   1) or
1374        not raisesOverflowError(-9223372036854775807 -                   2) or
1375        not raisesOverflowError(-9223372036854775806 -                   3) or
1376        not raisesOverflowError(-9223372036854775798 -                  11) or
1377        not raisesOverflowError(-9223372036854774952 -                 857) or
1378        not raisesOverflowError(-9223372036854771170 -                4639) or
1379        not raisesOverflowError(-9223372036854737536 -               38273) or
1380        not raisesOverflowError(-9223372036854131366 -              644443) or
1381        not raisesOverflowError(-9223372036844899256 -             9876553) or
1382        not raisesOverflowError(-9223372036842430156 -            12345653) or
1383        not raisesOverflowError(-9223372036731319018 -           123456791) or
1384        not raisesOverflowError(-9223372033817775310 -          3037000499) or
1385        not raisesOverflowError(-9223371962145462841 -         74709312968) or
1386        not raisesOverflowError(-9223371289760066696 -        747094709113) or
1387        not raisesOverflowError(-9223371102989282772 -        933865493037) or
1388        not raisesOverflowError(-9223357724693674122 -      14312161101687) or
1389        not raisesOverflowError(-9223131047853734481 -     240989001041328) or
1390        not raisesOverflowError(-9221383812660584222 -    1988224194191587) or
1391        not raisesOverflowError(-9212609642412704893 -   10762394442070916) or
1392        not raisesOverflowError(-8384883669867978009 -  838488366986797800) or
1393        not raisesOverflowError(-6148914691236517207 - 3074457345618258602) or
1394        not raisesOverflowError(-3074457345618258602 - 6148914691236517207) or
1395        not raisesOverflowError( -838488366986797800 - 8384883669867978009) or
1396        not raisesOverflowError(  -10762394442070916 - 9212609642412704893) or
1397        not raisesOverflowError(   -1988224194191587 - 9221383812660584222) or
1398        not raisesOverflowError(    -240989001041328 - 9223131047853734481) or
1399        not raisesOverflowError(     -14312161101687 - 9223357724693674122) or
1400        not raisesOverflowError(       -933865493037 - 9223371102989282772) or
1401        not raisesOverflowError(       -747094709113 - 9223371289760066696) or
1402        not raisesOverflowError(        -74709312968 - 9223371962145462841) or
1403        not raisesOverflowError(         -3037000499 - 9223372033817775310) or
1404        not raisesOverflowError(          -123456791 - 9223372036731319018) or
1405        not raisesOverflowError(           -12345653 - 9223372036842430156) or
1406        not raisesOverflowError(            -9876553 - 9223372036844899256) or
1407        not raisesOverflowError(             -644443 - 9223372036854131366) or
1408        not raisesOverflowError(              -38273 - 9223372036854737536) or
1409        not raisesOverflowError(               -4639 - 9223372036854771170) or
1410        not raisesOverflowError(                -857 - 9223372036854774952) or
1411        not raisesOverflowError(                 -11 - 9223372036854775798) or
1412        not raisesOverflowError(                  -3 - 9223372036854775806) or
1413        not raisesOverflowError(                  -2 - 9223372036854775807) then
1414      writeln(" ***** Subtraction underflow by one does not raise OVERFLOW_ERROR. (1)");
1415      okay := FALSE;
1416    end if;
1417
1418    if  not raisesOverflowError(intExpr(           INT64_MIN) -                   1) or
1419        not raisesOverflowError(intExpr(-9223372036854775807) -                   2) or
1420        not raisesOverflowError(intExpr(-9223372036854775806) -                   3) or
1421        not raisesOverflowError(intExpr(-9223372036854775798) -                  11) or
1422        not raisesOverflowError(intExpr(-9223372036854774952) -                 857) or
1423        not raisesOverflowError(intExpr(-9223372036854771170) -                4639) or
1424        not raisesOverflowError(intExpr(-9223372036854737536) -               38273) or
1425        not raisesOverflowError(intExpr(-9223372036854131366) -              644443) or
1426        not raisesOverflowError(intExpr(-9223372036844899256) -             9876553) or
1427        not raisesOverflowError(intExpr(-9223372036842430156) -            12345653) or
1428        not raisesOverflowError(intExpr(-9223372036731319018) -           123456791) or
1429        not raisesOverflowError(intExpr(-9223372033817775310) -          3037000499) or
1430        not raisesOverflowError(intExpr(-9223371962145462841) -         74709312968) or
1431        not raisesOverflowError(intExpr(-9223371289760066696) -        747094709113) or
1432        not raisesOverflowError(intExpr(-9223371102989282772) -        933865493037) or
1433        not raisesOverflowError(intExpr(-9223357724693674122) -      14312161101687) or
1434        not raisesOverflowError(intExpr(-9223131047853734481) -     240989001041328) or
1435        not raisesOverflowError(intExpr(-9221383812660584222) -    1988224194191587) or
1436        not raisesOverflowError(intExpr(-9212609642412704893) -   10762394442070916) or
1437        not raisesOverflowError(intExpr(-8384883669867978009) -  838488366986797800) or
1438        not raisesOverflowError(intExpr(-6148914691236517207) - 3074457345618258602) or
1439        not raisesOverflowError(intExpr(-3074457345618258602) - 6148914691236517207) or
1440        not raisesOverflowError(intExpr( -838488366986797800) - 8384883669867978009) or
1441        not raisesOverflowError(intExpr(  -10762394442070916) - 9212609642412704893) or
1442        not raisesOverflowError(intExpr(   -1988224194191587) - 9221383812660584222) or
1443        not raisesOverflowError(intExpr(    -240989001041328) - 9223131047853734481) or
1444        not raisesOverflowError(intExpr(     -14312161101687) - 9223357724693674122) or
1445        not raisesOverflowError(intExpr(       -933865493037) - 9223371102989282772) or
1446        not raisesOverflowError(intExpr(       -747094709113) - 9223371289760066696) or
1447        not raisesOverflowError(intExpr(        -74709312968) - 9223371962145462841) or
1448        not raisesOverflowError(intExpr(         -3037000499) - 9223372033817775310) or
1449        not raisesOverflowError(intExpr(          -123456791) - 9223372036731319018) or
1450        not raisesOverflowError(intExpr(           -12345653) - 9223372036842430156) or
1451        not raisesOverflowError(intExpr(            -9876553) - 9223372036844899256) or
1452        not raisesOverflowError(intExpr(             -644443) - 9223372036854131366) or
1453        not raisesOverflowError(intExpr(              -38273) - 9223372036854737536) or
1454        not raisesOverflowError(intExpr(               -4639) - 9223372036854771170) or
1455        not raisesOverflowError(intExpr(                -857) - 9223372036854774952) or
1456        not raisesOverflowError(intExpr(                 -11) - 9223372036854775798) or
1457        not raisesOverflowError(intExpr(                  -3) - 9223372036854775806) or
1458        not raisesOverflowError(intExpr(                  -2) - 9223372036854775807) then
1459      writeln(" ***** Subtraction underflow by one does not raise OVERFLOW_ERROR. (2)");
1460      okay := FALSE;
1461    end if;
1462
1463    if  not raisesOverflowError(           INT64_MIN - intExpr(                  1)) or
1464        not raisesOverflowError(-9223372036854775807 - intExpr(                  2)) or
1465        not raisesOverflowError(-9223372036854775806 - intExpr(                  3)) or
1466        not raisesOverflowError(-9223372036854775798 - intExpr(                 11)) or
1467        not raisesOverflowError(-9223372036854774952 - intExpr(                857)) or
1468        not raisesOverflowError(-9223372036854771170 - intExpr(               4639)) or
1469        not raisesOverflowError(-9223372036854737536 - intExpr(              38273)) or
1470        not raisesOverflowError(-9223372036854131366 - intExpr(             644443)) or
1471        not raisesOverflowError(-9223372036844899256 - intExpr(            9876553)) or
1472        not raisesOverflowError(-9223372036842430156 - intExpr(           12345653)) or
1473        not raisesOverflowError(-9223372036731319018 - intExpr(          123456791)) or
1474        not raisesOverflowError(-9223372033817775310 - intExpr(         3037000499)) or
1475        not raisesOverflowError(-9223371962145462841 - intExpr(        74709312968)) or
1476        not raisesOverflowError(-9223371289760066696 - intExpr(       747094709113)) or
1477        not raisesOverflowError(-9223371102989282772 - intExpr(       933865493037)) or
1478        not raisesOverflowError(-9223357724693674122 - intExpr(     14312161101687)) or
1479        not raisesOverflowError(-9223131047853734481 - intExpr(    240989001041328)) or
1480        not raisesOverflowError(-9221383812660584222 - intExpr(   1988224194191587)) or
1481        not raisesOverflowError(-9212609642412704893 - intExpr(  10762394442070916)) or
1482        not raisesOverflowError(-8384883669867978009 - intExpr( 838488366986797800)) or
1483        not raisesOverflowError(-6148914691236517207 - intExpr(3074457345618258602)) or
1484        not raisesOverflowError(-3074457345618258602 - intExpr(6148914691236517207)) or
1485        not raisesOverflowError( -838488366986797800 - intExpr(8384883669867978009)) or
1486        not raisesOverflowError(  -10762394442070916 - intExpr(9212609642412704893)) or
1487        not raisesOverflowError(   -1988224194191587 - intExpr(9221383812660584222)) or
1488        not raisesOverflowError(    -240989001041328 - intExpr(9223131047853734481)) or
1489        not raisesOverflowError(     -14312161101687 - intExpr(9223357724693674122)) or
1490        not raisesOverflowError(       -933865493037 - intExpr(9223371102989282772)) or
1491        not raisesOverflowError(       -747094709113 - intExpr(9223371289760066696)) or
1492        not raisesOverflowError(        -74709312968 - intExpr(9223371962145462841)) or
1493        not raisesOverflowError(         -3037000499 - intExpr(9223372033817775310)) or
1494        not raisesOverflowError(          -123456791 - intExpr(9223372036731319018)) or
1495        not raisesOverflowError(           -12345653 - intExpr(9223372036842430156)) or
1496        not raisesOverflowError(            -9876553 - intExpr(9223372036844899256)) or
1497        not raisesOverflowError(             -644443 - intExpr(9223372036854131366)) or
1498        not raisesOverflowError(              -38273 - intExpr(9223372036854737536)) or
1499        not raisesOverflowError(               -4639 - intExpr(9223372036854771170)) or
1500        not raisesOverflowError(                -857 - intExpr(9223372036854774952)) or
1501        not raisesOverflowError(                 -11 - intExpr(9223372036854775798)) or
1502        not raisesOverflowError(                  -3 - intExpr(9223372036854775806)) or
1503        not raisesOverflowError(                  -2 - intExpr(9223372036854775807)) then
1504      writeln(" ***** Subtraction underflow by one does not raise OVERFLOW_ERROR. (3)");
1505      okay := FALSE;
1506    end if;
1507
1508    if  not raisesOverflowError(intExpr(           INT64_MIN) - intExpr(                  1)) or
1509        not raisesOverflowError(intExpr(-9223372036854775807) - intExpr(                  2)) or
1510        not raisesOverflowError(intExpr(-9223372036854775806) - intExpr(                  3)) or
1511        not raisesOverflowError(intExpr(-9223372036854775798) - intExpr(                 11)) or
1512        not raisesOverflowError(intExpr(-9223372036854774952) - intExpr(                857)) or
1513        not raisesOverflowError(intExpr(-9223372036854771170) - intExpr(               4639)) or
1514        not raisesOverflowError(intExpr(-9223372036854737536) - intExpr(              38273)) or
1515        not raisesOverflowError(intExpr(-9223372036854131366) - intExpr(             644443)) or
1516        not raisesOverflowError(intExpr(-9223372036844899256) - intExpr(            9876553)) or
1517        not raisesOverflowError(intExpr(-9223372036842430156) - intExpr(           12345653)) or
1518        not raisesOverflowError(intExpr(-9223372036731319018) - intExpr(          123456791)) or
1519        not raisesOverflowError(intExpr(-9223372033817775310) - intExpr(         3037000499)) or
1520        not raisesOverflowError(intExpr(-9223371962145462841) - intExpr(        74709312968)) or
1521        not raisesOverflowError(intExpr(-9223371289760066696) - intExpr(       747094709113)) or
1522        not raisesOverflowError(intExpr(-9223371102989282772) - intExpr(       933865493037)) or
1523        not raisesOverflowError(intExpr(-9223357724693674122) - intExpr(     14312161101687)) or
1524        not raisesOverflowError(intExpr(-9223131047853734481) - intExpr(    240989001041328)) or
1525        not raisesOverflowError(intExpr(-9221383812660584222) - intExpr(   1988224194191587)) or
1526        not raisesOverflowError(intExpr(-9212609642412704893) - intExpr(  10762394442070916)) or
1527        not raisesOverflowError(intExpr(-8384883669867978009) - intExpr( 838488366986797800)) or
1528        not raisesOverflowError(intExpr(-6148914691236517207) - intExpr(3074457345618258602)) or
1529        not raisesOverflowError(intExpr(-3074457345618258602) - intExpr(6148914691236517207)) or
1530        not raisesOverflowError(intExpr( -838488366986797800) - intExpr(8384883669867978009)) or
1531        not raisesOverflowError(intExpr(  -10762394442070916) - intExpr(9212609642412704893)) or
1532        not raisesOverflowError(intExpr(   -1988224194191587) - intExpr(9221383812660584222)) or
1533        not raisesOverflowError(intExpr(    -240989001041328) - intExpr(9223131047853734481)) or
1534        not raisesOverflowError(intExpr(     -14312161101687) - intExpr(9223357724693674122)) or
1535        not raisesOverflowError(intExpr(       -933865493037) - intExpr(9223371102989282772)) or
1536        not raisesOverflowError(intExpr(       -747094709113) - intExpr(9223371289760066696)) or
1537        not raisesOverflowError(intExpr(        -74709312968) - intExpr(9223371962145462841)) or
1538        not raisesOverflowError(intExpr(         -3037000499) - intExpr(9223372033817775310)) or
1539        not raisesOverflowError(intExpr(          -123456791) - intExpr(9223372036731319018)) or
1540        not raisesOverflowError(intExpr(           -12345653) - intExpr(9223372036842430156)) or
1541        not raisesOverflowError(intExpr(            -9876553) - intExpr(9223372036844899256)) or
1542        not raisesOverflowError(intExpr(             -644443) - intExpr(9223372036854131366)) or
1543        not raisesOverflowError(intExpr(              -38273) - intExpr(9223372036854737536)) or
1544        not raisesOverflowError(intExpr(               -4639) - intExpr(9223372036854771170)) or
1545        not raisesOverflowError(intExpr(                -857) - intExpr(9223372036854774952)) or
1546        not raisesOverflowError(intExpr(                 -11) - intExpr(9223372036854775798)) or
1547        not raisesOverflowError(intExpr(                  -3) - intExpr(9223372036854775806)) or
1548        not raisesOverflowError(intExpr(                  -2) - intExpr(9223372036854775807)) then
1549      writeln(" ***** Subtraction underflow by one does not raise OVERFLOW_ERROR. (4)");
1550      okay := FALSE;
1551    end if;
1552
1553    if  not raisesOverflowError(9223372036854775807 -                   -1) or
1554        not raisesOverflowError(9223372036854775806 -                   -2) or
1555        not raisesOverflowError(9223372036854775805 -                   -3) or
1556        not raisesOverflowError(9223372036854775797 -                  -11) or
1557        not raisesOverflowError(9223372036854774951 -                 -857) or
1558        not raisesOverflowError(9223372036854771169 -                -4639) or
1559        not raisesOverflowError(9223372036854737535 -               -38273) or
1560        not raisesOverflowError(9223372036854131365 -              -644443) or
1561        not raisesOverflowError(9223372036844899255 -             -9876553) or
1562        not raisesOverflowError(9223372036842430155 -            -12345653) or
1563        not raisesOverflowError(9223372036731319017 -           -123456791) or
1564        not raisesOverflowError(9223372033817775309 -          -3037000499) or
1565        not raisesOverflowError(9223371962145462840 -         -74709312968) or
1566        not raisesOverflowError(9223371289760066695 -        -747094709113) or
1567        not raisesOverflowError(9223371102989282771 -        -933865493037) or
1568        not raisesOverflowError(9223357724693674121 -      -14312161101687) or
1569        not raisesOverflowError(9223131047853734480 -     -240989001041328) or
1570        not raisesOverflowError(9221383812660584221 -    -1988224194191587) or
1571        not raisesOverflowError(9212609642412704892 -   -10762394442070916) or
1572        not raisesOverflowError(8384883669867978008 -  -838488366986797800) or
1573        not raisesOverflowError(6148914691236517206 - -3074457345618258602) or
1574        not raisesOverflowError(3074457345618258602 - -6148914691236517206) or
1575        not raisesOverflowError( 838488366986797800 - -8384883669867978008) or
1576        not raisesOverflowError(  10762394442070916 - -9212609642412704892) or
1577        not raisesOverflowError(   1988224194191587 - -9221383812660584221) or
1578        not raisesOverflowError(    240989001041328 - -9223131047853734480) or
1579        not raisesOverflowError(     14312161101687 - -9223357724693674121) or
1580        not raisesOverflowError(       933865493037 - -9223371102989282771) or
1581        not raisesOverflowError(       747094709113 - -9223371289760066695) or
1582        not raisesOverflowError(        74709312968 - -9223371962145462840) or
1583        not raisesOverflowError(         3037000499 - -9223372033817775309) or
1584        not raisesOverflowError(          123456791 - -9223372036731319017) or
1585        not raisesOverflowError(           12345653 - -9223372036842430155) or
1586        not raisesOverflowError(            9876553 - -9223372036844899255) or
1587        not raisesOverflowError(             644443 - -9223372036854131365) or
1588        not raisesOverflowError(              38273 - -9223372036854737535) or
1589        not raisesOverflowError(               4639 - -9223372036854771169) or
1590        not raisesOverflowError(                857 - -9223372036854774951) or
1591        not raisesOverflowError(                 11 - -9223372036854775797) or
1592        not raisesOverflowError(                  3 - -9223372036854775805) or
1593        not raisesOverflowError(                  2 - -9223372036854775806) or
1594        not raisesOverflowError(                  1 - -9223372036854775807) or
1595        not raisesOverflowError(                  0 -            INT64_MIN) then
1596      writeln(" ***** Subtraction overflow by one does not raise OVERFLOW_ERROR. (1)");
1597      okay := FALSE;
1598    end if;
1599
1600    if  not raisesOverflowError(intExpr(9223372036854775807) -                   -1) or
1601        not raisesOverflowError(intExpr(9223372036854775806) -                   -2) or
1602        not raisesOverflowError(intExpr(9223372036854775805) -                   -3) or
1603        not raisesOverflowError(intExpr(9223372036854775797) -                  -11) or
1604        not raisesOverflowError(intExpr(9223372036854774951) -                 -857) or
1605        not raisesOverflowError(intExpr(9223372036854771169) -                -4639) or
1606        not raisesOverflowError(intExpr(9223372036854737535) -               -38273) or
1607        not raisesOverflowError(intExpr(9223372036854131365) -              -644443) or
1608        not raisesOverflowError(intExpr(9223372036844899255) -             -9876553) or
1609        not raisesOverflowError(intExpr(9223372036842430155) -            -12345653) or
1610        not raisesOverflowError(intExpr(9223372036731319017) -           -123456791) or
1611        not raisesOverflowError(intExpr(9223372033817775309) -          -3037000499) or
1612        not raisesOverflowError(intExpr(9223371962145462840) -         -74709312968) or
1613        not raisesOverflowError(intExpr(9223371289760066695) -        -747094709113) or
1614        not raisesOverflowError(intExpr(9223371102989282771) -        -933865493037) or
1615        not raisesOverflowError(intExpr(9223357724693674121) -      -14312161101687) or
1616        not raisesOverflowError(intExpr(9223131047853734480) -     -240989001041328) or
1617        not raisesOverflowError(intExpr(9221383812660584221) -    -1988224194191587) or
1618        not raisesOverflowError(intExpr(9212609642412704892) -   -10762394442070916) or
1619        not raisesOverflowError(intExpr(8384883669867978008) -  -838488366986797800) or
1620        not raisesOverflowError(intExpr(6148914691236517206) - -3074457345618258602) or
1621        not raisesOverflowError(intExpr(3074457345618258602) - -6148914691236517206) or
1622        not raisesOverflowError(intExpr( 838488366986797800) - -8384883669867978008) or
1623        not raisesOverflowError(intExpr(  10762394442070916) - -9212609642412704892) or
1624        not raisesOverflowError(intExpr(   1988224194191587) - -9221383812660584221) or
1625        not raisesOverflowError(intExpr(    240989001041328) - -9223131047853734480) or
1626        not raisesOverflowError(intExpr(     14312161101687) - -9223357724693674121) or
1627        not raisesOverflowError(intExpr(       933865493037) - -9223371102989282771) or
1628        not raisesOverflowError(intExpr(       747094709113) - -9223371289760066695) or
1629        not raisesOverflowError(intExpr(        74709312968) - -9223371962145462840) or
1630        not raisesOverflowError(intExpr(         3037000499) - -9223372033817775309) or
1631        not raisesOverflowError(intExpr(          123456791) - -9223372036731319017) or
1632        not raisesOverflowError(intExpr(           12345653) - -9223372036842430155) or
1633        not raisesOverflowError(intExpr(            9876553) - -9223372036844899255) or
1634        not raisesOverflowError(intExpr(             644443) - -9223372036854131365) or
1635        not raisesOverflowError(intExpr(              38273) - -9223372036854737535) or
1636        not raisesOverflowError(intExpr(               4639) - -9223372036854771169) or
1637        not raisesOverflowError(intExpr(                857) - -9223372036854774951) or
1638        not raisesOverflowError(intExpr(                 11) - -9223372036854775797) or
1639        not raisesOverflowError(intExpr(                  3) - -9223372036854775805) or
1640        not raisesOverflowError(intExpr(                  2) - -9223372036854775806) or
1641        not raisesOverflowError(intExpr(                  1) - -9223372036854775807) or
1642        not raisesOverflowError(intExpr(                  0) -            INT64_MIN) then
1643      writeln(" ***** Subtraction overflow by one does not raise OVERFLOW_ERROR. (2)");
1644      okay := FALSE;
1645    end if;
1646
1647    if  not raisesOverflowError(9223372036854775807 - intExpr(                  -1)) or
1648        not raisesOverflowError(9223372036854775806 - intExpr(                  -2)) or
1649        not raisesOverflowError(9223372036854775805 - intExpr(                  -3)) or
1650        not raisesOverflowError(9223372036854775797 - intExpr(                 -11)) or
1651        not raisesOverflowError(9223372036854774951 - intExpr(                -857)) or
1652        not raisesOverflowError(9223372036854771169 - intExpr(               -4639)) or
1653        not raisesOverflowError(9223372036854737535 - intExpr(              -38273)) or
1654        not raisesOverflowError(9223372036854131365 - intExpr(             -644443)) or
1655        not raisesOverflowError(9223372036844899255 - intExpr(            -9876553)) or
1656        not raisesOverflowError(9223372036842430155 - intExpr(           -12345653)) or
1657        not raisesOverflowError(9223372036731319017 - intExpr(          -123456791)) or
1658        not raisesOverflowError(9223372033817775309 - intExpr(         -3037000499)) or
1659        not raisesOverflowError(9223371962145462840 - intExpr(        -74709312968)) or
1660        not raisesOverflowError(9223371289760066695 - intExpr(       -747094709113)) or
1661        not raisesOverflowError(9223371102989282771 - intExpr(       -933865493037)) or
1662        not raisesOverflowError(9223357724693674121 - intExpr(     -14312161101687)) or
1663        not raisesOverflowError(9223131047853734480 - intExpr(    -240989001041328)) or
1664        not raisesOverflowError(9221383812660584221 - intExpr(   -1988224194191587)) or
1665        not raisesOverflowError(9212609642412704892 - intExpr(  -10762394442070916)) or
1666        not raisesOverflowError(8384883669867978008 - intExpr( -838488366986797800)) or
1667        not raisesOverflowError(6148914691236517206 - intExpr(-3074457345618258602)) or
1668        not raisesOverflowError(3074457345618258602 - intExpr(-6148914691236517206)) or
1669        not raisesOverflowError( 838488366986797800 - intExpr(-8384883669867978008)) or
1670        not raisesOverflowError(  10762394442070916 - intExpr(-9212609642412704892)) or
1671        not raisesOverflowError(   1988224194191587 - intExpr(-9221383812660584221)) or
1672        not raisesOverflowError(    240989001041328 - intExpr(-9223131047853734480)) or
1673        not raisesOverflowError(     14312161101687 - intExpr(-9223357724693674121)) or
1674        not raisesOverflowError(       933865493037 - intExpr(-9223371102989282771)) or
1675        not raisesOverflowError(       747094709113 - intExpr(-9223371289760066695)) or
1676        not raisesOverflowError(        74709312968 - intExpr(-9223371962145462840)) or
1677        not raisesOverflowError(         3037000499 - intExpr(-9223372033817775309)) or
1678        not raisesOverflowError(          123456791 - intExpr(-9223372036731319017)) or
1679        not raisesOverflowError(           12345653 - intExpr(-9223372036842430155)) or
1680        not raisesOverflowError(            9876553 - intExpr(-9223372036844899255)) or
1681        not raisesOverflowError(             644443 - intExpr(-9223372036854131365)) or
1682        not raisesOverflowError(              38273 - intExpr(-9223372036854737535)) or
1683        not raisesOverflowError(               4639 - intExpr(-9223372036854771169)) or
1684        not raisesOverflowError(                857 - intExpr(-9223372036854774951)) or
1685        not raisesOverflowError(                 11 - intExpr(-9223372036854775797)) or
1686        not raisesOverflowError(                  3 - intExpr(-9223372036854775805)) or
1687        not raisesOverflowError(                  2 - intExpr(-9223372036854775806)) or
1688        not raisesOverflowError(                  1 - intExpr(-9223372036854775807)) or
1689        not raisesOverflowError(                  0 - intExpr(           INT64_MIN)) then
1690      writeln(" ***** Subtraction overflow by one does not raise OVERFLOW_ERROR. (3)");
1691      okay := FALSE;
1692    end if;
1693
1694    if  not raisesOverflowError(intExpr(9223372036854775807) - intExpr(                  -1)) or
1695        not raisesOverflowError(intExpr(9223372036854775806) - intExpr(                  -2)) or
1696        not raisesOverflowError(intExpr(9223372036854775805) - intExpr(                  -3)) or
1697        not raisesOverflowError(intExpr(9223372036854775797) - intExpr(                 -11)) or
1698        not raisesOverflowError(intExpr(9223372036854774951) - intExpr(                -857)) or
1699        not raisesOverflowError(intExpr(9223372036854771169) - intExpr(               -4639)) or
1700        not raisesOverflowError(intExpr(9223372036854737535) - intExpr(              -38273)) or
1701        not raisesOverflowError(intExpr(9223372036854131365) - intExpr(             -644443)) or
1702        not raisesOverflowError(intExpr(9223372036844899255) - intExpr(            -9876553)) or
1703        not raisesOverflowError(intExpr(9223372036842430155) - intExpr(           -12345653)) or
1704        not raisesOverflowError(intExpr(9223372036731319017) - intExpr(          -123456791)) or
1705        not raisesOverflowError(intExpr(9223372033817775309) - intExpr(         -3037000499)) or
1706        not raisesOverflowError(intExpr(9223371962145462840) - intExpr(        -74709312968)) or
1707        not raisesOverflowError(intExpr(9223371289760066695) - intExpr(       -747094709113)) or
1708        not raisesOverflowError(intExpr(9223371102989282771) - intExpr(       -933865493037)) or
1709        not raisesOverflowError(intExpr(9223357724693674121) - intExpr(     -14312161101687)) or
1710        not raisesOverflowError(intExpr(9223131047853734480) - intExpr(    -240989001041328)) or
1711        not raisesOverflowError(intExpr(9221383812660584221) - intExpr(   -1988224194191587)) or
1712        not raisesOverflowError(intExpr(9212609642412704892) - intExpr(  -10762394442070916)) or
1713        not raisesOverflowError(intExpr(8384883669867978008) - intExpr( -838488366986797800)) or
1714        not raisesOverflowError(intExpr(6148914691236517206) - intExpr(-3074457345618258602)) or
1715        not raisesOverflowError(intExpr(3074457345618258602) - intExpr(-6148914691236517206)) or
1716        not raisesOverflowError(intExpr( 838488366986797800) - intExpr(-8384883669867978008)) or
1717        not raisesOverflowError(intExpr(  10762394442070916) - intExpr(-9212609642412704892)) or
1718        not raisesOverflowError(intExpr(   1988224194191587) - intExpr(-9221383812660584221)) or
1719        not raisesOverflowError(intExpr(    240989001041328) - intExpr(-9223131047853734480)) or
1720        not raisesOverflowError(intExpr(     14312161101687) - intExpr(-9223357724693674121)) or
1721        not raisesOverflowError(intExpr(       933865493037) - intExpr(-9223371102989282771)) or
1722        not raisesOverflowError(intExpr(       747094709113) - intExpr(-9223371289760066695)) or
1723        not raisesOverflowError(intExpr(        74709312968) - intExpr(-9223371962145462840)) or
1724        not raisesOverflowError(intExpr(         3037000499) - intExpr(-9223372033817775309)) or
1725        not raisesOverflowError(intExpr(          123456791) - intExpr(-9223372036731319017)) or
1726        not raisesOverflowError(intExpr(           12345653) - intExpr(-9223372036842430155)) or
1727        not raisesOverflowError(intExpr(            9876553) - intExpr(-9223372036844899255)) or
1728        not raisesOverflowError(intExpr(             644443) - intExpr(-9223372036854131365)) or
1729        not raisesOverflowError(intExpr(              38273) - intExpr(-9223372036854737535)) or
1730        not raisesOverflowError(intExpr(               4639) - intExpr(-9223372036854771169)) or
1731        not raisesOverflowError(intExpr(                857) - intExpr(-9223372036854774951)) or
1732        not raisesOverflowError(intExpr(                 11) - intExpr(-9223372036854775797)) or
1733        not raisesOverflowError(intExpr(                  3) - intExpr(-9223372036854775805)) or
1734        not raisesOverflowError(intExpr(                  2) - intExpr(-9223372036854775806)) or
1735        not raisesOverflowError(intExpr(                  1) - intExpr(-9223372036854775807)) or
1736        not raisesOverflowError(intExpr(                  0) - intExpr(           INT64_MIN)) then
1737      writeln(" ***** Subtraction overflow by one does not raise OVERFLOW_ERROR. (4)");
1738      okay := FALSE;
1739    end if;
1740
1741    if  not raisesOverflowError(           INT64_MIN - 9223372036854775807) or
1742        not raisesOverflowError(           INT64_MIN - 9223372036854775806) or
1743        not raisesOverflowError(-9223372036854775807 - 9223372036854775807) or
1744        not raisesOverflowError(-9223372036854775807 - 9223372036854775806) or
1745        not raisesOverflowError(intExpr(           INT64_MIN) - 9223372036854775807) or
1746        not raisesOverflowError(intExpr(           INT64_MIN) - 9223372036854775806) or
1747        not raisesOverflowError(intExpr(-9223372036854775807) - 9223372036854775807) or
1748        not raisesOverflowError(intExpr(-9223372036854775807) - 9223372036854775806) or
1749        not raisesOverflowError(           INT64_MIN - intExpr(9223372036854775807)) or
1750        not raisesOverflowError(           INT64_MIN - intExpr(9223372036854775806)) or
1751        not raisesOverflowError(-9223372036854775807 - intExpr(9223372036854775807)) or
1752        not raisesOverflowError(-9223372036854775807 - intExpr(9223372036854775806)) or
1753        not raisesOverflowError(intExpr(           INT64_MIN) - intExpr(9223372036854775807)) or
1754        not raisesOverflowError(intExpr(           INT64_MIN) - intExpr(9223372036854775806)) or
1755        not raisesOverflowError(intExpr(-9223372036854775807) - intExpr(9223372036854775807)) or
1756        not raisesOverflowError(intExpr(-9223372036854775807) - intExpr(9223372036854775806)) then
1757      writeln(" ***** Subtraction underflow does not raise OVERFLOW_ERROR.");
1758      okay := FALSE;
1759    end if;
1760
1761    if  not raisesOverflowError(9223372036854775807 -            INT64_MIN) or
1762        not raisesOverflowError(9223372036854775807 - -9223372036854775807) or
1763        not raisesOverflowError(9223372036854775806 -            INT64_MIN) or
1764        not raisesOverflowError(9223372036854775806 - -9223372036854775807) or
1765        not raisesOverflowError(intExpr(9223372036854775807) -            INT64_MIN) or
1766        not raisesOverflowError(intExpr(9223372036854775807) - -9223372036854775807) or
1767        not raisesOverflowError(intExpr(9223372036854775806) -            INT64_MIN) or
1768        not raisesOverflowError(intExpr(9223372036854775806) - -9223372036854775807) or
1769        not raisesOverflowError(9223372036854775807 - intExpr(           INT64_MIN)) or
1770        not raisesOverflowError(9223372036854775807 - intExpr(-9223372036854775807)) or
1771        not raisesOverflowError(9223372036854775806 - intExpr(           INT64_MIN)) or
1772        not raisesOverflowError(9223372036854775806 - intExpr(-9223372036854775807)) or
1773        not raisesOverflowError(intExpr(9223372036854775807) - intExpr(           INT64_MIN)) or
1774        not raisesOverflowError(intExpr(9223372036854775807) - intExpr(-9223372036854775807)) or
1775        not raisesOverflowError(intExpr(9223372036854775806) - intExpr(           INT64_MIN)) or
1776        not raisesOverflowError(intExpr(9223372036854775806) - intExpr(-9223372036854775807)) then
1777      writeln(" ***** Subtraction overflow does not raise OVERFLOW_ERROR.");
1778      okay := FALSE;
1779    end if;
1780
1781    if okay then
1782      writeln("Overflow checking of subtraction works correct.");
1783    else
1784      writeln(" ***** Overflow checking of subtraction does not work correct.");
1785    end if;
1786  end func;
1787
1788
1789const proc: check_subtract_assign is func
1790  local
1791    var boolean: okay is TRUE;
1792    var boolean: ok is TRUE;
1793    var integer: num is 0;
1794    var array integer: arr is [] (0);
1795  begin
1796    num :=            INT64_MIN; ok := ok and raisesOverflowError(num -:=                   1);
1797    num := -9223372036854775807; ok := ok and raisesOverflowError(num -:=                   2);
1798    num := -9223372036854775806; ok := ok and raisesOverflowError(num -:=                   3);
1799    num := -9223372036854775798; ok := ok and raisesOverflowError(num -:=                  11);
1800    num := -9223372036854774952; ok := ok and raisesOverflowError(num -:=                 857);
1801    num := -9223372036854771170; ok := ok and raisesOverflowError(num -:=                4639);
1802    num := -9223372036854737536; ok := ok and raisesOverflowError(num -:=               38273);
1803    num := -9223372036854131366; ok := ok and raisesOverflowError(num -:=              644443);
1804    num := -9223372036844899256; ok := ok and raisesOverflowError(num -:=             9876553);
1805    num := -9223372036842430156; ok := ok and raisesOverflowError(num -:=            12345653);
1806    num := -9223372036731319018; ok := ok and raisesOverflowError(num -:=           123456791);
1807    num := -9223372033817775310; ok := ok and raisesOverflowError(num -:=          3037000499);
1808    num := -9223371962145462841; ok := ok and raisesOverflowError(num -:=         74709312968);
1809    num := -9223371289760066696; ok := ok and raisesOverflowError(num -:=        747094709113);
1810    num := -9223371102989282772; ok := ok and raisesOverflowError(num -:=        933865493037);
1811    num := -9223357724693674122; ok := ok and raisesOverflowError(num -:=      14312161101687);
1812    num := -9223131047853734481; ok := ok and raisesOverflowError(num -:=     240989001041328);
1813    num := -9221383812660584222; ok := ok and raisesOverflowError(num -:=    1988224194191587);
1814    num := -9212609642412704893; ok := ok and raisesOverflowError(num -:=   10762394442070916);
1815    num := -8384883669867978009; ok := ok and raisesOverflowError(num -:=  838488366986797800);
1816    num := -6148914691236517207; ok := ok and raisesOverflowError(num -:= 3074457345618258602);
1817    num := -3074457345618258602; ok := ok and raisesOverflowError(num -:= 6148914691236517207);
1818    num :=  -838488366986797800; ok := ok and raisesOverflowError(num -:= 8384883669867978009);
1819    num :=   -10762394442070916; ok := ok and raisesOverflowError(num -:= 9212609642412704893);
1820    num :=    -1988224194191587; ok := ok and raisesOverflowError(num -:= 9221383812660584222);
1821    num :=     -240989001041328; ok := ok and raisesOverflowError(num -:= 9223131047853734481);
1822    num :=      -14312161101687; ok := ok and raisesOverflowError(num -:= 9223357724693674122);
1823    num :=        -933865493037; ok := ok and raisesOverflowError(num -:= 9223371102989282772);
1824    num :=        -747094709113; ok := ok and raisesOverflowError(num -:= 9223371289760066696);
1825    num :=         -74709312968; ok := ok and raisesOverflowError(num -:= 9223371962145462841);
1826    num :=          -3037000499; ok := ok and raisesOverflowError(num -:= 9223372033817775310);
1827    num :=           -123456791; ok := ok and raisesOverflowError(num -:= 9223372036731319018);
1828    num :=            -12345653; ok := ok and raisesOverflowError(num -:= 9223372036842430156);
1829    num :=             -9876553; ok := ok and raisesOverflowError(num -:= 9223372036844899256);
1830    num :=              -644443; ok := ok and raisesOverflowError(num -:= 9223372036854131366);
1831    num :=               -38273; ok := ok and raisesOverflowError(num -:= 9223372036854737536);
1832    num :=                -4639; ok := ok and raisesOverflowError(num -:= 9223372036854771170);
1833    num :=                 -857; ok := ok and raisesOverflowError(num -:= 9223372036854774952);
1834    num :=                  -11; ok := ok and raisesOverflowError(num -:= 9223372036854775798);
1835    num :=                   -3; ok := ok and raisesOverflowError(num -:= 9223372036854775806);
1836    num :=                   -2; ok := ok and raisesOverflowError(num -:= 9223372036854775807);
1837    if not ok then
1838      writeln(" ***** Subtraction assignment underflow by one does not raise OVERFLOW_ERROR. (1)");
1839      okay := FALSE;
1840    end if;
1841
1842    ok := TRUE;
1843    num :=            INT64_MIN; ok := ok and raisesOverflowError(num -:= intExpr(                  1));
1844    num := -9223372036854775807; ok := ok and raisesOverflowError(num -:= intExpr(                  2));
1845    num := -9223372036854775806; ok := ok and raisesOverflowError(num -:= intExpr(                  3));
1846    num := -9223372036854775798; ok := ok and raisesOverflowError(num -:= intExpr(                 11));
1847    num := -9223372036854774952; ok := ok and raisesOverflowError(num -:= intExpr(                857));
1848    num := -9223372036854771170; ok := ok and raisesOverflowError(num -:= intExpr(               4639));
1849    num := -9223372036854737536; ok := ok and raisesOverflowError(num -:= intExpr(              38273));
1850    num := -9223372036854131366; ok := ok and raisesOverflowError(num -:= intExpr(             644443));
1851    num := -9223372036844899256; ok := ok and raisesOverflowError(num -:= intExpr(            9876553));
1852    num := -9223372036842430156; ok := ok and raisesOverflowError(num -:= intExpr(           12345653));
1853    num := -9223372036731319018; ok := ok and raisesOverflowError(num -:= intExpr(          123456791));
1854    num := -9223372033817775310; ok := ok and raisesOverflowError(num -:= intExpr(         3037000499));
1855    num := -9223371962145462841; ok := ok and raisesOverflowError(num -:= intExpr(        74709312968));
1856    num := -9223371289760066696; ok := ok and raisesOverflowError(num -:= intExpr(       747094709113));
1857    num := -9223371102989282772; ok := ok and raisesOverflowError(num -:= intExpr(       933865493037));
1858    num := -9223357724693674122; ok := ok and raisesOverflowError(num -:= intExpr(     14312161101687));
1859    num := -9223131047853734481; ok := ok and raisesOverflowError(num -:= intExpr(    240989001041328));
1860    num := -9221383812660584222; ok := ok and raisesOverflowError(num -:= intExpr(   1988224194191587));
1861    num := -9212609642412704893; ok := ok and raisesOverflowError(num -:= intExpr(  10762394442070916));
1862    num := -8384883669867978009; ok := ok and raisesOverflowError(num -:= intExpr( 838488366986797800));
1863    num := -6148914691236517207; ok := ok and raisesOverflowError(num -:= intExpr(3074457345618258602));
1864    num := -3074457345618258602; ok := ok and raisesOverflowError(num -:= intExpr(6148914691236517207));
1865    num :=  -838488366986797800; ok := ok and raisesOverflowError(num -:= intExpr(8384883669867978009));
1866    num :=   -10762394442070916; ok := ok and raisesOverflowError(num -:= intExpr(9212609642412704893));
1867    num :=    -1988224194191587; ok := ok and raisesOverflowError(num -:= intExpr(9221383812660584222));
1868    num :=     -240989001041328; ok := ok and raisesOverflowError(num -:= intExpr(9223131047853734481));
1869    num :=      -14312161101687; ok := ok and raisesOverflowError(num -:= intExpr(9223357724693674122));
1870    num :=        -933865493037; ok := ok and raisesOverflowError(num -:= intExpr(9223371102989282772));
1871    num :=        -747094709113; ok := ok and raisesOverflowError(num -:= intExpr(9223371289760066696));
1872    num :=         -74709312968; ok := ok and raisesOverflowError(num -:= intExpr(9223371962145462841));
1873    num :=          -3037000499; ok := ok and raisesOverflowError(num -:= intExpr(9223372033817775310));
1874    num :=           -123456791; ok := ok and raisesOverflowError(num -:= intExpr(9223372036731319018));
1875    num :=            -12345653; ok := ok and raisesOverflowError(num -:= intExpr(9223372036842430156));
1876    num :=             -9876553; ok := ok and raisesOverflowError(num -:= intExpr(9223372036844899256));
1877    num :=              -644443; ok := ok and raisesOverflowError(num -:= intExpr(9223372036854131366));
1878    num :=               -38273; ok := ok and raisesOverflowError(num -:= intExpr(9223372036854737536));
1879    num :=                -4639; ok := ok and raisesOverflowError(num -:= intExpr(9223372036854771170));
1880    num :=                 -857; ok := ok and raisesOverflowError(num -:= intExpr(9223372036854774952));
1881    num :=                  -11; ok := ok and raisesOverflowError(num -:= intExpr(9223372036854775798));
1882    num :=                   -3; ok := ok and raisesOverflowError(num -:= intExpr(9223372036854775806));
1883    num :=                   -2; ok := ok and raisesOverflowError(num -:= intExpr(9223372036854775807));
1884    if not ok then
1885      writeln(" ***** Subtraction assignment underflow by one does not raise OVERFLOW_ERROR. (2)");
1886      okay := FALSE;
1887    end if;
1888
1889    ok := TRUE;
1890    arr[1] :=            INT64_MIN; ok := ok and raisesOverflowError(arr[1] -:=                   1);
1891    arr[1] := -9223372036854775807; ok := ok and raisesOverflowError(arr[1] -:=                   2);
1892    arr[1] := -9223372036854775806; ok := ok and raisesOverflowError(arr[1] -:=                   3);
1893    arr[1] := -9223372036854775798; ok := ok and raisesOverflowError(arr[1] -:=                  11);
1894    arr[1] := -9223372036854774952; ok := ok and raisesOverflowError(arr[1] -:=                 857);
1895    arr[1] := -9223372036854771170; ok := ok and raisesOverflowError(arr[1] -:=                4639);
1896    arr[1] := -9223372036854737536; ok := ok and raisesOverflowError(arr[1] -:=               38273);
1897    arr[1] := -9223372036854131366; ok := ok and raisesOverflowError(arr[1] -:=              644443);
1898    arr[1] := -9223372036844899256; ok := ok and raisesOverflowError(arr[1] -:=             9876553);
1899    arr[1] := -9223372036842430156; ok := ok and raisesOverflowError(arr[1] -:=            12345653);
1900    arr[1] := -9223372036731319018; ok := ok and raisesOverflowError(arr[1] -:=           123456791);
1901    arr[1] := -9223372033817775310; ok := ok and raisesOverflowError(arr[1] -:=          3037000499);
1902    arr[1] := -9223371962145462841; ok := ok and raisesOverflowError(arr[1] -:=         74709312968);
1903    arr[1] := -9223371289760066696; ok := ok and raisesOverflowError(arr[1] -:=        747094709113);
1904    arr[1] := -9223371102989282772; ok := ok and raisesOverflowError(arr[1] -:=        933865493037);
1905    arr[1] := -9223357724693674122; ok := ok and raisesOverflowError(arr[1] -:=      14312161101687);
1906    arr[1] := -9223131047853734481; ok := ok and raisesOverflowError(arr[1] -:=     240989001041328);
1907    arr[1] := -9221383812660584222; ok := ok and raisesOverflowError(arr[1] -:=    1988224194191587);
1908    arr[1] := -9212609642412704893; ok := ok and raisesOverflowError(arr[1] -:=   10762394442070916);
1909    arr[1] := -8384883669867978009; ok := ok and raisesOverflowError(arr[1] -:=  838488366986797800);
1910    arr[1] := -6148914691236517207; ok := ok and raisesOverflowError(arr[1] -:= 3074457345618258602);
1911    arr[1] := -3074457345618258602; ok := ok and raisesOverflowError(arr[1] -:= 6148914691236517207);
1912    arr[1] :=  -838488366986797800; ok := ok and raisesOverflowError(arr[1] -:= 8384883669867978009);
1913    arr[1] :=   -10762394442070916; ok := ok and raisesOverflowError(arr[1] -:= 9212609642412704893);
1914    arr[1] :=    -1988224194191587; ok := ok and raisesOverflowError(arr[1] -:= 9221383812660584222);
1915    arr[1] :=     -240989001041328; ok := ok and raisesOverflowError(arr[1] -:= 9223131047853734481);
1916    arr[1] :=      -14312161101687; ok := ok and raisesOverflowError(arr[1] -:= 9223357724693674122);
1917    arr[1] :=        -933865493037; ok := ok and raisesOverflowError(arr[1] -:= 9223371102989282772);
1918    arr[1] :=        -747094709113; ok := ok and raisesOverflowError(arr[1] -:= 9223371289760066696);
1919    arr[1] :=         -74709312968; ok := ok and raisesOverflowError(arr[1] -:= 9223371962145462841);
1920    arr[1] :=          -3037000499; ok := ok and raisesOverflowError(arr[1] -:= 9223372033817775310);
1921    arr[1] :=           -123456791; ok := ok and raisesOverflowError(arr[1] -:= 9223372036731319018);
1922    arr[1] :=            -12345653; ok := ok and raisesOverflowError(arr[1] -:= 9223372036842430156);
1923    arr[1] :=             -9876553; ok := ok and raisesOverflowError(arr[1] -:= 9223372036844899256);
1924    arr[1] :=              -644443; ok := ok and raisesOverflowError(arr[1] -:= 9223372036854131366);
1925    arr[1] :=               -38273; ok := ok and raisesOverflowError(arr[1] -:= 9223372036854737536);
1926    arr[1] :=                -4639; ok := ok and raisesOverflowError(arr[1] -:= 9223372036854771170);
1927    arr[1] :=                 -857; ok := ok and raisesOverflowError(arr[1] -:= 9223372036854774952);
1928    arr[1] :=                  -11; ok := ok and raisesOverflowError(arr[1] -:= 9223372036854775798);
1929    arr[1] :=                   -3; ok := ok and raisesOverflowError(arr[1] -:= 9223372036854775806);
1930    arr[1] :=                   -2; ok := ok and raisesOverflowError(arr[1] -:= 9223372036854775807);
1931    if not ok then
1932      writeln(" ***** Subtraction assignment underflow by one does not raise OVERFLOW_ERROR. (3)");
1933      okay := FALSE;
1934    end if;
1935
1936    ok := TRUE;
1937    arr[1] :=            INT64_MIN; ok := ok and raisesOverflowError(arr[1] -:= intExpr(                  1));
1938    arr[1] := -9223372036854775807; ok := ok and raisesOverflowError(arr[1] -:= intExpr(                  2));
1939    arr[1] := -9223372036854775806; ok := ok and raisesOverflowError(arr[1] -:= intExpr(                  3));
1940    arr[1] := -9223372036854775798; ok := ok and raisesOverflowError(arr[1] -:= intExpr(                 11));
1941    arr[1] := -9223372036854774952; ok := ok and raisesOverflowError(arr[1] -:= intExpr(                857));
1942    arr[1] := -9223372036854771170; ok := ok and raisesOverflowError(arr[1] -:= intExpr(               4639));
1943    arr[1] := -9223372036854737536; ok := ok and raisesOverflowError(arr[1] -:= intExpr(              38273));
1944    arr[1] := -9223372036854131366; ok := ok and raisesOverflowError(arr[1] -:= intExpr(             644443));
1945    arr[1] := -9223372036844899256; ok := ok and raisesOverflowError(arr[1] -:= intExpr(            9876553));
1946    arr[1] := -9223372036842430156; ok := ok and raisesOverflowError(arr[1] -:= intExpr(           12345653));
1947    arr[1] := -9223372036731319018; ok := ok and raisesOverflowError(arr[1] -:= intExpr(          123456791));
1948    arr[1] := -9223372033817775310; ok := ok and raisesOverflowError(arr[1] -:= intExpr(         3037000499));
1949    arr[1] := -9223371962145462841; ok := ok and raisesOverflowError(arr[1] -:= intExpr(        74709312968));
1950    arr[1] := -9223371289760066696; ok := ok and raisesOverflowError(arr[1] -:= intExpr(       747094709113));
1951    arr[1] := -9223371102989282772; ok := ok and raisesOverflowError(arr[1] -:= intExpr(       933865493037));
1952    arr[1] := -9223357724693674122; ok := ok and raisesOverflowError(arr[1] -:= intExpr(     14312161101687));
1953    arr[1] := -9223131047853734481; ok := ok and raisesOverflowError(arr[1] -:= intExpr(    240989001041328));
1954    arr[1] := -9221383812660584222; ok := ok and raisesOverflowError(arr[1] -:= intExpr(   1988224194191587));
1955    arr[1] := -9212609642412704893; ok := ok and raisesOverflowError(arr[1] -:= intExpr(  10762394442070916));
1956    arr[1] := -8384883669867978009; ok := ok and raisesOverflowError(arr[1] -:= intExpr( 838488366986797800));
1957    arr[1] := -6148914691236517207; ok := ok and raisesOverflowError(arr[1] -:= intExpr(3074457345618258602));
1958    arr[1] := -3074457345618258602; ok := ok and raisesOverflowError(arr[1] -:= intExpr(6148914691236517207));
1959    arr[1] :=  -838488366986797800; ok := ok and raisesOverflowError(arr[1] -:= intExpr(8384883669867978009));
1960    arr[1] :=   -10762394442070916; ok := ok and raisesOverflowError(arr[1] -:= intExpr(9212609642412704893));
1961    arr[1] :=    -1988224194191587; ok := ok and raisesOverflowError(arr[1] -:= intExpr(9221383812660584222));
1962    arr[1] :=     -240989001041328; ok := ok and raisesOverflowError(arr[1] -:= intExpr(9223131047853734481));
1963    arr[1] :=      -14312161101687; ok := ok and raisesOverflowError(arr[1] -:= intExpr(9223357724693674122));
1964    arr[1] :=        -933865493037; ok := ok and raisesOverflowError(arr[1] -:= intExpr(9223371102989282772));
1965    arr[1] :=        -747094709113; ok := ok and raisesOverflowError(arr[1] -:= intExpr(9223371289760066696));
1966    arr[1] :=         -74709312968; ok := ok and raisesOverflowError(arr[1] -:= intExpr(9223371962145462841));
1967    arr[1] :=          -3037000499; ok := ok and raisesOverflowError(arr[1] -:= intExpr(9223372033817775310));
1968    arr[1] :=           -123456791; ok := ok and raisesOverflowError(arr[1] -:= intExpr(9223372036731319018));
1969    arr[1] :=            -12345653; ok := ok and raisesOverflowError(arr[1] -:= intExpr(9223372036842430156));
1970    arr[1] :=             -9876553; ok := ok and raisesOverflowError(arr[1] -:= intExpr(9223372036844899256));
1971    arr[1] :=              -644443; ok := ok and raisesOverflowError(arr[1] -:= intExpr(9223372036854131366));
1972    arr[1] :=               -38273; ok := ok and raisesOverflowError(arr[1] -:= intExpr(9223372036854737536));
1973    arr[1] :=                -4639; ok := ok and raisesOverflowError(arr[1] -:= intExpr(9223372036854771170));
1974    arr[1] :=                 -857; ok := ok and raisesOverflowError(arr[1] -:= intExpr(9223372036854774952));
1975    arr[1] :=                  -11; ok := ok and raisesOverflowError(arr[1] -:= intExpr(9223372036854775798));
1976    arr[1] :=                   -3; ok := ok and raisesOverflowError(arr[1] -:= intExpr(9223372036854775806));
1977    arr[1] :=                   -2; ok := ok and raisesOverflowError(arr[1] -:= intExpr(9223372036854775807));
1978    if not ok then
1979      writeln(" ***** Subtraction assignment underflow by one does not raise OVERFLOW_ERROR. (4)");
1980      okay := FALSE;
1981    end if;
1982
1983    ok := TRUE;
1984    num := 9223372036854775807; ok := ok and raisesOverflowError(num -:=                   -1);
1985    num := 9223372036854775806; ok := ok and raisesOverflowError(num -:=                   -2);
1986    num := 9223372036854775805; ok := ok and raisesOverflowError(num -:=                   -3);
1987    num := 9223372036854775797; ok := ok and raisesOverflowError(num -:=                  -11);
1988    num := 9223372036854774951; ok := ok and raisesOverflowError(num -:=                 -857);
1989    num := 9223372036854771169; ok := ok and raisesOverflowError(num -:=                -4639);
1990    num := 9223372036854737535; ok := ok and raisesOverflowError(num -:=               -38273);
1991    num := 9223372036854131365; ok := ok and raisesOverflowError(num -:=              -644443);
1992    num := 9223372036844899255; ok := ok and raisesOverflowError(num -:=             -9876553);
1993    num := 9223372036842430155; ok := ok and raisesOverflowError(num -:=            -12345653);
1994    num := 9223372036731319017; ok := ok and raisesOverflowError(num -:=           -123456791);
1995    num := 9223372033817775309; ok := ok and raisesOverflowError(num -:=          -3037000499);
1996    num := 9223371962145462840; ok := ok and raisesOverflowError(num -:=         -74709312968);
1997    num := 9223371289760066695; ok := ok and raisesOverflowError(num -:=        -747094709113);
1998    num := 9223371102989282771; ok := ok and raisesOverflowError(num -:=        -933865493037);
1999    num := 9223357724693674121; ok := ok and raisesOverflowError(num -:=      -14312161101687);
2000    num := 9223131047853734480; ok := ok and raisesOverflowError(num -:=     -240989001041328);
2001    num := 9221383812660584221; ok := ok and raisesOverflowError(num -:=    -1988224194191587);
2002    num := 9212609642412704892; ok := ok and raisesOverflowError(num -:=   -10762394442070916);
2003    num := 8384883669867978008; ok := ok and raisesOverflowError(num -:=  -838488366986797800);
2004    num := 6148914691236517206; ok := ok and raisesOverflowError(num -:= -3074457345618258602);
2005    num := 3074457345618258602; ok := ok and raisesOverflowError(num -:= -6148914691236517206);
2006    num :=  838488366986797800; ok := ok and raisesOverflowError(num -:= -8384883669867978008);
2007    num :=   10762394442070916; ok := ok and raisesOverflowError(num -:= -9212609642412704892);
2008    num :=    1988224194191587; ok := ok and raisesOverflowError(num -:= -9221383812660584221);
2009    num :=     240989001041328; ok := ok and raisesOverflowError(num -:= -9223131047853734480);
2010    num :=      14312161101687; ok := ok and raisesOverflowError(num -:= -9223357724693674121);
2011    num :=        933865493037; ok := ok and raisesOverflowError(num -:= -9223371102989282771);
2012    num :=        747094709113; ok := ok and raisesOverflowError(num -:= -9223371289760066695);
2013    num :=         74709312968; ok := ok and raisesOverflowError(num -:= -9223371962145462840);
2014    num :=          3037000499; ok := ok and raisesOverflowError(num -:= -9223372033817775309);
2015    num :=           123456791; ok := ok and raisesOverflowError(num -:= -9223372036731319017);
2016    num :=            12345653; ok := ok and raisesOverflowError(num -:= -9223372036842430155);
2017    num :=             9876553; ok := ok and raisesOverflowError(num -:= -9223372036844899255);
2018    num :=              644443; ok := ok and raisesOverflowError(num -:= -9223372036854131365);
2019    num :=               38273; ok := ok and raisesOverflowError(num -:= -9223372036854737535);
2020    num :=                4639; ok := ok and raisesOverflowError(num -:= -9223372036854771169);
2021    num :=                 857; ok := ok and raisesOverflowError(num -:= -9223372036854774951);
2022    num :=                  11; ok := ok and raisesOverflowError(num -:= -9223372036854775797);
2023    num :=                   3; ok := ok and raisesOverflowError(num -:= -9223372036854775805);
2024    num :=                   2; ok := ok and raisesOverflowError(num -:= -9223372036854775806);
2025    num :=                   1; ok := ok and raisesOverflowError(num -:= -9223372036854775807);
2026    num :=                   0; ok := ok and raisesOverflowError(num -:=            INT64_MIN);
2027    if not ok then
2028      writeln(" ***** Subtraction assignment overflow by one does not raise OVERFLOW_ERROR. (1)");
2029      okay := FALSE;
2030    end if;
2031
2032    ok := TRUE;
2033    num := 9223372036854775807; ok := ok and raisesOverflowError(num -:= intExpr(                  -1));
2034    num := 9223372036854775806; ok := ok and raisesOverflowError(num -:= intExpr(                  -2));
2035    num := 9223372036854775805; ok := ok and raisesOverflowError(num -:= intExpr(                  -3));
2036    num := 9223372036854775797; ok := ok and raisesOverflowError(num -:= intExpr(                 -11));
2037    num := 9223372036854774951; ok := ok and raisesOverflowError(num -:= intExpr(                -857));
2038    num := 9223372036854771169; ok := ok and raisesOverflowError(num -:= intExpr(               -4639));
2039    num := 9223372036854737535; ok := ok and raisesOverflowError(num -:= intExpr(              -38273));
2040    num := 9223372036854131365; ok := ok and raisesOverflowError(num -:= intExpr(             -644443));
2041    num := 9223372036844899255; ok := ok and raisesOverflowError(num -:= intExpr(            -9876553));
2042    num := 9223372036842430155; ok := ok and raisesOverflowError(num -:= intExpr(           -12345653));
2043    num := 9223372036731319017; ok := ok and raisesOverflowError(num -:= intExpr(          -123456791));
2044    num := 9223372033817775309; ok := ok and raisesOverflowError(num -:= intExpr(         -3037000499));
2045    num := 9223371962145462840; ok := ok and raisesOverflowError(num -:= intExpr(        -74709312968));
2046    num := 9223371289760066695; ok := ok and raisesOverflowError(num -:= intExpr(       -747094709113));
2047    num := 9223371102989282771; ok := ok and raisesOverflowError(num -:= intExpr(       -933865493037));
2048    num := 9223357724693674121; ok := ok and raisesOverflowError(num -:= intExpr(     -14312161101687));
2049    num := 9223131047853734480; ok := ok and raisesOverflowError(num -:= intExpr(    -240989001041328));
2050    num := 9221383812660584221; ok := ok and raisesOverflowError(num -:= intExpr(   -1988224194191587));
2051    num := 9212609642412704892; ok := ok and raisesOverflowError(num -:= intExpr(  -10762394442070916));
2052    num := 8384883669867978008; ok := ok and raisesOverflowError(num -:= intExpr( -838488366986797800));
2053    num := 6148914691236517206; ok := ok and raisesOverflowError(num -:= intExpr(-3074457345618258602));
2054    num := 3074457345618258602; ok := ok and raisesOverflowError(num -:= intExpr(-6148914691236517206));
2055    num :=  838488366986797800; ok := ok and raisesOverflowError(num -:= intExpr(-8384883669867978008));
2056    num :=   10762394442070916; ok := ok and raisesOverflowError(num -:= intExpr(-9212609642412704892));
2057    num :=    1988224194191587; ok := ok and raisesOverflowError(num -:= intExpr(-9221383812660584221));
2058    num :=     240989001041328; ok := ok and raisesOverflowError(num -:= intExpr(-9223131047853734480));
2059    num :=      14312161101687; ok := ok and raisesOverflowError(num -:= intExpr(-9223357724693674121));
2060    num :=        933865493037; ok := ok and raisesOverflowError(num -:= intExpr(-9223371102989282771));
2061    num :=        747094709113; ok := ok and raisesOverflowError(num -:= intExpr(-9223371289760066695));
2062    num :=         74709312968; ok := ok and raisesOverflowError(num -:= intExpr(-9223371962145462840));
2063    num :=          3037000499; ok := ok and raisesOverflowError(num -:= intExpr(-9223372033817775309));
2064    num :=           123456791; ok := ok and raisesOverflowError(num -:= intExpr(-9223372036731319017));
2065    num :=            12345653; ok := ok and raisesOverflowError(num -:= intExpr(-9223372036842430155));
2066    num :=             9876553; ok := ok and raisesOverflowError(num -:= intExpr(-9223372036844899255));
2067    num :=              644443; ok := ok and raisesOverflowError(num -:= intExpr(-9223372036854131365));
2068    num :=               38273; ok := ok and raisesOverflowError(num -:= intExpr(-9223372036854737535));
2069    num :=                4639; ok := ok and raisesOverflowError(num -:= intExpr(-9223372036854771169));
2070    num :=                 857; ok := ok and raisesOverflowError(num -:= intExpr(-9223372036854774951));
2071    num :=                  11; ok := ok and raisesOverflowError(num -:= intExpr(-9223372036854775797));
2072    num :=                   3; ok := ok and raisesOverflowError(num -:= intExpr(-9223372036854775805));
2073    num :=                   2; ok := ok and raisesOverflowError(num -:= intExpr(-9223372036854775806));
2074    num :=                   1; ok := ok and raisesOverflowError(num -:= intExpr(-9223372036854775807));
2075    num :=                   0; ok := ok and raisesOverflowError(num -:= intExpr(           INT64_MIN));
2076    if not ok then
2077      writeln(" ***** Subtraction assignment overflow by one does not raise OVERFLOW_ERROR. (2)");
2078      okay := FALSE;
2079    end if;
2080
2081    ok := TRUE;
2082    arr[1] := 9223372036854775807; ok := ok and raisesOverflowError(arr[1] -:=                   -1);
2083    arr[1] := 9223372036854775806; ok := ok and raisesOverflowError(arr[1] -:=                   -2);
2084    arr[1] := 9223372036854775805; ok := ok and raisesOverflowError(arr[1] -:=                   -3);
2085    arr[1] := 9223372036854775797; ok := ok and raisesOverflowError(arr[1] -:=                  -11);
2086    arr[1] := 9223372036854774951; ok := ok and raisesOverflowError(arr[1] -:=                 -857);
2087    arr[1] := 9223372036854771169; ok := ok and raisesOverflowError(arr[1] -:=                -4639);
2088    arr[1] := 9223372036854737535; ok := ok and raisesOverflowError(arr[1] -:=               -38273);
2089    arr[1] := 9223372036854131365; ok := ok and raisesOverflowError(arr[1] -:=              -644443);
2090    arr[1] := 9223372036844899255; ok := ok and raisesOverflowError(arr[1] -:=             -9876553);
2091    arr[1] := 9223372036842430155; ok := ok and raisesOverflowError(arr[1] -:=            -12345653);
2092    arr[1] := 9223372036731319017; ok := ok and raisesOverflowError(arr[1] -:=           -123456791);
2093    arr[1] := 9223372033817775309; ok := ok and raisesOverflowError(arr[1] -:=          -3037000499);
2094    arr[1] := 9223371962145462840; ok := ok and raisesOverflowError(arr[1] -:=         -74709312968);
2095    arr[1] := 9223371289760066695; ok := ok and raisesOverflowError(arr[1] -:=        -747094709113);
2096    arr[1] := 9223371102989282771; ok := ok and raisesOverflowError(arr[1] -:=        -933865493037);
2097    arr[1] := 9223357724693674121; ok := ok and raisesOverflowError(arr[1] -:=      -14312161101687);
2098    arr[1] := 9223131047853734480; ok := ok and raisesOverflowError(arr[1] -:=     -240989001041328);
2099    arr[1] := 9221383812660584221; ok := ok and raisesOverflowError(arr[1] -:=    -1988224194191587);
2100    arr[1] := 9212609642412704892; ok := ok and raisesOverflowError(arr[1] -:=   -10762394442070916);
2101    arr[1] := 8384883669867978008; ok := ok and raisesOverflowError(arr[1] -:=  -838488366986797800);
2102    arr[1] := 6148914691236517206; ok := ok and raisesOverflowError(arr[1] -:= -3074457345618258602);
2103    arr[1] := 3074457345618258602; ok := ok and raisesOverflowError(arr[1] -:= -6148914691236517206);
2104    arr[1] :=  838488366986797800; ok := ok and raisesOverflowError(arr[1] -:= -8384883669867978008);
2105    arr[1] :=   10762394442070916; ok := ok and raisesOverflowError(arr[1] -:= -9212609642412704892);
2106    arr[1] :=    1988224194191587; ok := ok and raisesOverflowError(arr[1] -:= -9221383812660584221);
2107    arr[1] :=     240989001041328; ok := ok and raisesOverflowError(arr[1] -:= -9223131047853734480);
2108    arr[1] :=      14312161101687; ok := ok and raisesOverflowError(arr[1] -:= -9223357724693674121);
2109    arr[1] :=        933865493037; ok := ok and raisesOverflowError(arr[1] -:= -9223371102989282771);
2110    arr[1] :=        747094709113; ok := ok and raisesOverflowError(arr[1] -:= -9223371289760066695);
2111    arr[1] :=         74709312968; ok := ok and raisesOverflowError(arr[1] -:= -9223371962145462840);
2112    arr[1] :=          3037000499; ok := ok and raisesOverflowError(arr[1] -:= -9223372033817775309);
2113    arr[1] :=           123456791; ok := ok and raisesOverflowError(arr[1] -:= -9223372036731319017);
2114    arr[1] :=            12345653; ok := ok and raisesOverflowError(arr[1] -:= -9223372036842430155);
2115    arr[1] :=             9876553; ok := ok and raisesOverflowError(arr[1] -:= -9223372036844899255);
2116    arr[1] :=              644443; ok := ok and raisesOverflowError(arr[1] -:= -9223372036854131365);
2117    arr[1] :=               38273; ok := ok and raisesOverflowError(arr[1] -:= -9223372036854737535);
2118    arr[1] :=                4639; ok := ok and raisesOverflowError(arr[1] -:= -9223372036854771169);
2119    arr[1] :=                 857; ok := ok and raisesOverflowError(arr[1] -:= -9223372036854774951);
2120    arr[1] :=                  11; ok := ok and raisesOverflowError(arr[1] -:= -9223372036854775797);
2121    arr[1] :=                   3; ok := ok and raisesOverflowError(arr[1] -:= -9223372036854775805);
2122    arr[1] :=                   2; ok := ok and raisesOverflowError(arr[1] -:= -9223372036854775806);
2123    arr[1] :=                   1; ok := ok and raisesOverflowError(arr[1] -:= -9223372036854775807);
2124    arr[1] :=                   0; ok := ok and raisesOverflowError(arr[1] -:=            INT64_MIN);
2125    if not ok then
2126      writeln(" ***** Subtraction assignment overflow by one does not raise OVERFLOW_ERROR. (3)");
2127      okay := FALSE;
2128    end if;
2129
2130    ok := TRUE;
2131    arr[1] := 9223372036854775807; ok := ok and raisesOverflowError(arr[1] -:= intExpr(                  -1));
2132    arr[1] := 9223372036854775806; ok := ok and raisesOverflowError(arr[1] -:= intExpr(                  -2));
2133    arr[1] := 9223372036854775805; ok := ok and raisesOverflowError(arr[1] -:= intExpr(                  -3));
2134    arr[1] := 9223372036854775797; ok := ok and raisesOverflowError(arr[1] -:= intExpr(                 -11));
2135    arr[1] := 9223372036854774951; ok := ok and raisesOverflowError(arr[1] -:= intExpr(                -857));
2136    arr[1] := 9223372036854771169; ok := ok and raisesOverflowError(arr[1] -:= intExpr(               -4639));
2137    arr[1] := 9223372036854737535; ok := ok and raisesOverflowError(arr[1] -:= intExpr(              -38273));
2138    arr[1] := 9223372036854131365; ok := ok and raisesOverflowError(arr[1] -:= intExpr(             -644443));
2139    arr[1] := 9223372036844899255; ok := ok and raisesOverflowError(arr[1] -:= intExpr(            -9876553));
2140    arr[1] := 9223372036842430155; ok := ok and raisesOverflowError(arr[1] -:= intExpr(           -12345653));
2141    arr[1] := 9223372036731319017; ok := ok and raisesOverflowError(arr[1] -:= intExpr(          -123456791));
2142    arr[1] := 9223372033817775309; ok := ok and raisesOverflowError(arr[1] -:= intExpr(         -3037000499));
2143    arr[1] := 9223371962145462840; ok := ok and raisesOverflowError(arr[1] -:= intExpr(        -74709312968));
2144    arr[1] := 9223371289760066695; ok := ok and raisesOverflowError(arr[1] -:= intExpr(       -747094709113));
2145    arr[1] := 9223371102989282771; ok := ok and raisesOverflowError(arr[1] -:= intExpr(       -933865493037));
2146    arr[1] := 9223357724693674121; ok := ok and raisesOverflowError(arr[1] -:= intExpr(     -14312161101687));
2147    arr[1] := 9223131047853734480; ok := ok and raisesOverflowError(arr[1] -:= intExpr(    -240989001041328));
2148    arr[1] := 9221383812660584221; ok := ok and raisesOverflowError(arr[1] -:= intExpr(   -1988224194191587));
2149    arr[1] := 9212609642412704892; ok := ok and raisesOverflowError(arr[1] -:= intExpr(  -10762394442070916));
2150    arr[1] := 8384883669867978008; ok := ok and raisesOverflowError(arr[1] -:= intExpr( -838488366986797800));
2151    arr[1] := 6148914691236517206; ok := ok and raisesOverflowError(arr[1] -:= intExpr(-3074457345618258602));
2152    arr[1] := 3074457345618258602; ok := ok and raisesOverflowError(arr[1] -:= intExpr(-6148914691236517206));
2153    arr[1] :=  838488366986797800; ok := ok and raisesOverflowError(arr[1] -:= intExpr(-8384883669867978008));
2154    arr[1] :=   10762394442070916; ok := ok and raisesOverflowError(arr[1] -:= intExpr(-9212609642412704892));
2155    arr[1] :=    1988224194191587; ok := ok and raisesOverflowError(arr[1] -:= intExpr(-9221383812660584221));
2156    arr[1] :=     240989001041328; ok := ok and raisesOverflowError(arr[1] -:= intExpr(-9223131047853734480));
2157    arr[1] :=      14312161101687; ok := ok and raisesOverflowError(arr[1] -:= intExpr(-9223357724693674121));
2158    arr[1] :=        933865493037; ok := ok and raisesOverflowError(arr[1] -:= intExpr(-9223371102989282771));
2159    arr[1] :=        747094709113; ok := ok and raisesOverflowError(arr[1] -:= intExpr(-9223371289760066695));
2160    arr[1] :=         74709312968; ok := ok and raisesOverflowError(arr[1] -:= intExpr(-9223371962145462840));
2161    arr[1] :=          3037000499; ok := ok and raisesOverflowError(arr[1] -:= intExpr(-9223372033817775309));
2162    arr[1] :=           123456791; ok := ok and raisesOverflowError(arr[1] -:= intExpr(-9223372036731319017));
2163    arr[1] :=            12345653; ok := ok and raisesOverflowError(arr[1] -:= intExpr(-9223372036842430155));
2164    arr[1] :=             9876553; ok := ok and raisesOverflowError(arr[1] -:= intExpr(-9223372036844899255));
2165    arr[1] :=              644443; ok := ok and raisesOverflowError(arr[1] -:= intExpr(-9223372036854131365));
2166    arr[1] :=               38273; ok := ok and raisesOverflowError(arr[1] -:= intExpr(-9223372036854737535));
2167    arr[1] :=                4639; ok := ok and raisesOverflowError(arr[1] -:= intExpr(-9223372036854771169));
2168    arr[1] :=                 857; ok := ok and raisesOverflowError(arr[1] -:= intExpr(-9223372036854774951));
2169    arr[1] :=                  11; ok := ok and raisesOverflowError(arr[1] -:= intExpr(-9223372036854775797));
2170    arr[1] :=                   3; ok := ok and raisesOverflowError(arr[1] -:= intExpr(-9223372036854775805));
2171    arr[1] :=                   2; ok := ok and raisesOverflowError(arr[1] -:= intExpr(-9223372036854775806));
2172    arr[1] :=                   1; ok := ok and raisesOverflowError(arr[1] -:= intExpr(-9223372036854775807));
2173    arr[1] :=                   0; ok := ok and raisesOverflowError(arr[1] -:= intExpr(           INT64_MIN));
2174    if not ok then
2175      writeln(" ***** Subtraction assignment overflow by one does not raise OVERFLOW_ERROR. (4)");
2176      okay := FALSE;
2177    end if;
2178
2179    ok := TRUE;
2180    num :=            INT64_MIN; ok := ok and raisesOverflowError(num -:= 9223372036854775807);
2181    num :=            INT64_MIN; ok := ok and raisesOverflowError(num -:= 9223372036854775806);
2182    num := -9223372036854775807; ok := ok and raisesOverflowError(num -:= 9223372036854775807);
2183    num := -9223372036854775807; ok := ok and raisesOverflowError(num -:= 9223372036854775806);
2184    num :=            INT64_MIN; ok := ok and raisesOverflowError(num -:= intExpr(9223372036854775807));
2185    num :=            INT64_MIN; ok := ok and raisesOverflowError(num -:= intExpr(9223372036854775806));
2186    num := -9223372036854775807; ok := ok and raisesOverflowError(num -:= intExpr(9223372036854775807));
2187    num := -9223372036854775807; ok := ok and raisesOverflowError(num -:= intExpr(9223372036854775806));
2188    arr[1] :=            INT64_MIN; ok := ok and raisesOverflowError(arr[1] -:= 9223372036854775807);
2189    arr[1] :=            INT64_MIN; ok := ok and raisesOverflowError(arr[1] -:= 9223372036854775806);
2190    arr[1] := -9223372036854775807; ok := ok and raisesOverflowError(arr[1] -:= 9223372036854775807);
2191    arr[1] := -9223372036854775807; ok := ok and raisesOverflowError(arr[1] -:= 9223372036854775806);
2192    arr[1] :=            INT64_MIN; ok := ok and raisesOverflowError(arr[1] -:= intExpr(9223372036854775807));
2193    arr[1] :=            INT64_MIN; ok := ok and raisesOverflowError(arr[1] -:= intExpr(9223372036854775806));
2194    arr[1] := -9223372036854775807; ok := ok and raisesOverflowError(arr[1] -:= intExpr(9223372036854775807));
2195    arr[1] := -9223372036854775807; ok := ok and raisesOverflowError(arr[1] -:= intExpr(9223372036854775806));
2196    if not ok then
2197      writeln(" ***** Subtraction assignment underflow does not raise OVERFLOW_ERROR.");
2198      okay := FALSE;
2199    end if;
2200
2201    ok := TRUE;
2202    num := 9223372036854775807; ok := ok and raisesOverflowError(num -:=            INT64_MIN);
2203    num := 9223372036854775807; ok := ok and raisesOverflowError(num -:= -9223372036854775807);
2204    num := 9223372036854775806; ok := ok and raisesOverflowError(num -:=            INT64_MIN);
2205    num := 9223372036854775806; ok := ok and raisesOverflowError(num -:= -9223372036854775807);
2206    num := 9223372036854775807; ok := ok and raisesOverflowError(num -:= intExpr(           INT64_MIN));
2207    num := 9223372036854775807; ok := ok and raisesOverflowError(num -:= intExpr(-9223372036854775807));
2208    num := 9223372036854775806; ok := ok and raisesOverflowError(num -:= intExpr(           INT64_MIN));
2209    num := 9223372036854775806; ok := ok and raisesOverflowError(num -:= intExpr(-9223372036854775807));
2210    arr[1] := 9223372036854775807; ok := ok and raisesOverflowError(arr[1] -:=            INT64_MIN);
2211    arr[1] := 9223372036854775807; ok := ok and raisesOverflowError(arr[1] -:= -9223372036854775807);
2212    arr[1] := 9223372036854775806; ok := ok and raisesOverflowError(arr[1] -:=            INT64_MIN);
2213    arr[1] := 9223372036854775806; ok := ok and raisesOverflowError(arr[1] -:= -9223372036854775807);
2214    arr[1] := 9223372036854775807; ok := ok and raisesOverflowError(arr[1] -:= intExpr(           INT64_MIN));
2215    arr[1] := 9223372036854775807; ok := ok and raisesOverflowError(arr[1] -:= intExpr(-9223372036854775807));
2216    arr[1] := 9223372036854775806; ok := ok and raisesOverflowError(arr[1] -:= intExpr(           INT64_MIN));
2217    arr[1] := 9223372036854775806; ok := ok and raisesOverflowError(arr[1] -:= intExpr(-9223372036854775807));
2218    if not ok then
2219      writeln(" ***** Subtraction assignment overflow does not raise OVERFLOW_ERROR.");
2220      okay := FALSE;
2221    end if;
2222
2223    if okay then
2224      writeln("Overflow checking of subtraction assignment works correct.");
2225    else
2226      writeln(" ***** Overflow checking of subtraction assignment does not work correct.");
2227    end if;
2228  end func;
2229
2230
2231const proc: check_succ is func
2232  local
2233    var boolean: okay is TRUE;
2234  begin
2235    if  not raisesOverflowError(succ(9223372036854775807)) or
2236        not raisesOverflowError(succ(intExpr(9223372036854775807))) then
2237      writeln(" ***** Succ overflow does not raise OVERFLOW_ERROR.");
2238      okay := FALSE;
2239    end if;
2240
2241    if okay then
2242      writeln("Overflow checking of succ works correct.");
2243    else
2244      writeln(" ***** Overflow checking of succ does not work correct.");
2245    end if;
2246  end func;
2247
2248
2249const proc: check_pred is func
2250  local
2251    var boolean: okay is TRUE;
2252  begin
2253    if  not raisesOverflowError(pred(INT64_MIN)) or
2254        not raisesOverflowError(pred(intExpr(INT64_MIN))) then
2255      writeln(" ***** Pred overflow does not raise OVERFLOW_ERROR.");
2256      okay := FALSE;
2257    end if;
2258
2259    if okay then
2260      writeln("Overflow checking of pred works correct.");
2261    else
2262      writeln(" ***** Overflow checking of pred does not work correct.");
2263    end if;
2264  end func;
2265
2266
2267const proc: check_incr is func
2268  local
2269    var integer: num is 0;
2270    var array integer: arr is [] (0);
2271    var boolean: okay is TRUE;
2272  begin
2273    num := 9223372036854775807; okay := okay and raisesOverflowError(incr(num));
2274    arr[1] := 9223372036854775807; okay := okay and raisesOverflowError(incr(arr[1]));
2275
2276    if okay then
2277      writeln("Overflow checking of incr works correct.");
2278    else
2279      writeln(" ***** Overflow checking of incr does not work correct.");
2280    end if;
2281  end func;
2282
2283
2284const proc: check_decr is func
2285  local
2286    var integer: num is 0;
2287    var array integer: arr is [] (0);
2288    var boolean: okay is TRUE;
2289  begin
2290    num := INT64_MIN; okay := okay and raisesOverflowError(decr(num));
2291    arr[1] := INT64_MIN; okay := okay and raisesOverflowError(decr(arr[1]));
2292
2293    if okay then
2294      writeln("Overflow checking of decr works correct.");
2295    else
2296      writeln(" ***** Overflow checking of decr does not work correct.");
2297    end if;
2298  end func;
2299
2300
2301(**
2302 *  Tests for the compiler optimization to reduce overflow checking
2303 *  for multiplication.
2304 *)
2305const func boolean: check_reduced_overflow_checking_for_mult is func
2306  result
2307    var boolean: okay is TRUE;
2308  begin
2309    if  not raisesOverflowError(intExpr( integer.last) div        -integer.last *        integer.first) or
2310        not raisesOverflowError(intExpr( integer.last) div -4611686018427387905 *        integer.first) or
2311        not raisesOverflowError(intExpr( integer.last) div -3074457345618258602 * -3074457345618258603) or
2312        not raisesOverflowError(intExpr( integer.last) div -1317624576693539401 * -1317624576693539402) or
2313        not raisesOverflowError(intExpr( integer.last) div         -60247241209 *         -60247241210) or
2314        not raisesOverflowError(intExpr( integer.last) div         -34359738369 *         -34359738497) or
2315        not raisesOverflowError(intExpr( integer.last) div          -1234567890 *          -1234567891) or
2316        not raisesOverflowError(intExpr( integer.last) div                   -7 *                   -8) or
2317        not raisesOverflowError(intExpr( integer.last) div                   -3 *                   -4) or
2318        not raisesOverflowError(intExpr(integer.first) div                    2 *                   -2) or
2319        not raisesOverflowError(intExpr(integer.first) div                    3 *                   -4) or
2320        not raisesOverflowError(intExpr(integer.first) div                    7 *                   -8) or
2321        not raisesOverflowError(intExpr(integer.first) div           1234567890 *          -1234567891) or
2322        not raisesOverflowError(intExpr(integer.first) div          34359738368 *         -34359738368) or
2323        not raisesOverflowError(intExpr(integer.first) div          34359738369 *         -34359738497) or
2324        not raisesOverflowError(intExpr(integer.first) div          60247241209 *         -60247241210) or
2325        not raisesOverflowError(intExpr(integer.first) div  1317624576693539401 * -1317624576693539402) or
2326        not raisesOverflowError(intExpr(integer.first) div  4611686018427387904 * -4611686018427387904) or
2327        not raisesOverflowError(intExpr(integer.first) div  9223372036854775806 *        integer.first) or
2328        not raisesOverflowError(intExpr(integer.first) div         integer.last *        integer.first) then
2329      writeln(" ***** Reduced overflow check for mult failed: Minimum division result if the divisor is known. (1)");
2330      okay := FALSE;
2331    end if;
2332
2333    if  not raisesOverflowError(intExpr( integer.last) div -3074457345618258602 *  3074457345618258603) or
2334        not raisesOverflowError(intExpr( integer.last) div -1317624576693539401 *  1317624576693539402) or
2335        not raisesOverflowError(intExpr( integer.last) div         -60247241209 *          60247241210) or
2336        not raisesOverflowError(intExpr( integer.last) div         -34359738369 *          34359738497) or
2337        not raisesOverflowError(intExpr( integer.last) div          -1234567890 *           1234567891) or
2338        not raisesOverflowError(intExpr( integer.last) div                   -7 *                    8) or
2339        not raisesOverflowError(intExpr( integer.last) div                   -3 *                    4) or
2340        not raisesOverflowError(intExpr(integer.first) div                    2 *                    3) or
2341        not raisesOverflowError(intExpr(integer.first) div                    3 *                    4) or
2342        not raisesOverflowError(intExpr(integer.first) div                    7 *                    8) or
2343        not raisesOverflowError(intExpr(integer.first) div           1234567890 *           1234567891) or
2344        not raisesOverflowError(intExpr(integer.first) div          34359738368 *          34359738369) or
2345        not raisesOverflowError(intExpr(integer.first) div          34359738369 *          34359738497) or
2346        not raisesOverflowError(intExpr(integer.first) div          60247241209 *          60247241210) or
2347        not raisesOverflowError(intExpr(integer.first) div  1317624576693539401 *  1317624576693539402) or
2348        not raisesOverflowError(intExpr(integer.first) div  4611686018427387904 *  4611686018427387905) then
2349      writeln(" ***** Reduced overflow check for mult failed: Minimum division result if the divisor is known. (2)");
2350      okay := FALSE;
2351    end if;
2352
2353    if      raisesOverflowError(intExpr(integer.first) div -4611686018427387904 * -4611686018427387904) or
2354        not raisesOverflowError(intExpr(integer.first) div -4611686018427387904 * -4611686018427387905) or
2355        not raisesOverflowError(intExpr(integer.first) div -1317624576693539401 * -1317624576693539402) or
2356        not raisesOverflowError(intExpr(integer.first) div         -60247241209 *         -60247241210) or
2357        not raisesOverflowError(intExpr(integer.first) div         -34359738369 *         -34359738497) or
2358            raisesOverflowError(intExpr(integer.first) div         -34359738368 *         -34359738368) or
2359        not raisesOverflowError(intExpr(integer.first) div         -34359738368 *         -34359738369) or
2360        not raisesOverflowError(intExpr(integer.first) div          -1234567890 *          -1234567891) or
2361        not raisesOverflowError(intExpr(integer.first) div                   -7 *                   -8) or
2362            raisesOverflowError(intExpr(integer.first) div                   -3 *                   -3) or
2363        not raisesOverflowError(intExpr(integer.first) div                   -3 *                   -4) or
2364            raisesOverflowError(intExpr(integer.first) div                   -2 *                   -2) or
2365        not raisesOverflowError(intExpr(integer.first) div                   -2 *                   -3) or
2366        not raisesOverflowError(intExpr( integer.last) div                    3 *                   -4) or
2367        not raisesOverflowError(intExpr( integer.last) div                    7 *                   -8) or
2368        not raisesOverflowError(intExpr( integer.last) div           1234567890 *          -1234567891) or
2369            raisesOverflowError(intExpr( integer.last) div          34359738367 *         -34359738368) or
2370        not raisesOverflowError(intExpr( integer.last) div          34359738367 *         -34359738369) or
2371        not raisesOverflowError(intExpr( integer.last) div          60247241209 *         -60247241210) or
2372        not raisesOverflowError(intExpr( integer.last) div  1317624576693539401 * -1317624576693539402) or
2373            raisesOverflowError(intExpr( integer.last) div  4611686018427387903 * -4611686018427387904) or
2374        not raisesOverflowError(intExpr( integer.last) div  4611686018427387903 * -4611686018427387905) then
2375      writeln(" ***** Reduced overflow check for mult failed: Maximum division result if the divisor is known. (1)");
2376      okay := FALSE;
2377    end if;
2378
2379    if  not raisesOverflowError(intExpr(integer.first) div -4611686018427387904 *  4611686018427387904) or
2380        not raisesOverflowError(intExpr(integer.first) div -1317624576693539401 *  1317624576693539402) or
2381        not raisesOverflowError(intExpr(integer.first) div         -60247241209 *          60247241210) or
2382        not raisesOverflowError(intExpr(integer.first) div         -34359738369 *          34359738497) or
2383        not raisesOverflowError(intExpr(integer.first) div         -34359738368 *          34359738368) or
2384        not raisesOverflowError(intExpr(integer.first) div          -1234567890 *           1234567891) or
2385        not raisesOverflowError(intExpr(integer.first) div                   -7 *                    8) or
2386            raisesOverflowError(intExpr(integer.first) div                   -3 *                    3) or
2387        not raisesOverflowError(intExpr(integer.first) div                   -3 *                    4) or
2388        not raisesOverflowError(intExpr(integer.first) div                   -2 *                    2) or
2389        not raisesOverflowError(intExpr( integer.last) div                    1 *                    2) or
2390        not raisesOverflowError(intExpr( integer.last) div                    2 *                    3) or
2391        not raisesOverflowError(intExpr( integer.last) div                    3 *                    4) or
2392        not raisesOverflowError(intExpr( integer.last) div                    7 *                    8) or
2393        not raisesOverflowError(intExpr( integer.last) div           1234567890 *           1234567891) or
2394        not raisesOverflowError(intExpr( integer.last) div          34359738367 *          34359738368) or
2395        not raisesOverflowError(intExpr( integer.last) div          34359738368 *          34359738497) or
2396        not raisesOverflowError(intExpr( integer.last) div          60247241209 *          60247241210) or
2397        not raisesOverflowError(intExpr( integer.last) div  1317624576693539401 *  1317624576693539402) or
2398            raisesOverflowError(intExpr( integer.last) div  4611686018427387903 *  4611686018427387903) or
2399        not raisesOverflowError(intExpr( integer.last) div  4611686018427387903 *  4611686018427387904) then
2400      writeln(" ***** Reduced overflow check for mult failed: Maximum division result if the divisor is known. (2)");
2401      okay := FALSE;
2402    end if;
2403  end func;
2404
2405
2406const proc: check_mult is func
2407  local
2408    var boolean: okay is TRUE;
2409  begin
2410    if  not raisesOverflowError(-4611686018427387905 *                    2) or
2411        not raisesOverflowError(-4611686018427387904 *                    3) or
2412        not raisesOverflowError(-3074457345618258603 *                    3) or
2413        not raisesOverflowError(-3074457345618258602 *                    4) or
2414        not raisesOverflowError( -838488366986797801 *                   11) or
2415        not raisesOverflowError( -838488366986797800 *                   12) or
2416        not raisesOverflowError(  -10762394442070917 *                  857) or
2417        not raisesOverflowError(  -10762394442070916 *                  858) or
2418        not raisesOverflowError(   -1988224194191588 *                 4639) or
2419        not raisesOverflowError(   -1988224194191587 *                 4640) or
2420        not raisesOverflowError(    -240989001041329 *                38273) or
2421        not raisesOverflowError(    -240989001041328 *                38274) or
2422        not raisesOverflowError(     -14312161101688 *               644443) or
2423        not raisesOverflowError(     -14312161101687 *               644444) or
2424        not raisesOverflowError(       -933865493038 *              9876553) or
2425        not raisesOverflowError(       -933865493037 *              9876554) or
2426        not raisesOverflowError(       -747094709114 *             12345653) or
2427        not raisesOverflowError(       -747094709113 *             12345654) or
2428        not raisesOverflowError(        -74709312969 *            123456791) or
2429        not raisesOverflowError(        -74709312968 *            123456792) or
2430        not raisesOverflowError(         -3037000500 *           3037000500) or
2431        not raisesOverflowError(          -123456792 *          74709312968) or
2432        not raisesOverflowError(          -123456791 *          74709312969) or
2433        not raisesOverflowError(           -12345654 *         747094709113) or
2434        not raisesOverflowError(           -12345653 *         747094709114) or
2435        not raisesOverflowError(            -9876554 *         933865493037) or
2436        not raisesOverflowError(            -9876553 *         933865493038) or
2437        not raisesOverflowError(             -644444 *       14312161101687) or
2438        not raisesOverflowError(             -644443 *       14312161101688) or
2439        not raisesOverflowError(              -38274 *      240989001041328) or
2440        not raisesOverflowError(              -38273 *      240989001041329) or
2441        not raisesOverflowError(               -4640 *     1988224194191587) or
2442        not raisesOverflowError(               -4639 *     1988224194191588) or
2443        not raisesOverflowError(                -858 *    10762394442070916) or
2444        not raisesOverflowError(                -857 *    10762394442070917) or
2445        not raisesOverflowError(                 -12 *   838488366986797800) or
2446        not raisesOverflowError(                 -11 *   838488366986797801) or
2447        not raisesOverflowError(                  -4 *  3074457345618258602) or
2448        not raisesOverflowError(                  -3 *  3074457345618258603) or
2449        not raisesOverflowError(                  -3 *  4611686018427387904) or
2450        not raisesOverflowError(                  -2 *  4611686018427387905) or
2451        not raisesOverflowError( 4611686018427387905 *                   -2) or
2452        not raisesOverflowError( 4611686018427387904 *                   -3) or
2453        not raisesOverflowError( 3074457345618258603 *                   -3) or
2454        not raisesOverflowError( 3074457345618258602 *                   -4) or
2455        not raisesOverflowError(  838488366986797801 *                  -11) or
2456        not raisesOverflowError(  838488366986797800 *                  -12) or
2457        not raisesOverflowError(   10762394442070917 *                 -857) or
2458        not raisesOverflowError(   10762394442070916 *                 -858) or
2459        not raisesOverflowError(    1988224194191588 *                -4639) or
2460        not raisesOverflowError(    1988224194191587 *                -4640) or
2461        not raisesOverflowError(     240989001041329 *               -38273) or
2462        not raisesOverflowError(     240989001041328 *               -38274) or
2463        not raisesOverflowError(      14312161101688 *              -644443) or
2464        not raisesOverflowError(      14312161101687 *              -644444) or
2465        not raisesOverflowError(        933865493038 *             -9876553) or
2466        not raisesOverflowError(        933865493037 *             -9876554) or
2467        not raisesOverflowError(        747094709114 *            -12345653) or
2468        not raisesOverflowError(        747094709113 *            -12345654) or
2469        not raisesOverflowError(         74709312969 *           -123456791) or
2470        not raisesOverflowError(         74709312968 *           -123456792) or
2471        not raisesOverflowError(          3037000500 *          -3037000500) or
2472        not raisesOverflowError(           123456792 *         -74709312968) or
2473        not raisesOverflowError(           123456791 *         -74709312969) or
2474        not raisesOverflowError(            12345654 *        -747094709113) or
2475        not raisesOverflowError(            12345653 *        -747094709114) or
2476        not raisesOverflowError(             9876554 *        -933865493037) or
2477        not raisesOverflowError(             9876553 *        -933865493038) or
2478        not raisesOverflowError(              644444 *      -14312161101687) or
2479        not raisesOverflowError(              644443 *      -14312161101688) or
2480        not raisesOverflowError(               38274 *     -240989001041328) or
2481        not raisesOverflowError(               38273 *     -240989001041329) or
2482        not raisesOverflowError(                4640 *    -1988224194191587) or
2483        not raisesOverflowError(                4639 *    -1988224194191588) or
2484        not raisesOverflowError(                 858 *   -10762394442070916) or
2485        not raisesOverflowError(                 857 *   -10762394442070917) or
2486        not raisesOverflowError(                  12 *  -838488366986797800) or
2487        not raisesOverflowError(                  11 *  -838488366986797801) or
2488        not raisesOverflowError(                   4 * -3074457345618258602) or
2489        not raisesOverflowError(                   3 * -3074457345618258603) or
2490        not raisesOverflowError(                   3 * -4611686018427387904) or
2491        not raisesOverflowError(                   2 * -4611686018427387905) then
2492      writeln(" ***** Underflow when computing multiplication does not raise OVERFLOW_ERROR. (1)");
2493      okay := FALSE;
2494    end if;
2495
2496    if  not raisesOverflowError(intExpr(-4611686018427387905) *                    2) or
2497        not raisesOverflowError(intExpr(-4611686018427387904) *                    3) or
2498        not raisesOverflowError(intExpr(-3074457345618258603) *                    3) or
2499        not raisesOverflowError(intExpr(-3074457345618258602) *                    4) or
2500        not raisesOverflowError(intExpr( -838488366986797801) *                   11) or
2501        not raisesOverflowError(intExpr( -838488366986797800) *                   12) or
2502        not raisesOverflowError(intExpr(  -10762394442070917) *                  857) or
2503        not raisesOverflowError(intExpr(  -10762394442070916) *                  858) or
2504        not raisesOverflowError(intExpr(   -1988224194191588) *                 4639) or
2505        not raisesOverflowError(intExpr(   -1988224194191587) *                 4640) or
2506        not raisesOverflowError(intExpr(    -240989001041329) *                38273) or
2507        not raisesOverflowError(intExpr(    -240989001041328) *                38274) or
2508        not raisesOverflowError(intExpr(     -14312161101688) *               644443) or
2509        not raisesOverflowError(intExpr(     -14312161101687) *               644444) or
2510        not raisesOverflowError(intExpr(       -933865493038) *              9876553) or
2511        not raisesOverflowError(intExpr(       -933865493037) *              9876554) or
2512        not raisesOverflowError(intExpr(       -747094709114) *             12345653) or
2513        not raisesOverflowError(intExpr(       -747094709113) *             12345654) or
2514        not raisesOverflowError(intExpr(        -74709312969) *            123456791) or
2515        not raisesOverflowError(intExpr(        -74709312968) *            123456792) or
2516        not raisesOverflowError(intExpr(         -3037000500) *           3037000500) or
2517        not raisesOverflowError(intExpr(          -123456792) *          74709312968) or
2518        not raisesOverflowError(intExpr(          -123456791) *          74709312969) or
2519        not raisesOverflowError(intExpr(           -12345654) *         747094709113) or
2520        not raisesOverflowError(intExpr(           -12345653) *         747094709114) or
2521        not raisesOverflowError(intExpr(            -9876554) *         933865493037) or
2522        not raisesOverflowError(intExpr(            -9876553) *         933865493038) or
2523        not raisesOverflowError(intExpr(             -644444) *       14312161101687) or
2524        not raisesOverflowError(intExpr(             -644443) *       14312161101688) or
2525        not raisesOverflowError(intExpr(              -38274) *      240989001041328) or
2526        not raisesOverflowError(intExpr(              -38273) *      240989001041329) or
2527        not raisesOverflowError(intExpr(               -4640) *     1988224194191587) or
2528        not raisesOverflowError(intExpr(               -4639) *     1988224194191588) or
2529        not raisesOverflowError(intExpr(                -858) *    10762394442070916) or
2530        not raisesOverflowError(intExpr(                -857) *    10762394442070917) or
2531        not raisesOverflowError(intExpr(                 -12) *   838488366986797800) or
2532        not raisesOverflowError(intExpr(                 -11) *   838488366986797801) or
2533        not raisesOverflowError(intExpr(                  -4) *  3074457345618258602) or
2534        not raisesOverflowError(intExpr(                  -3) *  3074457345618258603) or
2535        not raisesOverflowError(intExpr(                  -3) *  4611686018427387904) or
2536        not raisesOverflowError(intExpr(                  -2) *  4611686018427387905) or
2537        not raisesOverflowError(intExpr( 4611686018427387905) *                   -2) or
2538        not raisesOverflowError(intExpr( 4611686018427387904) *                   -3) or
2539        not raisesOverflowError(intExpr( 3074457345618258603) *                   -3) or
2540        not raisesOverflowError(intExpr( 3074457345618258602) *                   -4) or
2541        not raisesOverflowError(intExpr(  838488366986797801) *                  -11) or
2542        not raisesOverflowError(intExpr(  838488366986797800) *                  -12) or
2543        not raisesOverflowError(intExpr(   10762394442070917) *                 -857) or
2544        not raisesOverflowError(intExpr(   10762394442070916) *                 -858) or
2545        not raisesOverflowError(intExpr(    1988224194191588) *                -4639) or
2546        not raisesOverflowError(intExpr(    1988224194191587) *                -4640) or
2547        not raisesOverflowError(intExpr(     240989001041329) *               -38273) or
2548        not raisesOverflowError(intExpr(     240989001041328) *               -38274) or
2549        not raisesOverflowError(intExpr(      14312161101688) *              -644443) or
2550        not raisesOverflowError(intExpr(      14312161101687) *              -644444) or
2551        not raisesOverflowError(intExpr(        933865493038) *             -9876553) or
2552        not raisesOverflowError(intExpr(        933865493037) *             -9876554) or
2553        not raisesOverflowError(intExpr(        747094709114) *            -12345653) or
2554        not raisesOverflowError(intExpr(        747094709113) *            -12345654) or
2555        not raisesOverflowError(intExpr(         74709312969) *           -123456791) or
2556        not raisesOverflowError(intExpr(         74709312968) *           -123456792) or
2557        not raisesOverflowError(intExpr(          3037000500) *          -3037000500) or
2558        not raisesOverflowError(intExpr(           123456792) *         -74709312968) or
2559        not raisesOverflowError(intExpr(           123456791) *         -74709312969) or
2560        not raisesOverflowError(intExpr(            12345654) *        -747094709113) or
2561        not raisesOverflowError(intExpr(            12345653) *        -747094709114) or
2562        not raisesOverflowError(intExpr(             9876554) *        -933865493037) or
2563        not raisesOverflowError(intExpr(             9876553) *        -933865493038) or
2564        not raisesOverflowError(intExpr(              644444) *      -14312161101687) or
2565        not raisesOverflowError(intExpr(              644443) *      -14312161101688) or
2566        not raisesOverflowError(intExpr(               38274) *     -240989001041328) or
2567        not raisesOverflowError(intExpr(               38273) *     -240989001041329) or
2568        not raisesOverflowError(intExpr(                4640) *    -1988224194191587) or
2569        not raisesOverflowError(intExpr(                4639) *    -1988224194191588) or
2570        not raisesOverflowError(intExpr(                 858) *   -10762394442070916) or
2571        not raisesOverflowError(intExpr(                 857) *   -10762394442070917) or
2572        not raisesOverflowError(intExpr(                  12) *  -838488366986797800) or
2573        not raisesOverflowError(intExpr(                  11) *  -838488366986797801) or
2574        not raisesOverflowError(intExpr(                   4) * -3074457345618258602) or
2575        not raisesOverflowError(intExpr(                   3) * -3074457345618258603) or
2576        not raisesOverflowError(intExpr(                   3) * -4611686018427387904) or
2577        not raisesOverflowError(intExpr(                   2) * -4611686018427387905) then
2578      writeln(" ***** Underflow when computing multiplication does not raise OVERFLOW_ERROR. (2)");
2579      okay := FALSE;
2580    end if;
2581
2582    if  not raisesOverflowError(-4611686018427387905 * intExpr(                   2)) or
2583        not raisesOverflowError(-4611686018427387904 * intExpr(                   3)) or
2584        not raisesOverflowError(-3074457345618258603 * intExpr(                   3)) or
2585        not raisesOverflowError(-3074457345618258602 * intExpr(                   4)) or
2586        not raisesOverflowError( -838488366986797801 * intExpr(                  11)) or
2587        not raisesOverflowError( -838488366986797800 * intExpr(                  12)) or
2588        not raisesOverflowError(  -10762394442070917 * intExpr(                 857)) or
2589        not raisesOverflowError(  -10762394442070916 * intExpr(                 858)) or
2590        not raisesOverflowError(   -1988224194191588 * intExpr(                4639)) or
2591        not raisesOverflowError(   -1988224194191587 * intExpr(                4640)) or
2592        not raisesOverflowError(    -240989001041329 * intExpr(               38273)) or
2593        not raisesOverflowError(    -240989001041328 * intExpr(               38274)) or
2594        not raisesOverflowError(     -14312161101688 * intExpr(              644443)) or
2595        not raisesOverflowError(     -14312161101687 * intExpr(              644444)) or
2596        not raisesOverflowError(       -933865493038 * intExpr(             9876553)) or
2597        not raisesOverflowError(       -933865493037 * intExpr(             9876554)) or
2598        not raisesOverflowError(       -747094709114 * intExpr(            12345653)) or
2599        not raisesOverflowError(       -747094709113 * intExpr(            12345654)) or
2600        not raisesOverflowError(        -74709312969 * intExpr(           123456791)) or
2601        not raisesOverflowError(        -74709312968 * intExpr(           123456792)) or
2602        not raisesOverflowError(         -3037000500 * intExpr(          3037000500)) or
2603        not raisesOverflowError(          -123456792 * intExpr(         74709312968)) or
2604        not raisesOverflowError(          -123456791 * intExpr(         74709312969)) or
2605        not raisesOverflowError(           -12345654 * intExpr(        747094709113)) or
2606        not raisesOverflowError(           -12345653 * intExpr(        747094709114)) or
2607        not raisesOverflowError(            -9876554 * intExpr(        933865493037)) or
2608        not raisesOverflowError(            -9876553 * intExpr(        933865493038)) or
2609        not raisesOverflowError(             -644444 * intExpr(      14312161101687)) or
2610        not raisesOverflowError(             -644443 * intExpr(      14312161101688)) or
2611        not raisesOverflowError(              -38274 * intExpr(     240989001041328)) or
2612        not raisesOverflowError(              -38273 * intExpr(     240989001041329)) or
2613        not raisesOverflowError(               -4640 * intExpr(    1988224194191587)) or
2614        not raisesOverflowError(               -4639 * intExpr(    1988224194191588)) or
2615        not raisesOverflowError(                -858 * intExpr(   10762394442070916)) or
2616        not raisesOverflowError(                -857 * intExpr(   10762394442070917)) or
2617        not raisesOverflowError(                 -12 * intExpr(  838488366986797800)) or
2618        not raisesOverflowError(                 -11 * intExpr(  838488366986797801)) or
2619        not raisesOverflowError(                  -4 * intExpr( 3074457345618258602)) or
2620        not raisesOverflowError(                  -3 * intExpr( 3074457345618258603)) or
2621        not raisesOverflowError(                  -3 * intExpr( 4611686018427387904)) or
2622        not raisesOverflowError(                  -2 * intExpr( 4611686018427387905)) or
2623        not raisesOverflowError( 4611686018427387905 * intExpr(                  -2)) or
2624        not raisesOverflowError( 4611686018427387904 * intExpr(                  -3)) or
2625        not raisesOverflowError( 3074457345618258603 * intExpr(                  -3)) or
2626        not raisesOverflowError( 3074457345618258602 * intExpr(                  -4)) or
2627        not raisesOverflowError(  838488366986797801 * intExpr(                 -11)) or
2628        not raisesOverflowError(  838488366986797800 * intExpr(                 -12)) or
2629        not raisesOverflowError(   10762394442070917 * intExpr(                -857)) or
2630        not raisesOverflowError(   10762394442070916 * intExpr(                -858)) or
2631        not raisesOverflowError(    1988224194191588 * intExpr(               -4639)) or
2632        not raisesOverflowError(    1988224194191587 * intExpr(               -4640)) or
2633        not raisesOverflowError(     240989001041329 * intExpr(              -38273)) or
2634        not raisesOverflowError(     240989001041328 * intExpr(              -38274)) or
2635        not raisesOverflowError(      14312161101688 * intExpr(             -644443)) or
2636        not raisesOverflowError(      14312161101687 * intExpr(             -644444)) or
2637        not raisesOverflowError(        933865493038 * intExpr(            -9876553)) or
2638        not raisesOverflowError(        933865493037 * intExpr(            -9876554)) or
2639        not raisesOverflowError(        747094709114 * intExpr(           -12345653)) or
2640        not raisesOverflowError(        747094709113 * intExpr(           -12345654)) or
2641        not raisesOverflowError(         74709312969 * intExpr(          -123456791)) or
2642        not raisesOverflowError(         74709312968 * intExpr(          -123456792)) or
2643        not raisesOverflowError(          3037000500 * intExpr(         -3037000500)) or
2644        not raisesOverflowError(           123456792 * intExpr(        -74709312968)) or
2645        not raisesOverflowError(           123456791 * intExpr(        -74709312969)) or
2646        not raisesOverflowError(            12345654 * intExpr(       -747094709113)) or
2647        not raisesOverflowError(            12345653 * intExpr(       -747094709114)) or
2648        not raisesOverflowError(             9876554 * intExpr(       -933865493037)) or
2649        not raisesOverflowError(             9876553 * intExpr(       -933865493038)) or
2650        not raisesOverflowError(              644444 * intExpr(     -14312161101687)) or
2651        not raisesOverflowError(              644443 * intExpr(     -14312161101688)) or
2652        not raisesOverflowError(               38274 * intExpr(    -240989001041328)) or
2653        not raisesOverflowError(               38273 * intExpr(    -240989001041329)) or
2654        not raisesOverflowError(                4640 * intExpr(   -1988224194191587)) or
2655        not raisesOverflowError(                4639 * intExpr(   -1988224194191588)) or
2656        not raisesOverflowError(                 858 * intExpr(  -10762394442070916)) or
2657        not raisesOverflowError(                 857 * intExpr(  -10762394442070917)) or
2658        not raisesOverflowError(                  12 * intExpr( -838488366986797800)) or
2659        not raisesOverflowError(                  11 * intExpr( -838488366986797801)) or
2660        not raisesOverflowError(                   4 * intExpr(-3074457345618258602)) or
2661        not raisesOverflowError(                   3 * intExpr(-3074457345618258603)) or
2662        not raisesOverflowError(                   3 * intExpr(-4611686018427387904)) or
2663        not raisesOverflowError(                   2 * intExpr(-4611686018427387905)) then
2664      writeln(" ***** Underflow when computing multiplication does not raise OVERFLOW_ERROR. (3)");
2665      okay := FALSE;
2666    end if;
2667
2668    if  not raisesOverflowError(intExpr(-4611686018427387905) * intExpr(                   2)) or
2669        not raisesOverflowError(intExpr(-4611686018427387904) * intExpr(                   3)) or
2670        not raisesOverflowError(intExpr(-3074457345618258603) * intExpr(                   3)) or
2671        not raisesOverflowError(intExpr(-3074457345618258602) * intExpr(                   4)) or
2672        not raisesOverflowError(intExpr( -838488366986797801) * intExpr(                  11)) or
2673        not raisesOverflowError(intExpr( -838488366986797800) * intExpr(                  12)) or
2674        not raisesOverflowError(intExpr(  -10762394442070917) * intExpr(                 857)) or
2675        not raisesOverflowError(intExpr(  -10762394442070916) * intExpr(                 858)) or
2676        not raisesOverflowError(intExpr(   -1988224194191588) * intExpr(                4639)) or
2677        not raisesOverflowError(intExpr(   -1988224194191587) * intExpr(                4640)) or
2678        not raisesOverflowError(intExpr(    -240989001041329) * intExpr(               38273)) or
2679        not raisesOverflowError(intExpr(    -240989001041328) * intExpr(               38274)) or
2680        not raisesOverflowError(intExpr(     -14312161101688) * intExpr(              644443)) or
2681        not raisesOverflowError(intExpr(     -14312161101687) * intExpr(              644444)) or
2682        not raisesOverflowError(intExpr(       -933865493038) * intExpr(             9876553)) or
2683        not raisesOverflowError(intExpr(       -933865493037) * intExpr(             9876554)) or
2684        not raisesOverflowError(intExpr(       -747094709114) * intExpr(            12345653)) or
2685        not raisesOverflowError(intExpr(       -747094709113) * intExpr(            12345654)) or
2686        not raisesOverflowError(intExpr(        -74709312969) * intExpr(           123456791)) or
2687        not raisesOverflowError(intExpr(        -74709312968) * intExpr(           123456792)) or
2688        not raisesOverflowError(intExpr(         -3037000500) * intExpr(          3037000500)) or
2689        not raisesOverflowError(intExpr(          -123456792) * intExpr(         74709312968)) or
2690        not raisesOverflowError(intExpr(          -123456791) * intExpr(         74709312969)) or
2691        not raisesOverflowError(intExpr(           -12345654) * intExpr(        747094709113)) or
2692        not raisesOverflowError(intExpr(           -12345653) * intExpr(        747094709114)) or
2693        not raisesOverflowError(intExpr(            -9876554) * intExpr(        933865493037)) or
2694        not raisesOverflowError(intExpr(            -9876553) * intExpr(        933865493038)) or
2695        not raisesOverflowError(intExpr(             -644444) * intExpr(      14312161101687)) or
2696        not raisesOverflowError(intExpr(             -644443) * intExpr(      14312161101688)) or
2697        not raisesOverflowError(intExpr(              -38274) * intExpr(     240989001041328)) or
2698        not raisesOverflowError(intExpr(              -38273) * intExpr(     240989001041329)) or
2699        not raisesOverflowError(intExpr(               -4640) * intExpr(    1988224194191587)) or
2700        not raisesOverflowError(intExpr(               -4639) * intExpr(    1988224194191588)) or
2701        not raisesOverflowError(intExpr(                -858) * intExpr(   10762394442070916)) or
2702        not raisesOverflowError(intExpr(                -857) * intExpr(   10762394442070917)) or
2703        not raisesOverflowError(intExpr(                 -12) * intExpr(  838488366986797800)) or
2704        not raisesOverflowError(intExpr(                 -11) * intExpr(  838488366986797801)) or
2705        not raisesOverflowError(intExpr(                  -4) * intExpr( 3074457345618258602)) or
2706        not raisesOverflowError(intExpr(                  -3) * intExpr( 3074457345618258603)) or
2707        not raisesOverflowError(intExpr(                  -3) * intExpr( 4611686018427387904)) or
2708        not raisesOverflowError(intExpr(                  -2) * intExpr( 4611686018427387905)) or
2709        not raisesOverflowError(intExpr( 4611686018427387905) * intExpr(                  -2)) or
2710        not raisesOverflowError(intExpr( 4611686018427387904) * intExpr(                  -3)) or
2711        not raisesOverflowError(intExpr( 3074457345618258603) * intExpr(                  -3)) or
2712        not raisesOverflowError(intExpr( 3074457345618258602) * intExpr(                  -4)) or
2713        not raisesOverflowError(intExpr(  838488366986797801) * intExpr(                 -11)) or
2714        not raisesOverflowError(intExpr(  838488366986797800) * intExpr(                 -12)) or
2715        not raisesOverflowError(intExpr(   10762394442070917) * intExpr(                -857)) or
2716        not raisesOverflowError(intExpr(   10762394442070916) * intExpr(                -858)) or
2717        not raisesOverflowError(intExpr(    1988224194191588) * intExpr(               -4639)) or
2718        not raisesOverflowError(intExpr(    1988224194191587) * intExpr(               -4640)) or
2719        not raisesOverflowError(intExpr(     240989001041329) * intExpr(              -38273)) or
2720        not raisesOverflowError(intExpr(     240989001041328) * intExpr(              -38274)) or
2721        not raisesOverflowError(intExpr(      14312161101688) * intExpr(             -644443)) or
2722        not raisesOverflowError(intExpr(      14312161101687) * intExpr(             -644444)) or
2723        not raisesOverflowError(intExpr(        933865493038) * intExpr(            -9876553)) or
2724        not raisesOverflowError(intExpr(        933865493037) * intExpr(            -9876554)) or
2725        not raisesOverflowError(intExpr(        747094709114) * intExpr(           -12345653)) or
2726        not raisesOverflowError(intExpr(        747094709113) * intExpr(           -12345654)) or
2727        not raisesOverflowError(intExpr(         74709312969) * intExpr(          -123456791)) or
2728        not raisesOverflowError(intExpr(         74709312968) * intExpr(          -123456792)) or
2729        not raisesOverflowError(intExpr(          3037000500) * intExpr(         -3037000500)) or
2730        not raisesOverflowError(intExpr(           123456792) * intExpr(        -74709312968)) or
2731        not raisesOverflowError(intExpr(           123456791) * intExpr(        -74709312969)) or
2732        not raisesOverflowError(intExpr(            12345654) * intExpr(       -747094709113)) or
2733        not raisesOverflowError(intExpr(            12345653) * intExpr(       -747094709114)) or
2734        not raisesOverflowError(intExpr(             9876554) * intExpr(       -933865493037)) or
2735        not raisesOverflowError(intExpr(             9876553) * intExpr(       -933865493038)) or
2736        not raisesOverflowError(intExpr(              644444) * intExpr(     -14312161101687)) or
2737        not raisesOverflowError(intExpr(              644443) * intExpr(     -14312161101688)) or
2738        not raisesOverflowError(intExpr(               38274) * intExpr(    -240989001041328)) or
2739        not raisesOverflowError(intExpr(               38273) * intExpr(    -240989001041329)) or
2740        not raisesOverflowError(intExpr(                4640) * intExpr(   -1988224194191587)) or
2741        not raisesOverflowError(intExpr(                4639) * intExpr(   -1988224194191588)) or
2742        not raisesOverflowError(intExpr(                 858) * intExpr(  -10762394442070916)) or
2743        not raisesOverflowError(intExpr(                 857) * intExpr(  -10762394442070917)) or
2744        not raisesOverflowError(intExpr(                  12) * intExpr( -838488366986797800)) or
2745        not raisesOverflowError(intExpr(                  11) * intExpr( -838488366986797801)) or
2746        not raisesOverflowError(intExpr(                   4) * intExpr(-3074457345618258602)) or
2747        not raisesOverflowError(intExpr(                   3) * intExpr(-3074457345618258603)) or
2748        not raisesOverflowError(intExpr(                   3) * intExpr(-4611686018427387904)) or
2749        not raisesOverflowError(intExpr(                   2) * intExpr(-4611686018427387905)) then
2750      writeln(" ***** Underflow when computing multiplication does not raise OVERFLOW_ERROR. (4)");
2751      okay := FALSE;
2752    end if;
2753
2754    if  not raisesOverflowError(           INT64_MIN *                   -1) or
2755        not raisesOverflowError(-4611686018427387904 *                   -2) or
2756        not raisesOverflowError(-4611686018427387903 *                   -3) or
2757        not raisesOverflowError(-3074457345618258603 *                   -3) or
2758        not raisesOverflowError(-3074457345618258602 *                   -4) or
2759        not raisesOverflowError( -838488366986797801 *                  -11) or
2760        not raisesOverflowError( -838488366986797800 *                  -12) or
2761        not raisesOverflowError(  -10762394442070917 *                 -857) or
2762        not raisesOverflowError(  -10762394442070916 *                 -858) or
2763        not raisesOverflowError(   -1988224194191588 *                -4639) or
2764        not raisesOverflowError(   -1988224194191587 *                -4640) or
2765        not raisesOverflowError(    -240989001041329 *               -38273) or
2766        not raisesOverflowError(    -240989001041328 *               -38274) or
2767        not raisesOverflowError(     -14312161101688 *              -644443) or
2768        not raisesOverflowError(     -14312161101687 *              -644444) or
2769        not raisesOverflowError(       -933865493038 *             -9876553) or
2770        not raisesOverflowError(       -933865493037 *             -9876554) or
2771        not raisesOverflowError(       -747094709114 *            -12345653) or
2772        not raisesOverflowError(       -747094709113 *            -12345654) or
2773        not raisesOverflowError(        -74709312969 *           -123456791) or
2774        not raisesOverflowError(        -74709312968 *           -123456792) or
2775        not raisesOverflowError(         -3037000500 *          -3037000500) or
2776        not raisesOverflowError(          -123456792 *         -74709312968) or
2777        not raisesOverflowError(          -123456791 *         -74709312969) or
2778        not raisesOverflowError(           -12345654 *        -747094709113) or
2779        not raisesOverflowError(           -12345653 *        -747094709114) or
2780        not raisesOverflowError(            -9876554 *        -933865493037) or
2781        not raisesOverflowError(            -9876553 *        -933865493038) or
2782        not raisesOverflowError(             -644444 *      -14312161101687) or
2783        not raisesOverflowError(             -644443 *      -14312161101688) or
2784        not raisesOverflowError(              -38274 *     -240989001041328) or
2785        not raisesOverflowError(              -38273 *     -240989001041329) or
2786        not raisesOverflowError(               -4640 *    -1988224194191587) or
2787        not raisesOverflowError(               -4639 *    -1988224194191588) or
2788        not raisesOverflowError(                -858 *   -10762394442070916) or
2789        not raisesOverflowError(                -857 *   -10762394442070917) or
2790        not raisesOverflowError(                 -12 *  -838488366986797800) or
2791        not raisesOverflowError(                 -11 *  -838488366986797801) or
2792        not raisesOverflowError(                  -4 * -3074457345618258602) or
2793        not raisesOverflowError(                  -3 * -3074457345618258603) or
2794        not raisesOverflowError(                  -3 * -4611686018427387903) or
2795        not raisesOverflowError(                  -2 * -4611686018427387904) or
2796        not raisesOverflowError( 4611686018427387904 *                    2) or
2797        not raisesOverflowError( 4611686018427387903 *                    3) or
2798        not raisesOverflowError( 3074457345618258603 *                    3) or
2799        not raisesOverflowError( 3074457345618258602 *                    4) or
2800        not raisesOverflowError(  838488366986797801 *                   11) or
2801        not raisesOverflowError(  838488366986797800 *                   12) or
2802        not raisesOverflowError(   10762394442070917 *                  857) or
2803        not raisesOverflowError(   10762394442070916 *                  858) or
2804        not raisesOverflowError(    1988224194191588 *                 4639) or
2805        not raisesOverflowError(    1988224194191587 *                 4640) or
2806        not raisesOverflowError(     240989001041329 *                38273) or
2807        not raisesOverflowError(     240989001041328 *                38274) or
2808        not raisesOverflowError(      14312161101688 *               644443) or
2809        not raisesOverflowError(      14312161101687 *               644444) or
2810        not raisesOverflowError(        933865493038 *              9876553) or
2811        not raisesOverflowError(        933865493037 *              9876554) or
2812        not raisesOverflowError(        747094709114 *             12345653) or
2813        not raisesOverflowError(        747094709113 *             12345654) or
2814        not raisesOverflowError(         74709312969 *            123456791) or
2815        not raisesOverflowError(         74709312968 *            123456792) or
2816        not raisesOverflowError(          3037000500 *           3037000500) or
2817        not raisesOverflowError(           123456792 *          74709312968) or
2818        not raisesOverflowError(           123456791 *          74709312969) or
2819        not raisesOverflowError(            12345654 *         747094709113) or
2820        not raisesOverflowError(            12345653 *         747094709114) or
2821        not raisesOverflowError(             9876554 *         933865493037) or
2822        not raisesOverflowError(             9876553 *         933865493038) or
2823        not raisesOverflowError(              644444 *       14312161101687) or
2824        not raisesOverflowError(              644443 *       14312161101688) or
2825        not raisesOverflowError(               38274 *      240989001041328) or
2826        not raisesOverflowError(               38273 *      240989001041329) or
2827        not raisesOverflowError(                4640 *     1988224194191587) or
2828        not raisesOverflowError(                4639 *     1988224194191588) or
2829        not raisesOverflowError(                 858 *    10762394442070916) or
2830        not raisesOverflowError(                 857 *    10762394442070917) or
2831        not raisesOverflowError(                  12 *   838488366986797800) or
2832        not raisesOverflowError(                  11 *   838488366986797801) or
2833        not raisesOverflowError(                   4 *  3074457345618258602) or
2834        not raisesOverflowError(                   3 *  3074457345618258603) or
2835        not raisesOverflowError(                   3 *  4611686018427387903) or
2836        not raisesOverflowError(                   2 *  4611686018427387904) then
2837      writeln(" ***** Overflow when computing multiplication does not raise OVERFLOW_ERROR. (1)");
2838      okay := FALSE;
2839    end if;
2840
2841    if  not raisesOverflowError(intExpr(           INT64_MIN) *                   -1) or
2842        not raisesOverflowError(intExpr(-4611686018427387904) *                   -2) or
2843        not raisesOverflowError(intExpr(-4611686018427387903) *                   -3) or
2844        not raisesOverflowError(intExpr(-3074457345618258603) *                   -3) or
2845        not raisesOverflowError(intExpr(-3074457345618258602) *                   -4) or
2846        not raisesOverflowError(intExpr( -838488366986797801) *                  -11) or
2847        not raisesOverflowError(intExpr( -838488366986797800) *                  -12) or
2848        not raisesOverflowError(intExpr(  -10762394442070917) *                 -857) or
2849        not raisesOverflowError(intExpr(  -10762394442070916) *                 -858) or
2850        not raisesOverflowError(intExpr(   -1988224194191588) *                -4639) or
2851        not raisesOverflowError(intExpr(   -1988224194191587) *                -4640) or
2852        not raisesOverflowError(intExpr(    -240989001041329) *               -38273) or
2853        not raisesOverflowError(intExpr(    -240989001041328) *               -38274) or
2854        not raisesOverflowError(intExpr(     -14312161101688) *              -644443) or
2855        not raisesOverflowError(intExpr(     -14312161101687) *              -644444) or
2856        not raisesOverflowError(intExpr(       -933865493038) *             -9876553) or
2857        not raisesOverflowError(intExpr(       -933865493037) *             -9876554) or
2858        not raisesOverflowError(intExpr(       -747094709114) *            -12345653) or
2859        not raisesOverflowError(intExpr(       -747094709113) *            -12345654) or
2860        not raisesOverflowError(intExpr(        -74709312969) *           -123456791) or
2861        not raisesOverflowError(intExpr(        -74709312968) *           -123456792) or
2862        not raisesOverflowError(intExpr(         -3037000500) *          -3037000500) or
2863        not raisesOverflowError(intExpr(          -123456792) *         -74709312968) or
2864        not raisesOverflowError(intExpr(          -123456791) *         -74709312969) or
2865        not raisesOverflowError(intExpr(           -12345654) *        -747094709113) or
2866        not raisesOverflowError(intExpr(           -12345653) *        -747094709114) or
2867        not raisesOverflowError(intExpr(            -9876554) *        -933865493037) or
2868        not raisesOverflowError(intExpr(            -9876553) *        -933865493038) or
2869        not raisesOverflowError(intExpr(             -644444) *      -14312161101687) or
2870        not raisesOverflowError(intExpr(             -644443) *      -14312161101688) or
2871        not raisesOverflowError(intExpr(              -38274) *     -240989001041328) or
2872        not raisesOverflowError(intExpr(              -38273) *     -240989001041329) or
2873        not raisesOverflowError(intExpr(               -4640) *    -1988224194191587) or
2874        not raisesOverflowError(intExpr(               -4639) *    -1988224194191588) or
2875        not raisesOverflowError(intExpr(                -858) *   -10762394442070916) or
2876        not raisesOverflowError(intExpr(                -857) *   -10762394442070917) or
2877        not raisesOverflowError(intExpr(                 -12) *  -838488366986797800) or
2878        not raisesOverflowError(intExpr(                 -11) *  -838488366986797801) or
2879        not raisesOverflowError(intExpr(                  -4) * -3074457345618258602) or
2880        not raisesOverflowError(intExpr(                  -3) * -3074457345618258603) or
2881        not raisesOverflowError(intExpr(                  -3) * -4611686018427387903) or
2882        not raisesOverflowError(intExpr(                  -2) * -4611686018427387904) or
2883        not raisesOverflowError(intExpr( 4611686018427387904) *                    2) or
2884        not raisesOverflowError(intExpr( 4611686018427387903) *                    3) or
2885        not raisesOverflowError(intExpr( 3074457345618258603) *                    3) or
2886        not raisesOverflowError(intExpr( 3074457345618258602) *                    4) or
2887        not raisesOverflowError(intExpr(  838488366986797801) *                   11) or
2888        not raisesOverflowError(intExpr(  838488366986797800) *                   12) or
2889        not raisesOverflowError(intExpr(   10762394442070917) *                  857) or
2890        not raisesOverflowError(intExpr(   10762394442070916) *                  858) or
2891        not raisesOverflowError(intExpr(    1988224194191588) *                 4639) or
2892        not raisesOverflowError(intExpr(    1988224194191587) *                 4640) or
2893        not raisesOverflowError(intExpr(     240989001041329) *                38273) or
2894        not raisesOverflowError(intExpr(     240989001041328) *                38274) or
2895        not raisesOverflowError(intExpr(      14312161101688) *               644443) or
2896        not raisesOverflowError(intExpr(      14312161101687) *               644444) or
2897        not raisesOverflowError(intExpr(        933865493038) *              9876553) or
2898        not raisesOverflowError(intExpr(        933865493037) *              9876554) or
2899        not raisesOverflowError(intExpr(        747094709114) *             12345653) or
2900        not raisesOverflowError(intExpr(        747094709113) *             12345654) or
2901        not raisesOverflowError(intExpr(         74709312969) *            123456791) or
2902        not raisesOverflowError(intExpr(         74709312968) *            123456792) or
2903        not raisesOverflowError(intExpr(          3037000500) *           3037000500) or
2904        not raisesOverflowError(intExpr(           123456792) *          74709312968) or
2905        not raisesOverflowError(intExpr(           123456791) *          74709312969) or
2906        not raisesOverflowError(intExpr(            12345654) *         747094709113) or
2907        not raisesOverflowError(intExpr(            12345653) *         747094709114) or
2908        not raisesOverflowError(intExpr(             9876554) *         933865493037) or
2909        not raisesOverflowError(intExpr(             9876553) *         933865493038) or
2910        not raisesOverflowError(intExpr(              644444) *       14312161101687) or
2911        not raisesOverflowError(intExpr(              644443) *       14312161101688) or
2912        not raisesOverflowError(intExpr(               38274) *      240989001041328) or
2913        not raisesOverflowError(intExpr(               38273) *      240989001041329) or
2914        not raisesOverflowError(intExpr(                4640) *     1988224194191587) or
2915        not raisesOverflowError(intExpr(                4639) *     1988224194191588) or
2916        not raisesOverflowError(intExpr(                 858) *    10762394442070916) or
2917        not raisesOverflowError(intExpr(                 857) *    10762394442070917) or
2918        not raisesOverflowError(intExpr(                  12) *   838488366986797800) or
2919        not raisesOverflowError(intExpr(                  11) *   838488366986797801) or
2920        not raisesOverflowError(intExpr(                   4) *  3074457345618258602) or
2921        not raisesOverflowError(intExpr(                   3) *  3074457345618258603) or
2922        not raisesOverflowError(intExpr(                   3) *  4611686018427387903) or
2923        not raisesOverflowError(intExpr(                   2) *  4611686018427387904) then
2924      writeln(" ***** Overflow when computing multiplication does not raise OVERFLOW_ERROR. (2)");
2925      okay := FALSE;
2926    end if;
2927
2928    if  not raisesOverflowError(           INT64_MIN * intExpr(                  -1)) or
2929        not raisesOverflowError(-4611686018427387904 * intExpr(                  -2)) or
2930        not raisesOverflowError(-4611686018427387903 * intExpr(                  -3)) or
2931        not raisesOverflowError(-3074457345618258603 * intExpr(                  -3)) or
2932        not raisesOverflowError(-3074457345618258602 * intExpr(                  -4)) or
2933        not raisesOverflowError( -838488366986797801 * intExpr(                 -11)) or
2934        not raisesOverflowError( -838488366986797800 * intExpr(                 -12)) or
2935        not raisesOverflowError(  -10762394442070917 * intExpr(                -857)) or
2936        not raisesOverflowError(  -10762394442070916 * intExpr(                -858)) or
2937        not raisesOverflowError(   -1988224194191588 * intExpr(               -4639)) or
2938        not raisesOverflowError(   -1988224194191587 * intExpr(               -4640)) or
2939        not raisesOverflowError(    -240989001041329 * intExpr(              -38273)) or
2940        not raisesOverflowError(    -240989001041328 * intExpr(              -38274)) or
2941        not raisesOverflowError(     -14312161101688 * intExpr(             -644443)) or
2942        not raisesOverflowError(     -14312161101687 * intExpr(             -644444)) or
2943        not raisesOverflowError(       -933865493038 * intExpr(            -9876553)) or
2944        not raisesOverflowError(       -933865493037 * intExpr(            -9876554)) or
2945        not raisesOverflowError(       -747094709114 * intExpr(           -12345653)) or
2946        not raisesOverflowError(       -747094709113 * intExpr(           -12345654)) or
2947        not raisesOverflowError(        -74709312969 * intExpr(          -123456791)) or
2948        not raisesOverflowError(        -74709312968 * intExpr(          -123456792)) or
2949        not raisesOverflowError(         -3037000500 * intExpr(         -3037000500)) or
2950        not raisesOverflowError(          -123456792 * intExpr(        -74709312968)) or
2951        not raisesOverflowError(          -123456791 * intExpr(        -74709312969)) or
2952        not raisesOverflowError(           -12345654 * intExpr(       -747094709113)) or
2953        not raisesOverflowError(           -12345653 * intExpr(       -747094709114)) or
2954        not raisesOverflowError(            -9876554 * intExpr(       -933865493037)) or
2955        not raisesOverflowError(            -9876553 * intExpr(       -933865493038)) or
2956        not raisesOverflowError(             -644444 * intExpr(     -14312161101687)) or
2957        not raisesOverflowError(             -644443 * intExpr(     -14312161101688)) or
2958        not raisesOverflowError(              -38274 * intExpr(    -240989001041328)) or
2959        not raisesOverflowError(              -38273 * intExpr(    -240989001041329)) or
2960        not raisesOverflowError(               -4640 * intExpr(   -1988224194191587)) or
2961        not raisesOverflowError(               -4639 * intExpr(   -1988224194191588)) or
2962        not raisesOverflowError(                -858 * intExpr(  -10762394442070916)) or
2963        not raisesOverflowError(                -857 * intExpr(  -10762394442070917)) or
2964        not raisesOverflowError(                 -12 * intExpr( -838488366986797800)) or
2965        not raisesOverflowError(                 -11 * intExpr( -838488366986797801)) or
2966        not raisesOverflowError(                  -4 * intExpr(-3074457345618258602)) or
2967        not raisesOverflowError(                  -3 * intExpr(-3074457345618258603)) or
2968        not raisesOverflowError(                  -3 * intExpr(-4611686018427387903)) or
2969        not raisesOverflowError(                  -2 * intExpr(-4611686018427387904)) or
2970        not raisesOverflowError( 4611686018427387904 * intExpr(                   2)) or
2971        not raisesOverflowError( 4611686018427387903 * intExpr(                   3)) or
2972        not raisesOverflowError( 3074457345618258603 * intExpr(                   3)) or
2973        not raisesOverflowError( 3074457345618258602 * intExpr(                   4)) or
2974        not raisesOverflowError(  838488366986797801 * intExpr(                  11)) or
2975        not raisesOverflowError(  838488366986797800 * intExpr(                  12)) or
2976        not raisesOverflowError(   10762394442070917 * intExpr(                 857)) or
2977        not raisesOverflowError(   10762394442070916 * intExpr(                 858)) or
2978        not raisesOverflowError(    1988224194191588 * intExpr(                4639)) or
2979        not raisesOverflowError(    1988224194191587 * intExpr(                4640)) or
2980        not raisesOverflowError(     240989001041329 * intExpr(               38273)) or
2981        not raisesOverflowError(     240989001041328 * intExpr(               38274)) or
2982        not raisesOverflowError(      14312161101688 * intExpr(              644443)) or
2983        not raisesOverflowError(      14312161101687 * intExpr(              644444)) or
2984        not raisesOverflowError(        933865493038 * intExpr(             9876553)) or
2985        not raisesOverflowError(        933865493037 * intExpr(             9876554)) or
2986        not raisesOverflowError(        747094709114 * intExpr(            12345653)) or
2987        not raisesOverflowError(        747094709113 * intExpr(            12345654)) or
2988        not raisesOverflowError(         74709312969 * intExpr(           123456791)) or
2989        not raisesOverflowError(         74709312968 * intExpr(           123456792)) or
2990        not raisesOverflowError(          3037000500 * intExpr(          3037000500)) or
2991        not raisesOverflowError(           123456792 * intExpr(         74709312968)) or
2992        not raisesOverflowError(           123456791 * intExpr(         74709312969)) or
2993        not raisesOverflowError(            12345654 * intExpr(        747094709113)) or
2994        not raisesOverflowError(            12345653 * intExpr(        747094709114)) or
2995        not raisesOverflowError(             9876554 * intExpr(        933865493037)) or
2996        not raisesOverflowError(             9876553 * intExpr(        933865493038)) or
2997        not raisesOverflowError(              644444 * intExpr(      14312161101687)) or
2998        not raisesOverflowError(              644443 * intExpr(      14312161101688)) or
2999        not raisesOverflowError(               38274 * intExpr(     240989001041328)) or
3000        not raisesOverflowError(               38273 * intExpr(     240989001041329)) or
3001        not raisesOverflowError(                4640 * intExpr(    1988224194191587)) or
3002        not raisesOverflowError(                4639 * intExpr(    1988224194191588)) or
3003        not raisesOverflowError(                 858 * intExpr(   10762394442070916)) or
3004        not raisesOverflowError(                 857 * intExpr(   10762394442070917)) or
3005        not raisesOverflowError(                  12 * intExpr(  838488366986797800)) or
3006        not raisesOverflowError(                  11 * intExpr(  838488366986797801)) or
3007        not raisesOverflowError(                   4 * intExpr( 3074457345618258602)) or
3008        not raisesOverflowError(                   3 * intExpr( 3074457345618258603)) or
3009        not raisesOverflowError(                   3 * intExpr( 4611686018427387903)) or
3010        not raisesOverflowError(                   2 * intExpr( 4611686018427387904)) then
3011      writeln(" ***** Overflow when computing multiplication does not raise OVERFLOW_ERROR. (3)");
3012      okay := FALSE;
3013    end if;
3014
3015    if  not raisesOverflowError(intExpr(           INT64_MIN) * intExpr(                  -1)) or
3016        not raisesOverflowError(intExpr(-4611686018427387904) * intExpr(                  -2)) or
3017        not raisesOverflowError(intExpr(-4611686018427387903) * intExpr(                  -3)) or
3018        not raisesOverflowError(intExpr(-3074457345618258603) * intExpr(                  -3)) or
3019        not raisesOverflowError(intExpr(-3074457345618258602) * intExpr(                  -4)) or
3020        not raisesOverflowError(intExpr( -838488366986797801) * intExpr(                 -11)) or
3021        not raisesOverflowError(intExpr( -838488366986797800) * intExpr(                 -12)) or
3022        not raisesOverflowError(intExpr(  -10762394442070917) * intExpr(                -857)) or
3023        not raisesOverflowError(intExpr(  -10762394442070916) * intExpr(                -858)) or
3024        not raisesOverflowError(intExpr(   -1988224194191588) * intExpr(               -4639)) or
3025        not raisesOverflowError(intExpr(   -1988224194191587) * intExpr(               -4640)) or
3026        not raisesOverflowError(intExpr(    -240989001041329) * intExpr(              -38273)) or
3027        not raisesOverflowError(intExpr(    -240989001041328) * intExpr(              -38274)) or
3028        not raisesOverflowError(intExpr(     -14312161101688) * intExpr(             -644443)) or
3029        not raisesOverflowError(intExpr(     -14312161101687) * intExpr(             -644444)) or
3030        not raisesOverflowError(intExpr(       -933865493038) * intExpr(            -9876553)) or
3031        not raisesOverflowError(intExpr(       -933865493037) * intExpr(            -9876554)) or
3032        not raisesOverflowError(intExpr(       -747094709114) * intExpr(           -12345653)) or
3033        not raisesOverflowError(intExpr(       -747094709113) * intExpr(           -12345654)) or
3034        not raisesOverflowError(intExpr(        -74709312969) * intExpr(          -123456791)) or
3035        not raisesOverflowError(intExpr(        -74709312968) * intExpr(          -123456792)) or
3036        not raisesOverflowError(intExpr(         -3037000500) * intExpr(         -3037000500)) or
3037        not raisesOverflowError(intExpr(          -123456792) * intExpr(        -74709312968)) or
3038        not raisesOverflowError(intExpr(          -123456791) * intExpr(        -74709312969)) or
3039        not raisesOverflowError(intExpr(           -12345654) * intExpr(       -747094709113)) or
3040        not raisesOverflowError(intExpr(           -12345653) * intExpr(       -747094709114)) or
3041        not raisesOverflowError(intExpr(            -9876554) * intExpr(       -933865493037)) or
3042        not raisesOverflowError(intExpr(            -9876553) * intExpr(       -933865493038)) or
3043        not raisesOverflowError(intExpr(             -644444) * intExpr(     -14312161101687)) or
3044        not raisesOverflowError(intExpr(             -644443) * intExpr(     -14312161101688)) or
3045        not raisesOverflowError(intExpr(              -38274) * intExpr(    -240989001041328)) or
3046        not raisesOverflowError(intExpr(              -38273) * intExpr(    -240989001041329)) or
3047        not raisesOverflowError(intExpr(               -4640) * intExpr(   -1988224194191587)) or
3048        not raisesOverflowError(intExpr(               -4639) * intExpr(   -1988224194191588)) or
3049        not raisesOverflowError(intExpr(                -858) * intExpr(  -10762394442070916)) or
3050        not raisesOverflowError(intExpr(                -857) * intExpr(  -10762394442070917)) or
3051        not raisesOverflowError(intExpr(                 -12) * intExpr( -838488366986797800)) or
3052        not raisesOverflowError(intExpr(                 -11) * intExpr( -838488366986797801)) or
3053        not raisesOverflowError(intExpr(                  -4) * intExpr(-3074457345618258602)) or
3054        not raisesOverflowError(intExpr(                  -3) * intExpr(-3074457345618258603)) or
3055        not raisesOverflowError(intExpr(                  -3) * intExpr(-4611686018427387903)) or
3056        not raisesOverflowError(intExpr(                  -2) * intExpr(-4611686018427387904)) or
3057        not raisesOverflowError(intExpr( 4611686018427387904) * intExpr(                   2)) or
3058        not raisesOverflowError(intExpr( 4611686018427387903) * intExpr(                   3)) or
3059        not raisesOverflowError(intExpr( 3074457345618258603) * intExpr(                   3)) or
3060        not raisesOverflowError(intExpr( 3074457345618258602) * intExpr(                   4)) or
3061        not raisesOverflowError(intExpr(  838488366986797801) * intExpr(                  11)) or
3062        not raisesOverflowError(intExpr(  838488366986797800) * intExpr(                  12)) or
3063        not raisesOverflowError(intExpr(   10762394442070917) * intExpr(                 857)) or
3064        not raisesOverflowError(intExpr(   10762394442070916) * intExpr(                 858)) or
3065        not raisesOverflowError(intExpr(    1988224194191588) * intExpr(                4639)) or
3066        not raisesOverflowError(intExpr(    1988224194191587) * intExpr(                4640)) or
3067        not raisesOverflowError(intExpr(     240989001041329) * intExpr(               38273)) or
3068        not raisesOverflowError(intExpr(     240989001041328) * intExpr(               38274)) or
3069        not raisesOverflowError(intExpr(      14312161101688) * intExpr(              644443)) or
3070        not raisesOverflowError(intExpr(      14312161101687) * intExpr(              644444)) or
3071        not raisesOverflowError(intExpr(        933865493038) * intExpr(             9876553)) or
3072        not raisesOverflowError(intExpr(        933865493037) * intExpr(             9876554)) or
3073        not raisesOverflowError(intExpr(        747094709114) * intExpr(            12345653)) or
3074        not raisesOverflowError(intExpr(        747094709113) * intExpr(            12345654)) or
3075        not raisesOverflowError(intExpr(         74709312969) * intExpr(           123456791)) or
3076        not raisesOverflowError(intExpr(         74709312968) * intExpr(           123456792)) or
3077        not raisesOverflowError(intExpr(          3037000500) * intExpr(          3037000500)) or
3078        not raisesOverflowError(intExpr(           123456792) * intExpr(         74709312968)) or
3079        not raisesOverflowError(intExpr(           123456791) * intExpr(         74709312969)) or
3080        not raisesOverflowError(intExpr(            12345654) * intExpr(        747094709113)) or
3081        not raisesOverflowError(intExpr(            12345653) * intExpr(        747094709114)) or
3082        not raisesOverflowError(intExpr(             9876554) * intExpr(        933865493037)) or
3083        not raisesOverflowError(intExpr(             9876553) * intExpr(        933865493038)) or
3084        not raisesOverflowError(intExpr(              644444) * intExpr(      14312161101687)) or
3085        not raisesOverflowError(intExpr(              644443) * intExpr(      14312161101688)) or
3086        not raisesOverflowError(intExpr(               38274) * intExpr(     240989001041328)) or
3087        not raisesOverflowError(intExpr(               38273) * intExpr(     240989001041329)) or
3088        not raisesOverflowError(intExpr(                4640) * intExpr(    1988224194191587)) or
3089        not raisesOverflowError(intExpr(                4639) * intExpr(    1988224194191588)) or
3090        not raisesOverflowError(intExpr(                 858) * intExpr(   10762394442070916)) or
3091        not raisesOverflowError(intExpr(                 857) * intExpr(   10762394442070917)) or
3092        not raisesOverflowError(intExpr(                  12) * intExpr(  838488366986797800)) or
3093        not raisesOverflowError(intExpr(                  11) * intExpr(  838488366986797801)) or
3094        not raisesOverflowError(intExpr(                   4) * intExpr( 3074457345618258602)) or
3095        not raisesOverflowError(intExpr(                   3) * intExpr( 3074457345618258603)) or
3096        not raisesOverflowError(intExpr(                   3) * intExpr( 4611686018427387903)) or
3097        not raisesOverflowError(intExpr(                   2) * intExpr( 4611686018427387904)) then
3098      writeln(" ***** Overflow when computing multiplication does not raise OVERFLOW_ERROR. (4)");
3099      okay := FALSE;
3100    end if;
3101
3102    if not check_reduced_overflow_checking_for_mult then
3103      okay := FALSE;
3104    end if;
3105
3106    if okay then
3107      writeln("Overflow checking of multiplication works correct.");
3108    else
3109      writeln(" ***** Overflow checking of multiplication does not work correct.");
3110    end if;
3111  end func;
3112
3113
3114const func boolean: check_mult_assign_1 is func
3115  result
3116    var boolean: okay is TRUE;
3117  local
3118    var boolean: ok is TRUE;
3119    var integer: num is 0;
3120  begin
3121    num := -4611686018427387905; ok := ok and raisesOverflowError(num *:=                    2);
3122    num := -4611686018427387904; ok := ok and raisesOverflowError(num *:=                    3);
3123    num := -3074457345618258603; ok := ok and raisesOverflowError(num *:=                    3);
3124    num := -3074457345618258602; ok := ok and raisesOverflowError(num *:=                    4);
3125    num :=  -838488366986797801; ok := ok and raisesOverflowError(num *:=                   11);
3126    num :=  -838488366986797800; ok := ok and raisesOverflowError(num *:=                   12);
3127    num :=   -10762394442070917; ok := ok and raisesOverflowError(num *:=                  857);
3128    num :=   -10762394442070916; ok := ok and raisesOverflowError(num *:=                  858);
3129    num :=    -1988224194191588; ok := ok and raisesOverflowError(num *:=                 4639);
3130    num :=    -1988224194191587; ok := ok and raisesOverflowError(num *:=                 4640);
3131    num :=     -240989001041329; ok := ok and raisesOverflowError(num *:=                38273);
3132    num :=     -240989001041328; ok := ok and raisesOverflowError(num *:=                38274);
3133    num :=      -14312161101688; ok := ok and raisesOverflowError(num *:=               644443);
3134    num :=      -14312161101687; ok := ok and raisesOverflowError(num *:=               644444);
3135    num :=        -933865493038; ok := ok and raisesOverflowError(num *:=              9876553);
3136    num :=        -933865493037; ok := ok and raisesOverflowError(num *:=              9876554);
3137    num :=        -747094709114; ok := ok and raisesOverflowError(num *:=             12345653);
3138    num :=        -747094709113; ok := ok and raisesOverflowError(num *:=             12345654);
3139    num :=         -74709312969; ok := ok and raisesOverflowError(num *:=            123456791);
3140    num :=         -74709312968; ok := ok and raisesOverflowError(num *:=            123456792);
3141    num :=          -3037000500; ok := ok and raisesOverflowError(num *:=           3037000500);
3142    num :=           -123456792; ok := ok and raisesOverflowError(num *:=          74709312968);
3143    num :=           -123456791; ok := ok and raisesOverflowError(num *:=          74709312969);
3144    num :=            -12345654; ok := ok and raisesOverflowError(num *:=         747094709113);
3145    num :=            -12345653; ok := ok and raisesOverflowError(num *:=         747094709114);
3146    num :=             -9876554; ok := ok and raisesOverflowError(num *:=         933865493037);
3147    num :=             -9876553; ok := ok and raisesOverflowError(num *:=         933865493038);
3148    num :=              -644444; ok := ok and raisesOverflowError(num *:=       14312161101687);
3149    num :=              -644443; ok := ok and raisesOverflowError(num *:=       14312161101688);
3150    num :=               -38274; ok := ok and raisesOverflowError(num *:=      240989001041328);
3151    num :=               -38273; ok := ok and raisesOverflowError(num *:=      240989001041329);
3152    num :=                -4640; ok := ok and raisesOverflowError(num *:=     1988224194191587);
3153    num :=                -4639; ok := ok and raisesOverflowError(num *:=     1988224194191588);
3154    num :=                 -858; ok := ok and raisesOverflowError(num *:=    10762394442070916);
3155    num :=                 -857; ok := ok and raisesOverflowError(num *:=    10762394442070917);
3156    num :=                  -12; ok := ok and raisesOverflowError(num *:=   838488366986797800);
3157    num :=                  -11; ok := ok and raisesOverflowError(num *:=   838488366986797801);
3158    num :=                   -4; ok := ok and raisesOverflowError(num *:=  3074457345618258602);
3159    num :=                   -3; ok := ok and raisesOverflowError(num *:=  3074457345618258603);
3160    num :=                   -3; ok := ok and raisesOverflowError(num *:=  4611686018427387904);
3161    num :=                   -2; ok := ok and raisesOverflowError(num *:=  4611686018427387905);
3162    num :=  4611686018427387905; ok := ok and raisesOverflowError(num *:=                   -2);
3163    num :=  4611686018427387904; ok := ok and raisesOverflowError(num *:=                   -3);
3164    num :=  3074457345618258603; ok := ok and raisesOverflowError(num *:=                   -3);
3165    num :=  3074457345618258602; ok := ok and raisesOverflowError(num *:=                   -4);
3166    num :=   838488366986797801; ok := ok and raisesOverflowError(num *:=                  -11);
3167    num :=   838488366986797800; ok := ok and raisesOverflowError(num *:=                  -12);
3168    num :=    10762394442070917; ok := ok and raisesOverflowError(num *:=                 -857);
3169    num :=    10762394442070916; ok := ok and raisesOverflowError(num *:=                 -858);
3170    num :=     1988224194191588; ok := ok and raisesOverflowError(num *:=                -4639);
3171    num :=     1988224194191587; ok := ok and raisesOverflowError(num *:=                -4640);
3172    num :=      240989001041329; ok := ok and raisesOverflowError(num *:=               -38273);
3173    num :=      240989001041328; ok := ok and raisesOverflowError(num *:=               -38274);
3174    num :=       14312161101688; ok := ok and raisesOverflowError(num *:=              -644443);
3175    num :=       14312161101687; ok := ok and raisesOverflowError(num *:=              -644444);
3176    num :=         933865493038; ok := ok and raisesOverflowError(num *:=             -9876553);
3177    num :=         933865493037; ok := ok and raisesOverflowError(num *:=             -9876554);
3178    num :=         747094709114; ok := ok and raisesOverflowError(num *:=            -12345653);
3179    num :=         747094709113; ok := ok and raisesOverflowError(num *:=            -12345654);
3180    num :=          74709312969; ok := ok and raisesOverflowError(num *:=           -123456791);
3181    num :=          74709312968; ok := ok and raisesOverflowError(num *:=           -123456792);
3182    num :=           3037000500; ok := ok and raisesOverflowError(num *:=          -3037000500);
3183    num :=            123456792; ok := ok and raisesOverflowError(num *:=         -74709312968);
3184    num :=            123456791; ok := ok and raisesOverflowError(num *:=         -74709312969);
3185    num :=             12345654; ok := ok and raisesOverflowError(num *:=        -747094709113);
3186    num :=             12345653; ok := ok and raisesOverflowError(num *:=        -747094709114);
3187    num :=              9876554; ok := ok and raisesOverflowError(num *:=        -933865493037);
3188    num :=              9876553; ok := ok and raisesOverflowError(num *:=        -933865493038);
3189    num :=               644444; ok := ok and raisesOverflowError(num *:=      -14312161101687);
3190    num :=               644443; ok := ok and raisesOverflowError(num *:=      -14312161101688);
3191    num :=                38274; ok := ok and raisesOverflowError(num *:=     -240989001041328);
3192    num :=                38273; ok := ok and raisesOverflowError(num *:=     -240989001041329);
3193    num :=                 4640; ok := ok and raisesOverflowError(num *:=    -1988224194191587);
3194    num :=                 4639; ok := ok and raisesOverflowError(num *:=    -1988224194191588);
3195    num :=                  858; ok := ok and raisesOverflowError(num *:=   -10762394442070916);
3196    num :=                  857; ok := ok and raisesOverflowError(num *:=   -10762394442070917);
3197    num :=                   12; ok := ok and raisesOverflowError(num *:=  -838488366986797800);
3198    num :=                   11; ok := ok and raisesOverflowError(num *:=  -838488366986797801);
3199    num :=                    4; ok := ok and raisesOverflowError(num *:= -3074457345618258602);
3200    num :=                    3; ok := ok and raisesOverflowError(num *:= -3074457345618258603);
3201    num :=                    3; ok := ok and raisesOverflowError(num *:= -4611686018427387904);
3202    num :=                    2; ok := ok and raisesOverflowError(num *:= -4611686018427387905);
3203    if not ok then
3204      writeln(" ***** Underflow when computing multiplication assignment does not raise OVERFLOW_ERROR. (1)");
3205      okay := FALSE;
3206    end if;
3207
3208    ok := TRUE;
3209    num :=            INT64_MIN; ok := ok and raisesOverflowError(num *:=                   -1);
3210    num := -4611686018427387904; ok := ok and raisesOverflowError(num *:=                   -2);
3211    num := -4611686018427387903; ok := ok and raisesOverflowError(num *:=                   -3);
3212    num := -3074457345618258603; ok := ok and raisesOverflowError(num *:=                   -3);
3213    num := -3074457345618258602; ok := ok and raisesOverflowError(num *:=                   -4);
3214    num :=  -838488366986797801; ok := ok and raisesOverflowError(num *:=                  -11);
3215    num :=  -838488366986797800; ok := ok and raisesOverflowError(num *:=                  -12);
3216    num :=   -10762394442070917; ok := ok and raisesOverflowError(num *:=                 -857);
3217    num :=   -10762394442070916; ok := ok and raisesOverflowError(num *:=                 -858);
3218    num :=    -1988224194191588; ok := ok and raisesOverflowError(num *:=                -4639);
3219    num :=    -1988224194191587; ok := ok and raisesOverflowError(num *:=                -4640);
3220    num :=     -240989001041329; ok := ok and raisesOverflowError(num *:=               -38273);
3221    num :=     -240989001041328; ok := ok and raisesOverflowError(num *:=               -38274);
3222    num :=      -14312161101688; ok := ok and raisesOverflowError(num *:=              -644443);
3223    num :=      -14312161101687; ok := ok and raisesOverflowError(num *:=              -644444);
3224    num :=        -933865493038; ok := ok and raisesOverflowError(num *:=             -9876553);
3225    num :=        -933865493037; ok := ok and raisesOverflowError(num *:=             -9876554);
3226    num :=        -747094709114; ok := ok and raisesOverflowError(num *:=            -12345653);
3227    num :=        -747094709113; ok := ok and raisesOverflowError(num *:=            -12345654);
3228    num :=         -74709312969; ok := ok and raisesOverflowError(num *:=           -123456791);
3229    num :=         -74709312968; ok := ok and raisesOverflowError(num *:=           -123456792);
3230    num :=          -3037000500; ok := ok and raisesOverflowError(num *:=          -3037000500);
3231    num :=           -123456792; ok := ok and raisesOverflowError(num *:=         -74709312968);
3232    num :=           -123456791; ok := ok and raisesOverflowError(num *:=         -74709312969);
3233    num :=            -12345654; ok := ok and raisesOverflowError(num *:=        -747094709113);
3234    num :=            -12345653; ok := ok and raisesOverflowError(num *:=        -747094709114);
3235    num :=             -9876554; ok := ok and raisesOverflowError(num *:=        -933865493037);
3236    num :=             -9876553; ok := ok and raisesOverflowError(num *:=        -933865493038);
3237    num :=              -644444; ok := ok and raisesOverflowError(num *:=      -14312161101687);
3238    num :=              -644443; ok := ok and raisesOverflowError(num *:=      -14312161101688);
3239    num :=               -38274; ok := ok and raisesOverflowError(num *:=     -240989001041328);
3240    num :=               -38273; ok := ok and raisesOverflowError(num *:=     -240989001041329);
3241    num :=                -4640; ok := ok and raisesOverflowError(num *:=    -1988224194191587);
3242    num :=                -4639; ok := ok and raisesOverflowError(num *:=    -1988224194191588);
3243    num :=                 -858; ok := ok and raisesOverflowError(num *:=   -10762394442070916);
3244    num :=                 -857; ok := ok and raisesOverflowError(num *:=   -10762394442070917);
3245    num :=                  -12; ok := ok and raisesOverflowError(num *:=  -838488366986797800);
3246    num :=                  -11; ok := ok and raisesOverflowError(num *:=  -838488366986797801);
3247    num :=                   -4; ok := ok and raisesOverflowError(num *:= -3074457345618258602);
3248    num :=                   -3; ok := ok and raisesOverflowError(num *:= -3074457345618258603);
3249    num :=                   -3; ok := ok and raisesOverflowError(num *:= -4611686018427387903);
3250    num :=                   -2; ok := ok and raisesOverflowError(num *:= -4611686018427387904);
3251    num :=  4611686018427387904; ok := ok and raisesOverflowError(num *:=                    2);
3252    num :=  4611686018427387903; ok := ok and raisesOverflowError(num *:=                    3);
3253    num :=  3074457345618258603; ok := ok and raisesOverflowError(num *:=                    3);
3254    num :=  3074457345618258602; ok := ok and raisesOverflowError(num *:=                    4);
3255    num :=   838488366986797801; ok := ok and raisesOverflowError(num *:=                   11);
3256    num :=   838488366986797800; ok := ok and raisesOverflowError(num *:=                   12);
3257    num :=    10762394442070917; ok := ok and raisesOverflowError(num *:=                  857);
3258    num :=    10762394442070916; ok := ok and raisesOverflowError(num *:=                  858);
3259    num :=     1988224194191588; ok := ok and raisesOverflowError(num *:=                 4639);
3260    num :=     1988224194191587; ok := ok and raisesOverflowError(num *:=                 4640);
3261    num :=      240989001041329; ok := ok and raisesOverflowError(num *:=                38273);
3262    num :=      240989001041328; ok := ok and raisesOverflowError(num *:=                38274);
3263    num :=       14312161101688; ok := ok and raisesOverflowError(num *:=               644443);
3264    num :=       14312161101687; ok := ok and raisesOverflowError(num *:=               644444);
3265    num :=         933865493038; ok := ok and raisesOverflowError(num *:=              9876553);
3266    num :=         933865493037; ok := ok and raisesOverflowError(num *:=              9876554);
3267    num :=         747094709114; ok := ok and raisesOverflowError(num *:=             12345653);
3268    num :=         747094709113; ok := ok and raisesOverflowError(num *:=             12345654);
3269    num :=          74709312969; ok := ok and raisesOverflowError(num *:=            123456791);
3270    num :=          74709312968; ok := ok and raisesOverflowError(num *:=            123456792);
3271    num :=           3037000500; ok := ok and raisesOverflowError(num *:=           3037000500);
3272    num :=            123456792; ok := ok and raisesOverflowError(num *:=          74709312968);
3273    num :=            123456791; ok := ok and raisesOverflowError(num *:=          74709312969);
3274    num :=             12345654; ok := ok and raisesOverflowError(num *:=         747094709113);
3275    num :=             12345653; ok := ok and raisesOverflowError(num *:=         747094709114);
3276    num :=              9876554; ok := ok and raisesOverflowError(num *:=         933865493037);
3277    num :=              9876553; ok := ok and raisesOverflowError(num *:=         933865493038);
3278    num :=               644444; ok := ok and raisesOverflowError(num *:=       14312161101687);
3279    num :=               644443; ok := ok and raisesOverflowError(num *:=       14312161101688);
3280    num :=                38274; ok := ok and raisesOverflowError(num *:=      240989001041328);
3281    num :=                38273; ok := ok and raisesOverflowError(num *:=      240989001041329);
3282    num :=                 4640; ok := ok and raisesOverflowError(num *:=     1988224194191587);
3283    num :=                 4639; ok := ok and raisesOverflowError(num *:=     1988224194191588);
3284    num :=                  858; ok := ok and raisesOverflowError(num *:=    10762394442070916);
3285    num :=                  857; ok := ok and raisesOverflowError(num *:=    10762394442070917);
3286    num :=                   12; ok := ok and raisesOverflowError(num *:=   838488366986797800);
3287    num :=                   11; ok := ok and raisesOverflowError(num *:=   838488366986797801);
3288    num :=                    4; ok := ok and raisesOverflowError(num *:=  3074457345618258602);
3289    num :=                    3; ok := ok and raisesOverflowError(num *:=  3074457345618258603);
3290    num :=                    3; ok := ok and raisesOverflowError(num *:=  4611686018427387903);
3291    num :=                    2; ok := ok and raisesOverflowError(num *:=  4611686018427387904);
3292    if not ok then
3293      writeln(" ***** Overflow when computing multiplication assignment does not raise OVERFLOW_ERROR. (1)");
3294      okay := FALSE;
3295    end if;
3296  end func;
3297
3298
3299const func boolean: check_mult_assign_2 is func
3300  result
3301    var boolean: okay is TRUE;
3302  local
3303    var boolean: ok is TRUE;
3304    var integer: num is 0;
3305  begin
3306    num := -4611686018427387905; ok := ok and raisesOverflowError(num *:= intExpr(                   2));
3307    num := -4611686018427387904; ok := ok and raisesOverflowError(num *:= intExpr(                   3));
3308    num := -3074457345618258603; ok := ok and raisesOverflowError(num *:= intExpr(                   3));
3309    num := -3074457345618258602; ok := ok and raisesOverflowError(num *:= intExpr(                   4));
3310    num :=  -838488366986797801; ok := ok and raisesOverflowError(num *:= intExpr(                  11));
3311    num :=  -838488366986797800; ok := ok and raisesOverflowError(num *:= intExpr(                  12));
3312    num :=   -10762394442070917; ok := ok and raisesOverflowError(num *:= intExpr(                 857));
3313    num :=   -10762394442070916; ok := ok and raisesOverflowError(num *:= intExpr(                 858));
3314    num :=    -1988224194191588; ok := ok and raisesOverflowError(num *:= intExpr(                4639));
3315    num :=    -1988224194191587; ok := ok and raisesOverflowError(num *:= intExpr(                4640));
3316    num :=     -240989001041329; ok := ok and raisesOverflowError(num *:= intExpr(               38273));
3317    num :=     -240989001041328; ok := ok and raisesOverflowError(num *:= intExpr(               38274));
3318    num :=      -14312161101688; ok := ok and raisesOverflowError(num *:= intExpr(              644443));
3319    num :=      -14312161101687; ok := ok and raisesOverflowError(num *:= intExpr(              644444));
3320    num :=        -933865493038; ok := ok and raisesOverflowError(num *:= intExpr(             9876553));
3321    num :=        -933865493037; ok := ok and raisesOverflowError(num *:= intExpr(             9876554));
3322    num :=        -747094709114; ok := ok and raisesOverflowError(num *:= intExpr(            12345653));
3323    num :=        -747094709113; ok := ok and raisesOverflowError(num *:= intExpr(            12345654));
3324    num :=         -74709312969; ok := ok and raisesOverflowError(num *:= intExpr(           123456791));
3325    num :=         -74709312968; ok := ok and raisesOverflowError(num *:= intExpr(           123456792));
3326    num :=          -3037000500; ok := ok and raisesOverflowError(num *:= intExpr(          3037000500));
3327    num :=           -123456792; ok := ok and raisesOverflowError(num *:= intExpr(         74709312968));
3328    num :=           -123456791; ok := ok and raisesOverflowError(num *:= intExpr(         74709312969));
3329    num :=            -12345654; ok := ok and raisesOverflowError(num *:= intExpr(        747094709113));
3330    num :=            -12345653; ok := ok and raisesOverflowError(num *:= intExpr(        747094709114));
3331    num :=             -9876554; ok := ok and raisesOverflowError(num *:= intExpr(        933865493037));
3332    num :=             -9876553; ok := ok and raisesOverflowError(num *:= intExpr(        933865493038));
3333    num :=              -644444; ok := ok and raisesOverflowError(num *:= intExpr(      14312161101687));
3334    num :=              -644443; ok := ok and raisesOverflowError(num *:= intExpr(      14312161101688));
3335    num :=               -38274; ok := ok and raisesOverflowError(num *:= intExpr(     240989001041328));
3336    num :=               -38273; ok := ok and raisesOverflowError(num *:= intExpr(     240989001041329));
3337    num :=                -4640; ok := ok and raisesOverflowError(num *:= intExpr(    1988224194191587));
3338    num :=                -4639; ok := ok and raisesOverflowError(num *:= intExpr(    1988224194191588));
3339    num :=                 -858; ok := ok and raisesOverflowError(num *:= intExpr(   10762394442070916));
3340    num :=                 -857; ok := ok and raisesOverflowError(num *:= intExpr(   10762394442070917));
3341    num :=                  -12; ok := ok and raisesOverflowError(num *:= intExpr(  838488366986797800));
3342    num :=                  -11; ok := ok and raisesOverflowError(num *:= intExpr(  838488366986797801));
3343    num :=                   -4; ok := ok and raisesOverflowError(num *:= intExpr( 3074457345618258602));
3344    num :=                   -3; ok := ok and raisesOverflowError(num *:= intExpr( 3074457345618258603));
3345    num :=                   -3; ok := ok and raisesOverflowError(num *:= intExpr( 4611686018427387904));
3346    num :=                   -2; ok := ok and raisesOverflowError(num *:= intExpr( 4611686018427387905));
3347    num :=  4611686018427387905; ok := ok and raisesOverflowError(num *:= intExpr(                  -2));
3348    num :=  4611686018427387904; ok := ok and raisesOverflowError(num *:= intExpr(                  -3));
3349    num :=  3074457345618258603; ok := ok and raisesOverflowError(num *:= intExpr(                  -3));
3350    num :=  3074457345618258602; ok := ok and raisesOverflowError(num *:= intExpr(                  -4));
3351    num :=   838488366986797801; ok := ok and raisesOverflowError(num *:= intExpr(                 -11));
3352    num :=   838488366986797800; ok := ok and raisesOverflowError(num *:= intExpr(                 -12));
3353    num :=    10762394442070917; ok := ok and raisesOverflowError(num *:= intExpr(                -857));
3354    num :=    10762394442070916; ok := ok and raisesOverflowError(num *:= intExpr(                -858));
3355    num :=     1988224194191588; ok := ok and raisesOverflowError(num *:= intExpr(               -4639));
3356    num :=     1988224194191587; ok := ok and raisesOverflowError(num *:= intExpr(               -4640));
3357    num :=      240989001041329; ok := ok and raisesOverflowError(num *:= intExpr(              -38273));
3358    num :=      240989001041328; ok := ok and raisesOverflowError(num *:= intExpr(              -38274));
3359    num :=       14312161101688; ok := ok and raisesOverflowError(num *:= intExpr(             -644443));
3360    num :=       14312161101687; ok := ok and raisesOverflowError(num *:= intExpr(             -644444));
3361    num :=         933865493038; ok := ok and raisesOverflowError(num *:= intExpr(            -9876553));
3362    num :=         933865493037; ok := ok and raisesOverflowError(num *:= intExpr(            -9876554));
3363    num :=         747094709114; ok := ok and raisesOverflowError(num *:= intExpr(           -12345653));
3364    num :=         747094709113; ok := ok and raisesOverflowError(num *:= intExpr(           -12345654));
3365    num :=          74709312969; ok := ok and raisesOverflowError(num *:= intExpr(          -123456791));
3366    num :=          74709312968; ok := ok and raisesOverflowError(num *:= intExpr(          -123456792));
3367    num :=           3037000500; ok := ok and raisesOverflowError(num *:= intExpr(         -3037000500));
3368    num :=            123456792; ok := ok and raisesOverflowError(num *:= intExpr(        -74709312968));
3369    num :=            123456791; ok := ok and raisesOverflowError(num *:= intExpr(        -74709312969));
3370    num :=             12345654; ok := ok and raisesOverflowError(num *:= intExpr(       -747094709113));
3371    num :=             12345653; ok := ok and raisesOverflowError(num *:= intExpr(       -747094709114));
3372    num :=              9876554; ok := ok and raisesOverflowError(num *:= intExpr(       -933865493037));
3373    num :=              9876553; ok := ok and raisesOverflowError(num *:= intExpr(       -933865493038));
3374    num :=               644444; ok := ok and raisesOverflowError(num *:= intExpr(     -14312161101687));
3375    num :=               644443; ok := ok and raisesOverflowError(num *:= intExpr(     -14312161101688));
3376    num :=                38274; ok := ok and raisesOverflowError(num *:= intExpr(    -240989001041328));
3377    num :=                38273; ok := ok and raisesOverflowError(num *:= intExpr(    -240989001041329));
3378    num :=                 4640; ok := ok and raisesOverflowError(num *:= intExpr(   -1988224194191587));
3379    num :=                 4639; ok := ok and raisesOverflowError(num *:= intExpr(   -1988224194191588));
3380    num :=                  858; ok := ok and raisesOverflowError(num *:= intExpr(  -10762394442070916));
3381    num :=                  857; ok := ok and raisesOverflowError(num *:= intExpr(  -10762394442070917));
3382    num :=                   12; ok := ok and raisesOverflowError(num *:= intExpr( -838488366986797800));
3383    num :=                   11; ok := ok and raisesOverflowError(num *:= intExpr( -838488366986797801));
3384    num :=                    4; ok := ok and raisesOverflowError(num *:= intExpr(-3074457345618258602));
3385    num :=                    3; ok := ok and raisesOverflowError(num *:= intExpr(-3074457345618258603));
3386    num :=                    3; ok := ok and raisesOverflowError(num *:= intExpr(-4611686018427387904));
3387    num :=                    2; ok := ok and raisesOverflowError(num *:= intExpr(-4611686018427387905));
3388    if not ok then
3389      writeln(" ***** Underflow when computing multiplication assignment does not raise OVERFLOW_ERROR. (2)");
3390      okay := FALSE;
3391    end if;
3392
3393    ok := TRUE;
3394    num :=            INT64_MIN; ok := ok and raisesOverflowError(num *:= intExpr(                  -1));
3395    num := -4611686018427387904; ok := ok and raisesOverflowError(num *:= intExpr(                  -2));
3396    num := -4611686018427387903; ok := ok and raisesOverflowError(num *:= intExpr(                  -3));
3397    num := -3074457345618258603; ok := ok and raisesOverflowError(num *:= intExpr(                  -3));
3398    num := -3074457345618258602; ok := ok and raisesOverflowError(num *:= intExpr(                  -4));
3399    num :=  -838488366986797801; ok := ok and raisesOverflowError(num *:= intExpr(                 -11));
3400    num :=  -838488366986797800; ok := ok and raisesOverflowError(num *:= intExpr(                 -12));
3401    num :=   -10762394442070917; ok := ok and raisesOverflowError(num *:= intExpr(                -857));
3402    num :=   -10762394442070916; ok := ok and raisesOverflowError(num *:= intExpr(                -858));
3403    num :=    -1988224194191588; ok := ok and raisesOverflowError(num *:= intExpr(               -4639));
3404    num :=    -1988224194191587; ok := ok and raisesOverflowError(num *:= intExpr(               -4640));
3405    num :=     -240989001041329; ok := ok and raisesOverflowError(num *:= intExpr(              -38273));
3406    num :=     -240989001041328; ok := ok and raisesOverflowError(num *:= intExpr(              -38274));
3407    num :=      -14312161101688; ok := ok and raisesOverflowError(num *:= intExpr(             -644443));
3408    num :=      -14312161101687; ok := ok and raisesOverflowError(num *:= intExpr(             -644444));
3409    num :=        -933865493038; ok := ok and raisesOverflowError(num *:= intExpr(            -9876553));
3410    num :=        -933865493037; ok := ok and raisesOverflowError(num *:= intExpr(            -9876554));
3411    num :=        -747094709114; ok := ok and raisesOverflowError(num *:= intExpr(           -12345653));
3412    num :=        -747094709113; ok := ok and raisesOverflowError(num *:= intExpr(           -12345654));
3413    num :=         -74709312969; ok := ok and raisesOverflowError(num *:= intExpr(          -123456791));
3414    num :=         -74709312968; ok := ok and raisesOverflowError(num *:= intExpr(          -123456792));
3415    num :=          -3037000500; ok := ok and raisesOverflowError(num *:= intExpr(         -3037000500));
3416    num :=           -123456792; ok := ok and raisesOverflowError(num *:= intExpr(        -74709312968));
3417    num :=           -123456791; ok := ok and raisesOverflowError(num *:= intExpr(        -74709312969));
3418    num :=            -12345654; ok := ok and raisesOverflowError(num *:= intExpr(       -747094709113));
3419    num :=            -12345653; ok := ok and raisesOverflowError(num *:= intExpr(       -747094709114));
3420    num :=             -9876554; ok := ok and raisesOverflowError(num *:= intExpr(       -933865493037));
3421    num :=             -9876553; ok := ok and raisesOverflowError(num *:= intExpr(       -933865493038));
3422    num :=              -644444; ok := ok and raisesOverflowError(num *:= intExpr(     -14312161101687));
3423    num :=              -644443; ok := ok and raisesOverflowError(num *:= intExpr(     -14312161101688));
3424    num :=               -38274; ok := ok and raisesOverflowError(num *:= intExpr(    -240989001041328));
3425    num :=               -38273; ok := ok and raisesOverflowError(num *:= intExpr(    -240989001041329));
3426    num :=                -4640; ok := ok and raisesOverflowError(num *:= intExpr(   -1988224194191587));
3427    num :=                -4639; ok := ok and raisesOverflowError(num *:= intExpr(   -1988224194191588));
3428    num :=                 -858; ok := ok and raisesOverflowError(num *:= intExpr(  -10762394442070916));
3429    num :=                 -857; ok := ok and raisesOverflowError(num *:= intExpr(  -10762394442070917));
3430    num :=                  -12; ok := ok and raisesOverflowError(num *:= intExpr( -838488366986797800));
3431    num :=                  -11; ok := ok and raisesOverflowError(num *:= intExpr( -838488366986797801));
3432    num :=                   -4; ok := ok and raisesOverflowError(num *:= intExpr(-3074457345618258602));
3433    num :=                   -3; ok := ok and raisesOverflowError(num *:= intExpr(-3074457345618258603));
3434    num :=                   -3; ok := ok and raisesOverflowError(num *:= intExpr(-4611686018427387903));
3435    num :=                   -2; ok := ok and raisesOverflowError(num *:= intExpr(-4611686018427387904));
3436    num :=  4611686018427387904; ok := ok and raisesOverflowError(num *:= intExpr(                   2));
3437    num :=  4611686018427387903; ok := ok and raisesOverflowError(num *:= intExpr(                   3));
3438    num :=  3074457345618258603; ok := ok and raisesOverflowError(num *:= intExpr(                   3));
3439    num :=  3074457345618258602; ok := ok and raisesOverflowError(num *:= intExpr(                   4));
3440    num :=   838488366986797801; ok := ok and raisesOverflowError(num *:= intExpr(                  11));
3441    num :=   838488366986797800; ok := ok and raisesOverflowError(num *:= intExpr(                  12));
3442    num :=    10762394442070917; ok := ok and raisesOverflowError(num *:= intExpr(                 857));
3443    num :=    10762394442070916; ok := ok and raisesOverflowError(num *:= intExpr(                 858));
3444    num :=     1988224194191588; ok := ok and raisesOverflowError(num *:= intExpr(                4639));
3445    num :=     1988224194191587; ok := ok and raisesOverflowError(num *:= intExpr(                4640));
3446    num :=      240989001041329; ok := ok and raisesOverflowError(num *:= intExpr(               38273));
3447    num :=      240989001041328; ok := ok and raisesOverflowError(num *:= intExpr(               38274));
3448    num :=       14312161101688; ok := ok and raisesOverflowError(num *:= intExpr(              644443));
3449    num :=       14312161101687; ok := ok and raisesOverflowError(num *:= intExpr(              644444));
3450    num :=         933865493038; ok := ok and raisesOverflowError(num *:= intExpr(             9876553));
3451    num :=         933865493037; ok := ok and raisesOverflowError(num *:= intExpr(             9876554));
3452    num :=         747094709114; ok := ok and raisesOverflowError(num *:= intExpr(            12345653));
3453    num :=         747094709113; ok := ok and raisesOverflowError(num *:= intExpr(            12345654));
3454    num :=          74709312969; ok := ok and raisesOverflowError(num *:= intExpr(           123456791));
3455    num :=          74709312968; ok := ok and raisesOverflowError(num *:= intExpr(           123456792));
3456    num :=           3037000500; ok := ok and raisesOverflowError(num *:= intExpr(          3037000500));
3457    num :=            123456792; ok := ok and raisesOverflowError(num *:= intExpr(         74709312968));
3458    num :=            123456791; ok := ok and raisesOverflowError(num *:= intExpr(         74709312969));
3459    num :=             12345654; ok := ok and raisesOverflowError(num *:= intExpr(        747094709113));
3460    num :=             12345653; ok := ok and raisesOverflowError(num *:= intExpr(        747094709114));
3461    num :=              9876554; ok := ok and raisesOverflowError(num *:= intExpr(        933865493037));
3462    num :=              9876553; ok := ok and raisesOverflowError(num *:= intExpr(        933865493038));
3463    num :=               644444; ok := ok and raisesOverflowError(num *:= intExpr(      14312161101687));
3464    num :=               644443; ok := ok and raisesOverflowError(num *:= intExpr(      14312161101688));
3465    num :=                38274; ok := ok and raisesOverflowError(num *:= intExpr(     240989001041328));
3466    num :=                38273; ok := ok and raisesOverflowError(num *:= intExpr(     240989001041329));
3467    num :=                 4640; ok := ok and raisesOverflowError(num *:= intExpr(    1988224194191587));
3468    num :=                 4639; ok := ok and raisesOverflowError(num *:= intExpr(    1988224194191588));
3469    num :=                  858; ok := ok and raisesOverflowError(num *:= intExpr(   10762394442070916));
3470    num :=                  857; ok := ok and raisesOverflowError(num *:= intExpr(   10762394442070917));
3471    num :=                   12; ok := ok and raisesOverflowError(num *:= intExpr(  838488366986797800));
3472    num :=                   11; ok := ok and raisesOverflowError(num *:= intExpr(  838488366986797801));
3473    num :=                    4; ok := ok and raisesOverflowError(num *:= intExpr( 3074457345618258602));
3474    num :=                    3; ok := ok and raisesOverflowError(num *:= intExpr( 3074457345618258603));
3475    num :=                    3; ok := ok and raisesOverflowError(num *:= intExpr( 4611686018427387903));
3476    num :=                    2; ok := ok and raisesOverflowError(num *:= intExpr( 4611686018427387904));
3477    if not ok then
3478      writeln(" ***** Overflow when computing multiplication assignment does not raise OVERFLOW_ERROR. (2)");
3479      okay := FALSE;
3480    end if;
3481  end func;
3482
3483
3484const func boolean: check_mult_assign_3 is func
3485  result
3486    var boolean: okay is TRUE;
3487  local
3488    var boolean: ok is TRUE;
3489    var array integer: arr is [] (0);
3490  begin
3491    arr[1] := -4611686018427387905; ok := ok and raisesOverflowError(arr[1] *:=                    2);
3492    arr[1] := -4611686018427387904; ok := ok and raisesOverflowError(arr[1] *:=                    3);
3493    arr[1] := -3074457345618258603; ok := ok and raisesOverflowError(arr[1] *:=                    3);
3494    arr[1] := -3074457345618258602; ok := ok and raisesOverflowError(arr[1] *:=                    4);
3495    arr[1] :=  -838488366986797801; ok := ok and raisesOverflowError(arr[1] *:=                   11);
3496    arr[1] :=  -838488366986797800; ok := ok and raisesOverflowError(arr[1] *:=                   12);
3497    arr[1] :=   -10762394442070917; ok := ok and raisesOverflowError(arr[1] *:=                  857);
3498    arr[1] :=   -10762394442070916; ok := ok and raisesOverflowError(arr[1] *:=                  858);
3499    arr[1] :=    -1988224194191588; ok := ok and raisesOverflowError(arr[1] *:=                 4639);
3500    arr[1] :=    -1988224194191587; ok := ok and raisesOverflowError(arr[1] *:=                 4640);
3501    arr[1] :=     -240989001041329; ok := ok and raisesOverflowError(arr[1] *:=                38273);
3502    arr[1] :=     -240989001041328; ok := ok and raisesOverflowError(arr[1] *:=                38274);
3503    arr[1] :=      -14312161101688; ok := ok and raisesOverflowError(arr[1] *:=               644443);
3504    arr[1] :=      -14312161101687; ok := ok and raisesOverflowError(arr[1] *:=               644444);
3505    arr[1] :=        -933865493038; ok := ok and raisesOverflowError(arr[1] *:=              9876553);
3506    arr[1] :=        -933865493037; ok := ok and raisesOverflowError(arr[1] *:=              9876554);
3507    arr[1] :=        -747094709114; ok := ok and raisesOverflowError(arr[1] *:=             12345653);
3508    arr[1] :=        -747094709113; ok := ok and raisesOverflowError(arr[1] *:=             12345654);
3509    arr[1] :=         -74709312969; ok := ok and raisesOverflowError(arr[1] *:=            123456791);
3510    arr[1] :=         -74709312968; ok := ok and raisesOverflowError(arr[1] *:=            123456792);
3511    arr[1] :=          -3037000500; ok := ok and raisesOverflowError(arr[1] *:=           3037000500);
3512    arr[1] :=           -123456792; ok := ok and raisesOverflowError(arr[1] *:=          74709312968);
3513    arr[1] :=           -123456791; ok := ok and raisesOverflowError(arr[1] *:=          74709312969);
3514    arr[1] :=            -12345654; ok := ok and raisesOverflowError(arr[1] *:=         747094709113);
3515    arr[1] :=            -12345653; ok := ok and raisesOverflowError(arr[1] *:=         747094709114);
3516    arr[1] :=             -9876554; ok := ok and raisesOverflowError(arr[1] *:=         933865493037);
3517    arr[1] :=             -9876553; ok := ok and raisesOverflowError(arr[1] *:=         933865493038);
3518    arr[1] :=              -644444; ok := ok and raisesOverflowError(arr[1] *:=       14312161101687);
3519    arr[1] :=              -644443; ok := ok and raisesOverflowError(arr[1] *:=       14312161101688);
3520    arr[1] :=               -38274; ok := ok and raisesOverflowError(arr[1] *:=      240989001041328);
3521    arr[1] :=               -38273; ok := ok and raisesOverflowError(arr[1] *:=      240989001041329);
3522    arr[1] :=                -4640; ok := ok and raisesOverflowError(arr[1] *:=     1988224194191587);
3523    arr[1] :=                -4639; ok := ok and raisesOverflowError(arr[1] *:=     1988224194191588);
3524    arr[1] :=                 -858; ok := ok and raisesOverflowError(arr[1] *:=    10762394442070916);
3525    arr[1] :=                 -857; ok := ok and raisesOverflowError(arr[1] *:=    10762394442070917);
3526    arr[1] :=                  -12; ok := ok and raisesOverflowError(arr[1] *:=   838488366986797800);
3527    arr[1] :=                  -11; ok := ok and raisesOverflowError(arr[1] *:=   838488366986797801);
3528    arr[1] :=                   -4; ok := ok and raisesOverflowError(arr[1] *:=  3074457345618258602);
3529    arr[1] :=                   -3; ok := ok and raisesOverflowError(arr[1] *:=  3074457345618258603);
3530    arr[1] :=                   -3; ok := ok and raisesOverflowError(arr[1] *:=  4611686018427387904);
3531    arr[1] :=                   -2; ok := ok and raisesOverflowError(arr[1] *:=  4611686018427387905);
3532    arr[1] :=  4611686018427387905; ok := ok and raisesOverflowError(arr[1] *:=                   -2);
3533    arr[1] :=  4611686018427387904; ok := ok and raisesOverflowError(arr[1] *:=                   -3);
3534    arr[1] :=  3074457345618258603; ok := ok and raisesOverflowError(arr[1] *:=                   -3);
3535    arr[1] :=  3074457345618258602; ok := ok and raisesOverflowError(arr[1] *:=                   -4);
3536    arr[1] :=   838488366986797801; ok := ok and raisesOverflowError(arr[1] *:=                  -11);
3537    arr[1] :=   838488366986797800; ok := ok and raisesOverflowError(arr[1] *:=                  -12);
3538    arr[1] :=    10762394442070917; ok := ok and raisesOverflowError(arr[1] *:=                 -857);
3539    arr[1] :=    10762394442070916; ok := ok and raisesOverflowError(arr[1] *:=                 -858);
3540    arr[1] :=     1988224194191588; ok := ok and raisesOverflowError(arr[1] *:=                -4639);
3541    arr[1] :=     1988224194191587; ok := ok and raisesOverflowError(arr[1] *:=                -4640);
3542    arr[1] :=      240989001041329; ok := ok and raisesOverflowError(arr[1] *:=               -38273);
3543    arr[1] :=      240989001041328; ok := ok and raisesOverflowError(arr[1] *:=               -38274);
3544    arr[1] :=       14312161101688; ok := ok and raisesOverflowError(arr[1] *:=              -644443);
3545    arr[1] :=       14312161101687; ok := ok and raisesOverflowError(arr[1] *:=              -644444);
3546    arr[1] :=         933865493038; ok := ok and raisesOverflowError(arr[1] *:=             -9876553);
3547    arr[1] :=         933865493037; ok := ok and raisesOverflowError(arr[1] *:=             -9876554);
3548    arr[1] :=         747094709114; ok := ok and raisesOverflowError(arr[1] *:=            -12345653);
3549    arr[1] :=         747094709113; ok := ok and raisesOverflowError(arr[1] *:=            -12345654);
3550    arr[1] :=          74709312969; ok := ok and raisesOverflowError(arr[1] *:=           -123456791);
3551    arr[1] :=          74709312968; ok := ok and raisesOverflowError(arr[1] *:=           -123456792);
3552    arr[1] :=           3037000500; ok := ok and raisesOverflowError(arr[1] *:=          -3037000500);
3553    arr[1] :=            123456792; ok := ok and raisesOverflowError(arr[1] *:=         -74709312968);
3554    arr[1] :=            123456791; ok := ok and raisesOverflowError(arr[1] *:=         -74709312969);
3555    arr[1] :=             12345654; ok := ok and raisesOverflowError(arr[1] *:=        -747094709113);
3556    arr[1] :=             12345653; ok := ok and raisesOverflowError(arr[1] *:=        -747094709114);
3557    arr[1] :=              9876554; ok := ok and raisesOverflowError(arr[1] *:=        -933865493037);
3558    arr[1] :=              9876553; ok := ok and raisesOverflowError(arr[1] *:=        -933865493038);
3559    arr[1] :=               644444; ok := ok and raisesOverflowError(arr[1] *:=      -14312161101687);
3560    arr[1] :=               644443; ok := ok and raisesOverflowError(arr[1] *:=      -14312161101688);
3561    arr[1] :=                38274; ok := ok and raisesOverflowError(arr[1] *:=     -240989001041328);
3562    arr[1] :=                38273; ok := ok and raisesOverflowError(arr[1] *:=     -240989001041329);
3563    arr[1] :=                 4640; ok := ok and raisesOverflowError(arr[1] *:=    -1988224194191587);
3564    arr[1] :=                 4639; ok := ok and raisesOverflowError(arr[1] *:=    -1988224194191588);
3565    arr[1] :=                  858; ok := ok and raisesOverflowError(arr[1] *:=   -10762394442070916);
3566    arr[1] :=                  857; ok := ok and raisesOverflowError(arr[1] *:=   -10762394442070917);
3567    arr[1] :=                   12; ok := ok and raisesOverflowError(arr[1] *:=  -838488366986797800);
3568    arr[1] :=                   11; ok := ok and raisesOverflowError(arr[1] *:=  -838488366986797801);
3569    arr[1] :=                    4; ok := ok and raisesOverflowError(arr[1] *:= -3074457345618258602);
3570    arr[1] :=                    3; ok := ok and raisesOverflowError(arr[1] *:= -3074457345618258603);
3571    arr[1] :=                    3; ok := ok and raisesOverflowError(arr[1] *:= -4611686018427387904);
3572    arr[1] :=                    2; ok := ok and raisesOverflowError(arr[1] *:= -4611686018427387905);
3573    if not ok then
3574      writeln(" ***** Underflow when computing multiplication assignment does not raise OVERFLOW_ERROR. (3)");
3575      okay := FALSE;
3576    end if;
3577
3578    ok := TRUE;
3579    arr[1] :=            INT64_MIN; ok := ok and raisesOverflowError(arr[1] *:=                   -1);
3580    arr[1] := -4611686018427387904; ok := ok and raisesOverflowError(arr[1] *:=                   -2);
3581    arr[1] := -4611686018427387903; ok := ok and raisesOverflowError(arr[1] *:=                   -3);
3582    arr[1] := -3074457345618258603; ok := ok and raisesOverflowError(arr[1] *:=                   -3);
3583    arr[1] := -3074457345618258602; ok := ok and raisesOverflowError(arr[1] *:=                   -4);
3584    arr[1] :=  -838488366986797801; ok := ok and raisesOverflowError(arr[1] *:=                  -11);
3585    arr[1] :=  -838488366986797800; ok := ok and raisesOverflowError(arr[1] *:=                  -12);
3586    arr[1] :=   -10762394442070917; ok := ok and raisesOverflowError(arr[1] *:=                 -857);
3587    arr[1] :=   -10762394442070916; ok := ok and raisesOverflowError(arr[1] *:=                 -858);
3588    arr[1] :=    -1988224194191588; ok := ok and raisesOverflowError(arr[1] *:=                -4639);
3589    arr[1] :=    -1988224194191587; ok := ok and raisesOverflowError(arr[1] *:=                -4640);
3590    arr[1] :=     -240989001041329; ok := ok and raisesOverflowError(arr[1] *:=               -38273);
3591    arr[1] :=     -240989001041328; ok := ok and raisesOverflowError(arr[1] *:=               -38274);
3592    arr[1] :=      -14312161101688; ok := ok and raisesOverflowError(arr[1] *:=              -644443);
3593    arr[1] :=      -14312161101687; ok := ok and raisesOverflowError(arr[1] *:=              -644444);
3594    arr[1] :=        -933865493038; ok := ok and raisesOverflowError(arr[1] *:=             -9876553);
3595    arr[1] :=        -933865493037; ok := ok and raisesOverflowError(arr[1] *:=             -9876554);
3596    arr[1] :=        -747094709114; ok := ok and raisesOverflowError(arr[1] *:=            -12345653);
3597    arr[1] :=        -747094709113; ok := ok and raisesOverflowError(arr[1] *:=            -12345654);
3598    arr[1] :=         -74709312969; ok := ok and raisesOverflowError(arr[1] *:=           -123456791);
3599    arr[1] :=         -74709312968; ok := ok and raisesOverflowError(arr[1] *:=           -123456792);
3600    arr[1] :=          -3037000500; ok := ok and raisesOverflowError(arr[1] *:=          -3037000500);
3601    arr[1] :=           -123456792; ok := ok and raisesOverflowError(arr[1] *:=         -74709312968);
3602    arr[1] :=           -123456791; ok := ok and raisesOverflowError(arr[1] *:=         -74709312969);
3603    arr[1] :=            -12345654; ok := ok and raisesOverflowError(arr[1] *:=        -747094709113);
3604    arr[1] :=            -12345653; ok := ok and raisesOverflowError(arr[1] *:=        -747094709114);
3605    arr[1] :=             -9876554; ok := ok and raisesOverflowError(arr[1] *:=        -933865493037);
3606    arr[1] :=             -9876553; ok := ok and raisesOverflowError(arr[1] *:=        -933865493038);
3607    arr[1] :=              -644444; ok := ok and raisesOverflowError(arr[1] *:=      -14312161101687);
3608    arr[1] :=              -644443; ok := ok and raisesOverflowError(arr[1] *:=      -14312161101688);
3609    arr[1] :=               -38274; ok := ok and raisesOverflowError(arr[1] *:=     -240989001041328);
3610    arr[1] :=               -38273; ok := ok and raisesOverflowError(arr[1] *:=     -240989001041329);
3611    arr[1] :=                -4640; ok := ok and raisesOverflowError(arr[1] *:=    -1988224194191587);
3612    arr[1] :=                -4639; ok := ok and raisesOverflowError(arr[1] *:=    -1988224194191588);
3613    arr[1] :=                 -858; ok := ok and raisesOverflowError(arr[1] *:=   -10762394442070916);
3614    arr[1] :=                 -857; ok := ok and raisesOverflowError(arr[1] *:=   -10762394442070917);
3615    arr[1] :=                  -12; ok := ok and raisesOverflowError(arr[1] *:=  -838488366986797800);
3616    arr[1] :=                  -11; ok := ok and raisesOverflowError(arr[1] *:=  -838488366986797801);
3617    arr[1] :=                   -4; ok := ok and raisesOverflowError(arr[1] *:= -3074457345618258602);
3618    arr[1] :=                   -3; ok := ok and raisesOverflowError(arr[1] *:= -3074457345618258603);
3619    arr[1] :=                   -3; ok := ok and raisesOverflowError(arr[1] *:= -4611686018427387903);
3620    arr[1] :=                   -2; ok := ok and raisesOverflowError(arr[1] *:= -4611686018427387904);
3621    arr[1] :=  4611686018427387904; ok := ok and raisesOverflowError(arr[1] *:=                    2);
3622    arr[1] :=  4611686018427387903; ok := ok and raisesOverflowError(arr[1] *:=                    3);
3623    arr[1] :=  3074457345618258603; ok := ok and raisesOverflowError(arr[1] *:=                    3);
3624    arr[1] :=  3074457345618258602; ok := ok and raisesOverflowError(arr[1] *:=                    4);
3625    arr[1] :=   838488366986797801; ok := ok and raisesOverflowError(arr[1] *:=                   11);
3626    arr[1] :=   838488366986797800; ok := ok and raisesOverflowError(arr[1] *:=                   12);
3627    arr[1] :=    10762394442070917; ok := ok and raisesOverflowError(arr[1] *:=                  857);
3628    arr[1] :=    10762394442070916; ok := ok and raisesOverflowError(arr[1] *:=                  858);
3629    arr[1] :=     1988224194191588; ok := ok and raisesOverflowError(arr[1] *:=                 4639);
3630    arr[1] :=     1988224194191587; ok := ok and raisesOverflowError(arr[1] *:=                 4640);
3631    arr[1] :=      240989001041329; ok := ok and raisesOverflowError(arr[1] *:=                38273);
3632    arr[1] :=      240989001041328; ok := ok and raisesOverflowError(arr[1] *:=                38274);
3633    arr[1] :=       14312161101688; ok := ok and raisesOverflowError(arr[1] *:=               644443);
3634    arr[1] :=       14312161101687; ok := ok and raisesOverflowError(arr[1] *:=               644444);
3635    arr[1] :=         933865493038; ok := ok and raisesOverflowError(arr[1] *:=              9876553);
3636    arr[1] :=         933865493037; ok := ok and raisesOverflowError(arr[1] *:=              9876554);
3637    arr[1] :=         747094709114; ok := ok and raisesOverflowError(arr[1] *:=             12345653);
3638    arr[1] :=         747094709113; ok := ok and raisesOverflowError(arr[1] *:=             12345654);
3639    arr[1] :=          74709312969; ok := ok and raisesOverflowError(arr[1] *:=            123456791);
3640    arr[1] :=          74709312968; ok := ok and raisesOverflowError(arr[1] *:=            123456792);
3641    arr[1] :=           3037000500; ok := ok and raisesOverflowError(arr[1] *:=           3037000500);
3642    arr[1] :=            123456792; ok := ok and raisesOverflowError(arr[1] *:=          74709312968);
3643    arr[1] :=            123456791; ok := ok and raisesOverflowError(arr[1] *:=          74709312969);
3644    arr[1] :=             12345654; ok := ok and raisesOverflowError(arr[1] *:=         747094709113);
3645    arr[1] :=             12345653; ok := ok and raisesOverflowError(arr[1] *:=         747094709114);
3646    arr[1] :=              9876554; ok := ok and raisesOverflowError(arr[1] *:=         933865493037);
3647    arr[1] :=              9876553; ok := ok and raisesOverflowError(arr[1] *:=         933865493038);
3648    arr[1] :=               644444; ok := ok and raisesOverflowError(arr[1] *:=       14312161101687);
3649    arr[1] :=               644443; ok := ok and raisesOverflowError(arr[1] *:=       14312161101688);
3650    arr[1] :=                38274; ok := ok and raisesOverflowError(arr[1] *:=      240989001041328);
3651    arr[1] :=                38273; ok := ok and raisesOverflowError(arr[1] *:=      240989001041329);
3652    arr[1] :=                 4640; ok := ok and raisesOverflowError(arr[1] *:=     1988224194191587);
3653    arr[1] :=                 4639; ok := ok and raisesOverflowError(arr[1] *:=     1988224194191588);
3654    arr[1] :=                  858; ok := ok and raisesOverflowError(arr[1] *:=    10762394442070916);
3655    arr[1] :=                  857; ok := ok and raisesOverflowError(arr[1] *:=    10762394442070917);
3656    arr[1] :=                   12; ok := ok and raisesOverflowError(arr[1] *:=   838488366986797800);
3657    arr[1] :=                   11; ok := ok and raisesOverflowError(arr[1] *:=   838488366986797801);
3658    arr[1] :=                    4; ok := ok and raisesOverflowError(arr[1] *:=  3074457345618258602);
3659    arr[1] :=                    3; ok := ok and raisesOverflowError(arr[1] *:=  3074457345618258603);
3660    arr[1] :=                    3; ok := ok and raisesOverflowError(arr[1] *:=  4611686018427387903);
3661    arr[1] :=                    2; ok := ok and raisesOverflowError(arr[1] *:=  4611686018427387904);
3662    if not ok then
3663      writeln(" ***** Overflow when computing multiplication assignment does not raise OVERFLOW_ERROR. (3)");
3664      okay := FALSE;
3665    end if;
3666  end func;
3667
3668
3669const func boolean: check_mult_assign_4 is func
3670  result
3671    var boolean: okay is TRUE;
3672  local
3673    var boolean: ok is TRUE;
3674    var array integer: arr is [] (0);
3675  begin
3676    arr[1] := -4611686018427387905; ok := ok and raisesOverflowError(arr[1] *:= intExpr(                   2));
3677    arr[1] := -4611686018427387904; ok := ok and raisesOverflowError(arr[1] *:= intExpr(                   3));
3678    arr[1] := -3074457345618258603; ok := ok and raisesOverflowError(arr[1] *:= intExpr(                   3));
3679    arr[1] := -3074457345618258602; ok := ok and raisesOverflowError(arr[1] *:= intExpr(                   4));
3680    arr[1] :=  -838488366986797801; ok := ok and raisesOverflowError(arr[1] *:= intExpr(                  11));
3681    arr[1] :=  -838488366986797800; ok := ok and raisesOverflowError(arr[1] *:= intExpr(                  12));
3682    arr[1] :=   -10762394442070917; ok := ok and raisesOverflowError(arr[1] *:= intExpr(                 857));
3683    arr[1] :=   -10762394442070916; ok := ok and raisesOverflowError(arr[1] *:= intExpr(                 858));
3684    arr[1] :=    -1988224194191588; ok := ok and raisesOverflowError(arr[1] *:= intExpr(                4639));
3685    arr[1] :=    -1988224194191587; ok := ok and raisesOverflowError(arr[1] *:= intExpr(                4640));
3686    arr[1] :=     -240989001041329; ok := ok and raisesOverflowError(arr[1] *:= intExpr(               38273));
3687    arr[1] :=     -240989001041328; ok := ok and raisesOverflowError(arr[1] *:= intExpr(               38274));
3688    arr[1] :=      -14312161101688; ok := ok and raisesOverflowError(arr[1] *:= intExpr(              644443));
3689    arr[1] :=      -14312161101687; ok := ok and raisesOverflowError(arr[1] *:= intExpr(              644444));
3690    arr[1] :=        -933865493038; ok := ok and raisesOverflowError(arr[1] *:= intExpr(             9876553));
3691    arr[1] :=        -933865493037; ok := ok and raisesOverflowError(arr[1] *:= intExpr(             9876554));
3692    arr[1] :=        -747094709114; ok := ok and raisesOverflowError(arr[1] *:= intExpr(            12345653));
3693    arr[1] :=        -747094709113; ok := ok and raisesOverflowError(arr[1] *:= intExpr(            12345654));
3694    arr[1] :=         -74709312969; ok := ok and raisesOverflowError(arr[1] *:= intExpr(           123456791));
3695    arr[1] :=         -74709312968; ok := ok and raisesOverflowError(arr[1] *:= intExpr(           123456792));
3696    arr[1] :=          -3037000500; ok := ok and raisesOverflowError(arr[1] *:= intExpr(          3037000500));
3697    arr[1] :=           -123456792; ok := ok and raisesOverflowError(arr[1] *:= intExpr(         74709312968));
3698    arr[1] :=           -123456791; ok := ok and raisesOverflowError(arr[1] *:= intExpr(         74709312969));
3699    arr[1] :=            -12345654; ok := ok and raisesOverflowError(arr[1] *:= intExpr(        747094709113));
3700    arr[1] :=            -12345653; ok := ok and raisesOverflowError(arr[1] *:= intExpr(        747094709114));
3701    arr[1] :=             -9876554; ok := ok and raisesOverflowError(arr[1] *:= intExpr(        933865493037));
3702    arr[1] :=             -9876553; ok := ok and raisesOverflowError(arr[1] *:= intExpr(        933865493038));
3703    arr[1] :=              -644444; ok := ok and raisesOverflowError(arr[1] *:= intExpr(      14312161101687));
3704    arr[1] :=              -644443; ok := ok and raisesOverflowError(arr[1] *:= intExpr(      14312161101688));
3705    arr[1] :=               -38274; ok := ok and raisesOverflowError(arr[1] *:= intExpr(     240989001041328));
3706    arr[1] :=               -38273; ok := ok and raisesOverflowError(arr[1] *:= intExpr(     240989001041329));
3707    arr[1] :=                -4640; ok := ok and raisesOverflowError(arr[1] *:= intExpr(    1988224194191587));
3708    arr[1] :=                -4639; ok := ok and raisesOverflowError(arr[1] *:= intExpr(    1988224194191588));
3709    arr[1] :=                 -858; ok := ok and raisesOverflowError(arr[1] *:= intExpr(   10762394442070916));
3710    arr[1] :=                 -857; ok := ok and raisesOverflowError(arr[1] *:= intExpr(   10762394442070917));
3711    arr[1] :=                  -12; ok := ok and raisesOverflowError(arr[1] *:= intExpr(  838488366986797800));
3712    arr[1] :=                  -11; ok := ok and raisesOverflowError(arr[1] *:= intExpr(  838488366986797801));
3713    arr[1] :=                   -4; ok := ok and raisesOverflowError(arr[1] *:= intExpr( 3074457345618258602));
3714    arr[1] :=                   -3; ok := ok and raisesOverflowError(arr[1] *:= intExpr( 3074457345618258603));
3715    arr[1] :=                   -3; ok := ok and raisesOverflowError(arr[1] *:= intExpr( 4611686018427387904));
3716    arr[1] :=                   -2; ok := ok and raisesOverflowError(arr[1] *:= intExpr( 4611686018427387905));
3717    arr[1] :=  4611686018427387905; ok := ok and raisesOverflowError(arr[1] *:= intExpr(                  -2));
3718    arr[1] :=  4611686018427387904; ok := ok and raisesOverflowError(arr[1] *:= intExpr(                  -3));
3719    arr[1] :=  3074457345618258603; ok := ok and raisesOverflowError(arr[1] *:= intExpr(                  -3));
3720    arr[1] :=  3074457345618258602; ok := ok and raisesOverflowError(arr[1] *:= intExpr(                  -4));
3721    arr[1] :=   838488366986797801; ok := ok and raisesOverflowError(arr[1] *:= intExpr(                 -11));
3722    arr[1] :=   838488366986797800; ok := ok and raisesOverflowError(arr[1] *:= intExpr(                 -12));
3723    arr[1] :=    10762394442070917; ok := ok and raisesOverflowError(arr[1] *:= intExpr(                -857));
3724    arr[1] :=    10762394442070916; ok := ok and raisesOverflowError(arr[1] *:= intExpr(                -858));
3725    arr[1] :=     1988224194191588; ok := ok and raisesOverflowError(arr[1] *:= intExpr(               -4639));
3726    arr[1] :=     1988224194191587; ok := ok and raisesOverflowError(arr[1] *:= intExpr(               -4640));
3727    arr[1] :=      240989001041329; ok := ok and raisesOverflowError(arr[1] *:= intExpr(              -38273));
3728    arr[1] :=      240989001041328; ok := ok and raisesOverflowError(arr[1] *:= intExpr(              -38274));
3729    arr[1] :=       14312161101688; ok := ok and raisesOverflowError(arr[1] *:= intExpr(             -644443));
3730    arr[1] :=       14312161101687; ok := ok and raisesOverflowError(arr[1] *:= intExpr(             -644444));
3731    arr[1] :=         933865493038; ok := ok and raisesOverflowError(arr[1] *:= intExpr(            -9876553));
3732    arr[1] :=         933865493037; ok := ok and raisesOverflowError(arr[1] *:= intExpr(            -9876554));
3733    arr[1] :=         747094709114; ok := ok and raisesOverflowError(arr[1] *:= intExpr(           -12345653));
3734    arr[1] :=         747094709113; ok := ok and raisesOverflowError(arr[1] *:= intExpr(           -12345654));
3735    arr[1] :=          74709312969; ok := ok and raisesOverflowError(arr[1] *:= intExpr(          -123456791));
3736    arr[1] :=          74709312968; ok := ok and raisesOverflowError(arr[1] *:= intExpr(          -123456792));
3737    arr[1] :=           3037000500; ok := ok and raisesOverflowError(arr[1] *:= intExpr(         -3037000500));
3738    arr[1] :=            123456792; ok := ok and raisesOverflowError(arr[1] *:= intExpr(        -74709312968));
3739    arr[1] :=            123456791; ok := ok and raisesOverflowError(arr[1] *:= intExpr(        -74709312969));
3740    arr[1] :=             12345654; ok := ok and raisesOverflowError(arr[1] *:= intExpr(       -747094709113));
3741    arr[1] :=             12345653; ok := ok and raisesOverflowError(arr[1] *:= intExpr(       -747094709114));
3742    arr[1] :=              9876554; ok := ok and raisesOverflowError(arr[1] *:= intExpr(       -933865493037));
3743    arr[1] :=              9876553; ok := ok and raisesOverflowError(arr[1] *:= intExpr(       -933865493038));
3744    arr[1] :=               644444; ok := ok and raisesOverflowError(arr[1] *:= intExpr(     -14312161101687));
3745    arr[1] :=               644443; ok := ok and raisesOverflowError(arr[1] *:= intExpr(     -14312161101688));
3746    arr[1] :=                38274; ok := ok and raisesOverflowError(arr[1] *:= intExpr(    -240989001041328));
3747    arr[1] :=                38273; ok := ok and raisesOverflowError(arr[1] *:= intExpr(    -240989001041329));
3748    arr[1] :=                 4640; ok := ok and raisesOverflowError(arr[1] *:= intExpr(   -1988224194191587));
3749    arr[1] :=                 4639; ok := ok and raisesOverflowError(arr[1] *:= intExpr(   -1988224194191588));
3750    arr[1] :=                  858; ok := ok and raisesOverflowError(arr[1] *:= intExpr(  -10762394442070916));
3751    arr[1] :=                  857; ok := ok and raisesOverflowError(arr[1] *:= intExpr(  -10762394442070917));
3752    arr[1] :=                   12; ok := ok and raisesOverflowError(arr[1] *:= intExpr( -838488366986797800));
3753    arr[1] :=                   11; ok := ok and raisesOverflowError(arr[1] *:= intExpr( -838488366986797801));
3754    arr[1] :=                    4; ok := ok and raisesOverflowError(arr[1] *:= intExpr(-3074457345618258602));
3755    arr[1] :=                    3; ok := ok and raisesOverflowError(arr[1] *:= intExpr(-3074457345618258603));
3756    arr[1] :=                    3; ok := ok and raisesOverflowError(arr[1] *:= intExpr(-4611686018427387904));
3757    arr[1] :=                    2; ok := ok and raisesOverflowError(arr[1] *:= intExpr(-4611686018427387905));
3758    if not ok then
3759      writeln(" ***** Underflow when computing multiplication assignment does not raise OVERFLOW_ERROR. (4)");
3760      okay := FALSE;
3761    end if;
3762
3763    ok := TRUE;
3764    arr[1] :=            INT64_MIN; ok := ok and raisesOverflowError(arr[1] *:= intExpr(                  -1));
3765    arr[1] := -4611686018427387904; ok := ok and raisesOverflowError(arr[1] *:= intExpr(                  -2));
3766    arr[1] := -4611686018427387903; ok := ok and raisesOverflowError(arr[1] *:= intExpr(                  -3));
3767    arr[1] := -3074457345618258603; ok := ok and raisesOverflowError(arr[1] *:= intExpr(                  -3));
3768    arr[1] := -3074457345618258602; ok := ok and raisesOverflowError(arr[1] *:= intExpr(                  -4));
3769    arr[1] :=  -838488366986797801; ok := ok and raisesOverflowError(arr[1] *:= intExpr(                 -11));
3770    arr[1] :=  -838488366986797800; ok := ok and raisesOverflowError(arr[1] *:= intExpr(                 -12));
3771    arr[1] :=   -10762394442070917; ok := ok and raisesOverflowError(arr[1] *:= intExpr(                -857));
3772    arr[1] :=   -10762394442070916; ok := ok and raisesOverflowError(arr[1] *:= intExpr(                -858));
3773    arr[1] :=    -1988224194191588; ok := ok and raisesOverflowError(arr[1] *:= intExpr(               -4639));
3774    arr[1] :=    -1988224194191587; ok := ok and raisesOverflowError(arr[1] *:= intExpr(               -4640));
3775    arr[1] :=     -240989001041329; ok := ok and raisesOverflowError(arr[1] *:= intExpr(              -38273));
3776    arr[1] :=     -240989001041328; ok := ok and raisesOverflowError(arr[1] *:= intExpr(              -38274));
3777    arr[1] :=      -14312161101688; ok := ok and raisesOverflowError(arr[1] *:= intExpr(             -644443));
3778    arr[1] :=      -14312161101687; ok := ok and raisesOverflowError(arr[1] *:= intExpr(             -644444));
3779    arr[1] :=        -933865493038; ok := ok and raisesOverflowError(arr[1] *:= intExpr(            -9876553));
3780    arr[1] :=        -933865493037; ok := ok and raisesOverflowError(arr[1] *:= intExpr(            -9876554));
3781    arr[1] :=        -747094709114; ok := ok and raisesOverflowError(arr[1] *:= intExpr(           -12345653));
3782    arr[1] :=        -747094709113; ok := ok and raisesOverflowError(arr[1] *:= intExpr(           -12345654));
3783    arr[1] :=         -74709312969; ok := ok and raisesOverflowError(arr[1] *:= intExpr(          -123456791));
3784    arr[1] :=         -74709312968; ok := ok and raisesOverflowError(arr[1] *:= intExpr(          -123456792));
3785    arr[1] :=          -3037000500; ok := ok and raisesOverflowError(arr[1] *:= intExpr(         -3037000500));
3786    arr[1] :=           -123456792; ok := ok and raisesOverflowError(arr[1] *:= intExpr(        -74709312968));
3787    arr[1] :=           -123456791; ok := ok and raisesOverflowError(arr[1] *:= intExpr(        -74709312969));
3788    arr[1] :=            -12345654; ok := ok and raisesOverflowError(arr[1] *:= intExpr(       -747094709113));
3789    arr[1] :=            -12345653; ok := ok and raisesOverflowError(arr[1] *:= intExpr(       -747094709114));
3790    arr[1] :=             -9876554; ok := ok and raisesOverflowError(arr[1] *:= intExpr(       -933865493037));
3791    arr[1] :=             -9876553; ok := ok and raisesOverflowError(arr[1] *:= intExpr(       -933865493038));
3792    arr[1] :=              -644444; ok := ok and raisesOverflowError(arr[1] *:= intExpr(     -14312161101687));
3793    arr[1] :=              -644443; ok := ok and raisesOverflowError(arr[1] *:= intExpr(     -14312161101688));
3794    arr[1] :=               -38274; ok := ok and raisesOverflowError(arr[1] *:= intExpr(    -240989001041328));
3795    arr[1] :=               -38273; ok := ok and raisesOverflowError(arr[1] *:= intExpr(    -240989001041329));
3796    arr[1] :=                -4640; ok := ok and raisesOverflowError(arr[1] *:= intExpr(   -1988224194191587));
3797    arr[1] :=                -4639; ok := ok and raisesOverflowError(arr[1] *:= intExpr(   -1988224194191588));
3798    arr[1] :=                 -858; ok := ok and raisesOverflowError(arr[1] *:= intExpr(  -10762394442070916));
3799    arr[1] :=                 -857; ok := ok and raisesOverflowError(arr[1] *:= intExpr(  -10762394442070917));
3800    arr[1] :=                  -12; ok := ok and raisesOverflowError(arr[1] *:= intExpr( -838488366986797800));
3801    arr[1] :=                  -11; ok := ok and raisesOverflowError(arr[1] *:= intExpr( -838488366986797801));
3802    arr[1] :=                   -4; ok := ok and raisesOverflowError(arr[1] *:= intExpr(-3074457345618258602));
3803    arr[1] :=                   -3; ok := ok and raisesOverflowError(arr[1] *:= intExpr(-3074457345618258603));
3804    arr[1] :=                   -3; ok := ok and raisesOverflowError(arr[1] *:= intExpr(-4611686018427387903));
3805    arr[1] :=                   -2; ok := ok and raisesOverflowError(arr[1] *:= intExpr(-4611686018427387904));
3806    arr[1] :=  4611686018427387904; ok := ok and raisesOverflowError(arr[1] *:= intExpr(                   2));
3807    arr[1] :=  4611686018427387903; ok := ok and raisesOverflowError(arr[1] *:= intExpr(                   3));
3808    arr[1] :=  3074457345618258603; ok := ok and raisesOverflowError(arr[1] *:= intExpr(                   3));
3809    arr[1] :=  3074457345618258602; ok := ok and raisesOverflowError(arr[1] *:= intExpr(                   4));
3810    arr[1] :=   838488366986797801; ok := ok and raisesOverflowError(arr[1] *:= intExpr(                  11));
3811    arr[1] :=   838488366986797800; ok := ok and raisesOverflowError(arr[1] *:= intExpr(                  12));
3812    arr[1] :=    10762394442070917; ok := ok and raisesOverflowError(arr[1] *:= intExpr(                 857));
3813    arr[1] :=    10762394442070916; ok := ok and raisesOverflowError(arr[1] *:= intExpr(                 858));
3814    arr[1] :=     1988224194191588; ok := ok and raisesOverflowError(arr[1] *:= intExpr(                4639));
3815    arr[1] :=     1988224194191587; ok := ok and raisesOverflowError(arr[1] *:= intExpr(                4640));
3816    arr[1] :=      240989001041329; ok := ok and raisesOverflowError(arr[1] *:= intExpr(               38273));
3817    arr[1] :=      240989001041328; ok := ok and raisesOverflowError(arr[1] *:= intExpr(               38274));
3818    arr[1] :=       14312161101688; ok := ok and raisesOverflowError(arr[1] *:= intExpr(              644443));
3819    arr[1] :=       14312161101687; ok := ok and raisesOverflowError(arr[1] *:= intExpr(              644444));
3820    arr[1] :=         933865493038; ok := ok and raisesOverflowError(arr[1] *:= intExpr(             9876553));
3821    arr[1] :=         933865493037; ok := ok and raisesOverflowError(arr[1] *:= intExpr(             9876554));
3822    arr[1] :=         747094709114; ok := ok and raisesOverflowError(arr[1] *:= intExpr(            12345653));
3823    arr[1] :=         747094709113; ok := ok and raisesOverflowError(arr[1] *:= intExpr(            12345654));
3824    arr[1] :=          74709312969; ok := ok and raisesOverflowError(arr[1] *:= intExpr(           123456791));
3825    arr[1] :=          74709312968; ok := ok and raisesOverflowError(arr[1] *:= intExpr(           123456792));
3826    arr[1] :=           3037000500; ok := ok and raisesOverflowError(arr[1] *:= intExpr(          3037000500));
3827    arr[1] :=            123456792; ok := ok and raisesOverflowError(arr[1] *:= intExpr(         74709312968));
3828    arr[1] :=            123456791; ok := ok and raisesOverflowError(arr[1] *:= intExpr(         74709312969));
3829    arr[1] :=             12345654; ok := ok and raisesOverflowError(arr[1] *:= intExpr(        747094709113));
3830    arr[1] :=             12345653; ok := ok and raisesOverflowError(arr[1] *:= intExpr(        747094709114));
3831    arr[1] :=              9876554; ok := ok and raisesOverflowError(arr[1] *:= intExpr(        933865493037));
3832    arr[1] :=              9876553; ok := ok and raisesOverflowError(arr[1] *:= intExpr(        933865493038));
3833    arr[1] :=               644444; ok := ok and raisesOverflowError(arr[1] *:= intExpr(      14312161101687));
3834    arr[1] :=               644443; ok := ok and raisesOverflowError(arr[1] *:= intExpr(      14312161101688));
3835    arr[1] :=                38274; ok := ok and raisesOverflowError(arr[1] *:= intExpr(     240989001041328));
3836    arr[1] :=                38273; ok := ok and raisesOverflowError(arr[1] *:= intExpr(     240989001041329));
3837    arr[1] :=                 4640; ok := ok and raisesOverflowError(arr[1] *:= intExpr(    1988224194191587));
3838    arr[1] :=                 4639; ok := ok and raisesOverflowError(arr[1] *:= intExpr(    1988224194191588));
3839    arr[1] :=                  858; ok := ok and raisesOverflowError(arr[1] *:= intExpr(   10762394442070916));
3840    arr[1] :=                  857; ok := ok and raisesOverflowError(arr[1] *:= intExpr(   10762394442070917));
3841    arr[1] :=                   12; ok := ok and raisesOverflowError(arr[1] *:= intExpr(  838488366986797800));
3842    arr[1] :=                   11; ok := ok and raisesOverflowError(arr[1] *:= intExpr(  838488366986797801));
3843    arr[1] :=                    4; ok := ok and raisesOverflowError(arr[1] *:= intExpr( 3074457345618258602));
3844    arr[1] :=                    3; ok := ok and raisesOverflowError(arr[1] *:= intExpr( 3074457345618258603));
3845    arr[1] :=                    3; ok := ok and raisesOverflowError(arr[1] *:= intExpr( 4611686018427387903));
3846    arr[1] :=                    2; ok := ok and raisesOverflowError(arr[1] *:= intExpr( 4611686018427387904));
3847    if not ok then
3848      writeln(" ***** Overflow when computing multiplication assignment does not raise OVERFLOW_ERROR. (4)");
3849      okay := FALSE;
3850    end if;
3851  end func;
3852
3853
3854const proc: check_mult_assign is func
3855  begin
3856    if  check_mult_assign_1 and
3857        check_mult_assign_2 and
3858        check_mult_assign_3 and
3859        check_mult_assign_4 then
3860      writeln("Overflow checking of multiplication assignment works correct.");
3861    else
3862      writeln(" ***** Overflow checking of multiplication assignment does not work correct.");
3863    end if;
3864  end func;
3865
3866
3867const proc: check_div is func
3868  local
3869    var boolean: okay is TRUE;
3870  begin
3871    if  not raisesOverflowError(                      INT64_MIN   div         -1 ) or
3872        not raisesOverflowError(intExpr(              INT64_MIN)  div         -1 ) or
3873        not raisesOverflowError(                      INT64_MIN   div intExpr(-1)) or
3874        not raisesOverflowError(intExpr(              INT64_MIN)  div intExpr(-1)) or
3875        not raisesOverflowError(        (-9223372036854775807-1)  div         -1 ) or
3876        not raisesOverflowError(intExpr((-9223372036854775807-1)) div         -1 ) or
3877        not raisesOverflowError(        (-9223372036854775807-1)  div intExpr(-1)) or
3878        not raisesOverflowError(intExpr((-9223372036854775807-1)) div intExpr(-1)) then
3879      writeln(" ***** Computing -9223372036854775808 div -1 does not raise OVERFLOW_ERROR.");
3880      okay := FALSE;
3881    end if;
3882
3883    if okay then
3884      writeln("Overflow checking of div operator works correct.");
3885    else
3886      writeln(" ***** Overflow checking of div operator does not work correct.");
3887    end if;
3888  end func;
3889
3890
3891const proc: check_rem is func
3892  local
3893    var boolean: okay is TRUE;
3894  begin
3895    # An integer expression must either raise OVERFLOW_ERROR or return the correct result.
3896    if  not (raisesOverflowError(                     INT64_MIN  rem         -1 )      or
3897                                                      INT64_MIN  rem         -1   = 0) or
3898        not (raisesOverflowError(intExpr(             INT64_MIN) rem         -1 )      or
3899                                 intExpr(             INT64_MIN) rem         -1   = 0) or
3900        not (raisesOverflowError(                     INT64_MIN  rem intExpr(-1))      or
3901                                                      INT64_MIN  rem intExpr(-1)  = 0) or
3902        not (raisesOverflowError(intExpr(             INT64_MIN) rem intExpr(-1))      or
3903                                 intExpr(             INT64_MIN) rem intExpr(-1)  = 0) or
3904        not (raisesOverflowError(       (-9223372036854775807-1) rem         -1 )      or
3905                                        (-9223372036854775807-1) rem         -1   = 0) or
3906        not (raisesOverflowError(intExpr(-9223372036854775807-1) rem         -1 )      or
3907                                 intExpr(-9223372036854775807-1) rem         -1   = 0) or
3908        not (raisesOverflowError(       (-9223372036854775807-1) rem intExpr(-1))      or
3909                                        (-9223372036854775807-1) rem intExpr(-1)  = 0) or
3910        not (raisesOverflowError(intExpr(-9223372036854775807-1) rem intExpr(-1))      or
3911                                 intExpr(-9223372036854775807-1) rem intExpr(-1)  = 0) then
3912      writeln(" ***** Computing -9223372036854775808 rem -1 does neither raise OVERFLOW_ERROR nor return 0.");
3913      okay := FALSE;
3914    end if;
3915
3916    if okay then
3917      writeln("Overflow checking of rem operator works correct.");
3918    else
3919      writeln(" ***** Overflow checking of rem operator does not work correct.");
3920    end if;
3921  end func;
3922
3923
3924const proc: check_mdiv is func
3925  local
3926    var boolean: okay is TRUE;
3927  begin
3928    if  not raisesOverflowError(                      INT64_MIN   mdiv         -1 ) or
3929        not raisesOverflowError(intExpr(              INT64_MIN)  mdiv         -1 ) or
3930        not raisesOverflowError(                      INT64_MIN   mdiv intExpr(-1)) or
3931        not raisesOverflowError(intExpr(              INT64_MIN)  mdiv intExpr(-1)) or
3932        not raisesOverflowError(        (-9223372036854775807-1)  mdiv         -1 ) or
3933        not raisesOverflowError(intExpr((-9223372036854775807-1)) mdiv         -1 ) or
3934        not raisesOverflowError(        (-9223372036854775807-1)  mdiv intExpr(-1)) or
3935        not raisesOverflowError(intExpr((-9223372036854775807-1)) mdiv intExpr(-1)) then
3936      writeln(" ***** Computing -9223372036854775808 mdiv -1 does not raise OVERFLOW_ERROR.");
3937      okay := FALSE;
3938    end if;
3939
3940    if okay then
3941      writeln("Overflow checking of mdiv operator works correct.");
3942    else
3943      writeln(" ***** Overflow checking of mdiv operator does not work correct.");
3944    end if;
3945  end func;
3946
3947
3948const proc: check_mod is func
3949  local
3950    var boolean: okay is TRUE;
3951  begin
3952    # An integer expression must either raise OVERFLOW_ERROR or return the correct result.
3953    if  not (raisesOverflowError(                     INT64_MIN  mod         -1 )      or
3954                                                      INT64_MIN  mod         -1   = 0) or
3955        not (raisesOverflowError(intExpr(             INT64_MIN) mod         -1 )      or
3956                                 intExpr(             INT64_MIN) mod         -1   = 0) or
3957        not (raisesOverflowError(                     INT64_MIN  mod intExpr(-1))      or
3958                                                      INT64_MIN  mod intExpr(-1)  = 0) or
3959        not (raisesOverflowError(intExpr(             INT64_MIN) mod intExpr(-1))      or
3960                                 intExpr(             INT64_MIN) mod intExpr(-1)  = 0) or
3961        not (raisesOverflowError(       (-9223372036854775807-1) mod         -1 )      or
3962                                        (-9223372036854775807-1) mod         -1   = 0) or
3963        not (raisesOverflowError(intExpr(-9223372036854775807-1) mod         -1 )      or
3964                                 intExpr(-9223372036854775807-1) mod         -1   = 0) or
3965        not (raisesOverflowError(       (-9223372036854775807-1) mod intExpr(-1))      or
3966                                        (-9223372036854775807-1) mod intExpr(-1)  = 0) or
3967        not (raisesOverflowError(intExpr(-9223372036854775807-1) mod intExpr(-1))      or
3968                                 intExpr(-9223372036854775807-1) mod intExpr(-1)  = 0) then
3969      writeln(" ***** Computing -9223372036854775808 mod -1 does neither raise OVERFLOW_ERROR nor return 0.");
3970      okay := FALSE;
3971    end if;
3972
3973    if  not raisesOverflowError((1          <<         -1 ) mod 32) or
3974        not raisesOverflowError((1          << intExpr(-1)) mod 32) or
3975        not raisesOverflowError((intExpr(1) <<         -1 ) mod 32) or
3976        not raisesOverflowError((intExpr(1) << intExpr(-1)) mod 32) or
3977        not raisesOverflowError((intExpr(1  <<         -1)) mod 32) then
3978      writeln(" ***** Computing (1 << -1) mod 32 does not raise OVERFLOW_ERROR.");
3979      okay := FALSE;
3980    end if;
3981
3982    if  not raisesOverflowError(succ(1          <<         -1 ) mod 32) or
3983        not raisesOverflowError(succ(1          << intExpr(-1)) mod 32) or
3984        not raisesOverflowError(succ(intExpr(1) <<         -1 ) mod 32) or
3985        not raisesOverflowError(succ(intExpr(1) << intExpr(-1)) mod 32) or
3986        not raisesOverflowError(succ(intExpr(1  <<         -1)) mod 32) then
3987      writeln(" ***** Computing succ(1 << -1) mod 32 does not raise OVERFLOW_ERROR.");
3988      okay := FALSE;
3989    end if;
3990
3991    if  not raisesOverflowError(        5678901234567890123  mod (1 <<         -1 )) or
3992        not raisesOverflowError(        5678901234567890123  mod (1 << intExpr(-1))) or
3993        not raisesOverflowError(intExpr(5678901234567890123) mod (1 <<         -1 )) or
3994        not raisesOverflowError(intExpr(5678901234567890123) mod (1 << intExpr(-1))) then
3995      writeln(" ***** mod by computed power of two does not raise OVERFLOW_ERROR.");
3996      okay := FALSE;
3997    end if;
3998
3999    if okay then
4000      writeln("Overflow checking of mod operator works correct.");
4001    else
4002      writeln(" ***** Overflow checking of mod operator does not work correct.");
4003    end if;
4004  end func;
4005
4006
4007(**
4008 *  Tests for the compiler optimization to reduce overflow checking
4009 *  for lshift.
4010 *)
4011const func boolean: check_reduced_overflow_checking_for_lshift is func
4012  result
4013    var boolean: okay is TRUE;
4014  begin
4015    if  not raisesOverflowError((intExpr(integer.first) >>  0) <<  1) or
4016        not raisesOverflowError((intExpr(integer.first) >>  1) <<  2) or
4017        not raisesOverflowError((intExpr(integer.first) >> 30) << 31) or
4018        not raisesOverflowError((intExpr(integer.first) >> 62) << 63) then
4019      writeln(" ***** Reduced overflow check for lshift failed: Minimum rshift result if the shift amount is known.");
4020      okay := FALSE;
4021    end if;
4022
4023    if  not raisesOverflowError((intExpr( integer.last) >>  0) <<  1) or
4024        not raisesOverflowError((intExpr( integer.last) >>  1) <<  2) or
4025        not raisesOverflowError((intExpr( integer.last) >> 30) << 31) or
4026        not raisesOverflowError((intExpr( integer.last) >> 62) << 63) then
4027      writeln(" ***** Reduced overflow check for lshift failed: Maximum rshift result if the shift amount is known.");
4028      okay := FALSE;
4029    end if;
4030
4031    if  not raisesOverflowError((       integer.first >> intExpr( 0)) <<  1) or
4032        not raisesOverflowError((       -integer.last >> intExpr( 0)) <<  1) or
4033        not raisesOverflowError((-4611686018427387905 >> intExpr( 0)) <<  1) or
4034        not raisesOverflowError((-4611686018427387904 >> intExpr( 0)) <<  2) or
4035        not raisesOverflowError((         -8589934593 >> intExpr( 0)) << 30) or
4036        not raisesOverflowError((         -8589934592 >> intExpr( 0)) << 31) or
4037        not raisesOverflowError((         -1234567890 >> intExpr( 0)) << 33) or
4038        not raisesOverflowError((                  -2 >> intExpr( 0)) << 63) then
4039      writeln(" ***** Reduced overflow check for lshift failed: Minimum rshift result if the shifted value is known.");
4040      okay := FALSE;
4041    end if;
4042
4043    if  not raisesOverflowError((                   1 >> intExpr( 0)) << 63) or
4044        not raisesOverflowError((                   2 >> intExpr( 0)) << 62) or
4045        not raisesOverflowError((          1234567890 >> intExpr( 0)) << 33) or
4046        not raisesOverflowError((          8589934591 >> intExpr( 0)) << 31) or
4047        not raisesOverflowError((          8589934592 >> intExpr( 0)) << 30) or
4048        not raisesOverflowError(( 4611686018427387903 >> intExpr( 0)) <<  2) or
4049        not raisesOverflowError(( 4611686018427387904 >> intExpr( 0)) <<  1) or
4050        not raisesOverflowError((        integer.last >> intExpr( 0)) <<  1)  then
4051      writeln(" ***** Reduced overflow check for lshift failed: Maximum rshift result if the shifted value is known.");
4052      okay := FALSE;
4053    end if;
4054  end func;
4055
4056
4057const proc: check_lShift is func
4058  local
4059    var boolean: okay is TRUE;
4060  begin
4061    if  not raisesOverflowError(           INT64_MIN <<  1) or
4062        not raisesOverflowError(-4611686018427387905 <<  1) or
4063        not raisesOverflowError(-4611686018427387904 <<  2) or
4064        not raisesOverflowError(-2305843009213693953 <<  2) or
4065        not raisesOverflowError(-2305843009213693952 <<  3) or
4066        not raisesOverflowError(-1152921504606846977 <<  3) or
4067        not raisesOverflowError( -576460752303423489 <<  4) or
4068        not raisesOverflowError( -576460752303423488 <<  5) or
4069        not raisesOverflowError( -288230376151711745 <<  5) or
4070        not raisesOverflowError( -288230376151711744 <<  6) or
4071        not raisesOverflowError(   -9007199254740993 << 10) or
4072        not raisesOverflowError(   -9007199254740992 << 11) or
4073        not raisesOverflowError(    -281474976710657 << 15) or
4074        not raisesOverflowError(    -281474976710656 << 16) or
4075        not raisesOverflowError(      -8796093022209 << 20) or
4076        not raisesOverflowError(      -8796093022208 << 21) or
4077        not raisesOverflowError(       -274877906945 << 25) or
4078        not raisesOverflowError(       -274877906944 << 26) or
4079        not raisesOverflowError(         -8589934593 << 30) or
4080        not raisesOverflowError(         -8589934592 << 31) or
4081        not raisesOverflowError(          -268435457 << 35) or
4082        not raisesOverflowError(          -268435456 << 36) or
4083        not raisesOverflowError(            -8388609 << 40) or
4084        not raisesOverflowError(            -8388608 << 41) or
4085        not raisesOverflowError(             -262145 << 45) or
4086        not raisesOverflowError(             -262144 << 46) or
4087        not raisesOverflowError(               -8193 << 50) or
4088        not raisesOverflowError(               -8192 << 51) or
4089        not raisesOverflowError(                -257 << 55) or
4090        not raisesOverflowError(                -256 << 56) or
4091        not raisesOverflowError(                  -9 << 60) or
4092        not raisesOverflowError(                  -8 << 61) or
4093        not raisesOverflowError(                  -5 << 61) or
4094        not raisesOverflowError(                  -4 << 62) or
4095        not raisesOverflowError(                  -3 << 62) or
4096        not raisesOverflowError(                  -2 << 63) or
4097        not raisesOverflowError(                  -1 << 64) or
4098        not raisesOverflowError(                   0 << 64) or
4099        not raisesOverflowError(                   1 << 63) or
4100        not raisesOverflowError(                   2 << 62) or
4101        not raisesOverflowError(                   3 << 62) or
4102        not raisesOverflowError(                   4 << 61) or
4103        not raisesOverflowError(                   7 << 61) or
4104        not raisesOverflowError(                   8 << 60) or
4105        not raisesOverflowError(                 255 << 56) or
4106        not raisesOverflowError(                 256 << 55) or
4107        not raisesOverflowError(                8191 << 51) or
4108        not raisesOverflowError(                8192 << 50) or
4109        not raisesOverflowError(              262143 << 46) or
4110        not raisesOverflowError(              262144 << 45) or
4111        not raisesOverflowError(             8388607 << 41) or
4112        not raisesOverflowError(             8388608 << 40) or
4113        not raisesOverflowError(           268435455 << 36) or
4114        not raisesOverflowError(           268435456 << 35) or
4115        not raisesOverflowError(          8589934591 << 31) or
4116        not raisesOverflowError(          8589934592 << 30) or
4117        not raisesOverflowError(        274877906943 << 26) or
4118        not raisesOverflowError(        274877906944 << 25) or
4119        not raisesOverflowError(       8796093022207 << 21) or
4120        not raisesOverflowError(       8796093022208 << 20) or
4121        not raisesOverflowError(     281474976710655 << 16) or
4122        not raisesOverflowError(     281474976710656 << 15) or
4123        not raisesOverflowError(    9007199254740991 << 11) or
4124        not raisesOverflowError(    9007199254740992 << 10) or
4125        not raisesOverflowError(  288230376151711743 <<  6) or
4126        not raisesOverflowError(  288230376151711744 <<  5) or
4127        not raisesOverflowError(  576460752303423487 <<  5) or
4128        not raisesOverflowError(  576460752303423488 <<  4) or
4129        not raisesOverflowError( 1152921504606846975 <<  4) or
4130        not raisesOverflowError( 1152921504606846976 <<  3) or
4131        not raisesOverflowError( 2305843009213693951 <<  3) or
4132        not raisesOverflowError( 2305843009213693952 <<  2) or
4133        not raisesOverflowError( 4611686018427387903 <<  2) or
4134        not raisesOverflowError( 4611686018427387904 <<  1) or
4135        not raisesOverflowError(intExpr(           INT64_MIN) <<  1) or
4136        not raisesOverflowError(intExpr(-4611686018427387905) <<  1) or
4137        not raisesOverflowError(intExpr(-4611686018427387904) <<  2) or
4138        not raisesOverflowError(intExpr(-2305843009213693953) <<  2) or
4139        not raisesOverflowError(intExpr(-2305843009213693952) <<  3) or
4140        not raisesOverflowError(intExpr(-1152921504606846977) <<  3) or
4141        not raisesOverflowError(intExpr( -576460752303423489) <<  4) or
4142        not raisesOverflowError(intExpr( -576460752303423488) <<  5) or
4143        not raisesOverflowError(intExpr( -288230376151711745) <<  5) or
4144        not raisesOverflowError(intExpr( -288230376151711744) <<  6) or
4145        not raisesOverflowError(intExpr(   -9007199254740993) << 10) or
4146        not raisesOverflowError(intExpr(   -9007199254740992) << 11) or
4147        not raisesOverflowError(intExpr(    -281474976710657) << 15) or
4148        not raisesOverflowError(intExpr(    -281474976710656) << 16) or
4149        not raisesOverflowError(intExpr(      -8796093022209) << 20) or
4150        not raisesOverflowError(intExpr(      -8796093022208) << 21) or
4151        not raisesOverflowError(intExpr(       -274877906945) << 25) or
4152        not raisesOverflowError(intExpr(       -274877906944) << 26) or
4153        not raisesOverflowError(intExpr(         -8589934593) << 30) or
4154        not raisesOverflowError(intExpr(         -8589934592) << 31) or
4155        not raisesOverflowError(intExpr(          -268435457) << 35) or
4156        not raisesOverflowError(intExpr(          -268435456) << 36) or
4157        not raisesOverflowError(intExpr(            -8388609) << 40) or
4158        not raisesOverflowError(intExpr(            -8388608) << 41) or
4159        not raisesOverflowError(intExpr(             -262145) << 45) or
4160        not raisesOverflowError(intExpr(             -262144) << 46) or
4161        not raisesOverflowError(intExpr(               -8193) << 50) or
4162        not raisesOverflowError(intExpr(               -8192) << 51) or
4163        not raisesOverflowError(intExpr(                -257) << 55) or
4164        not raisesOverflowError(intExpr(                -256) << 56) or
4165        not raisesOverflowError(intExpr(                  -9) << 60) or
4166        not raisesOverflowError(intExpr(                  -8) << 61) or
4167        not raisesOverflowError(intExpr(                  -5) << 61) or
4168        not raisesOverflowError(intExpr(                  -4) << 62) or
4169        not raisesOverflowError(intExpr(                  -3) << 62) or
4170        not raisesOverflowError(intExpr(                  -2) << 63) or
4171        not raisesOverflowError(intExpr(                  -1) << 64) or
4172        not raisesOverflowError(intExpr(                   0) << 64) or
4173        not raisesOverflowError(intExpr(                   1) << 63) or
4174        not raisesOverflowError(intExpr(                   2) << 62) or
4175        not raisesOverflowError(intExpr(                   3) << 62) or
4176        not raisesOverflowError(intExpr(                   4) << 61) or
4177        not raisesOverflowError(intExpr(                   7) << 61) or
4178        not raisesOverflowError(intExpr(                   8) << 60) or
4179        not raisesOverflowError(intExpr(                 255) << 56) or
4180        not raisesOverflowError(intExpr(                 256) << 55) or
4181        not raisesOverflowError(intExpr(                8191) << 51) or
4182        not raisesOverflowError(intExpr(                8192) << 50) or
4183        not raisesOverflowError(intExpr(              262143) << 46) or
4184        not raisesOverflowError(intExpr(              262144) << 45) or
4185        not raisesOverflowError(intExpr(             8388607) << 41) or
4186        not raisesOverflowError(intExpr(             8388608) << 40) or
4187        not raisesOverflowError(intExpr(           268435455) << 36) or
4188        not raisesOverflowError(intExpr(           268435456) << 35) or
4189        not raisesOverflowError(intExpr(          8589934591) << 31) or
4190        not raisesOverflowError(intExpr(          8589934592) << 30) or
4191        not raisesOverflowError(intExpr(        274877906943) << 26) or
4192        not raisesOverflowError(intExpr(        274877906944) << 25) or
4193        not raisesOverflowError(intExpr(       8796093022207) << 21) or
4194        not raisesOverflowError(intExpr(       8796093022208) << 20) or
4195        not raisesOverflowError(intExpr(     281474976710655) << 16) or
4196        not raisesOverflowError(intExpr(     281474976710656) << 15) or
4197        not raisesOverflowError(intExpr(    9007199254740991) << 11) or
4198        not raisesOverflowError(intExpr(    9007199254740992) << 10) or
4199        not raisesOverflowError(intExpr(  288230376151711743) <<  6) or
4200        not raisesOverflowError(intExpr(  288230376151711744) <<  5) or
4201        not raisesOverflowError(intExpr(  576460752303423487) <<  5) or
4202        not raisesOverflowError(intExpr(  576460752303423488) <<  4) or
4203        not raisesOverflowError(intExpr( 1152921504606846975) <<  4) or
4204        not raisesOverflowError(intExpr( 1152921504606846976) <<  3) or
4205        not raisesOverflowError(intExpr( 2305843009213693951) <<  3) or
4206        not raisesOverflowError(intExpr( 2305843009213693952) <<  2) or
4207        not raisesOverflowError(intExpr( 4611686018427387903) <<  2) or
4208        not raisesOverflowError(intExpr( 4611686018427387904) <<  1) or
4209        not raisesOverflowError(           INT64_MIN << intExpr( 1)) or
4210        not raisesOverflowError(-4611686018427387905 << intExpr( 1)) or
4211        not raisesOverflowError(-4611686018427387904 << intExpr( 2)) or
4212        not raisesOverflowError(-2305843009213693953 << intExpr( 2)) or
4213        not raisesOverflowError(-2305843009213693952 << intExpr( 3)) or
4214        not raisesOverflowError(-1152921504606846977 << intExpr( 3)) or
4215        not raisesOverflowError( -576460752303423489 << intExpr( 4)) or
4216        not raisesOverflowError( -576460752303423488 << intExpr( 5)) or
4217        not raisesOverflowError( -288230376151711745 << intExpr( 5)) or
4218        not raisesOverflowError( -288230376151711744 << intExpr( 6)) or
4219        not raisesOverflowError(   -9007199254740993 << intExpr(10)) or
4220        not raisesOverflowError(   -9007199254740992 << intExpr(11)) or
4221        not raisesOverflowError(    -281474976710657 << intExpr(15)) or
4222        not raisesOverflowError(    -281474976710656 << intExpr(16)) or
4223        not raisesOverflowError(      -8796093022209 << intExpr(20)) or
4224        not raisesOverflowError(      -8796093022208 << intExpr(21)) or
4225        not raisesOverflowError(       -274877906945 << intExpr(25)) or
4226        not raisesOverflowError(       -274877906944 << intExpr(26)) or
4227        not raisesOverflowError(         -8589934593 << intExpr(30)) or
4228        not raisesOverflowError(         -8589934592 << intExpr(31)) or
4229        not raisesOverflowError(          -268435457 << intExpr(35)) or
4230        not raisesOverflowError(          -268435456 << intExpr(36)) or
4231        not raisesOverflowError(            -8388609 << intExpr(40)) or
4232        not raisesOverflowError(            -8388608 << intExpr(41)) or
4233        not raisesOverflowError(             -262145 << intExpr(45)) or
4234        not raisesOverflowError(             -262144 << intExpr(46)) or
4235        not raisesOverflowError(               -8193 << intExpr(50)) or
4236        not raisesOverflowError(               -8192 << intExpr(51)) or
4237        not raisesOverflowError(                -257 << intExpr(55)) or
4238        not raisesOverflowError(                -256 << intExpr(56)) or
4239        not raisesOverflowError(                  -9 << intExpr(60)) or
4240        not raisesOverflowError(                  -8 << intExpr(61)) or
4241        not raisesOverflowError(                  -5 << intExpr(61)) or
4242        not raisesOverflowError(                  -4 << intExpr(62)) or
4243        not raisesOverflowError(                  -3 << intExpr(62)) or
4244        not raisesOverflowError(                  -2 << intExpr(63)) or
4245        not raisesOverflowError(                  -1 << intExpr(64)) or
4246        not raisesOverflowError(                   0 << intExpr(64)) or
4247        not raisesOverflowError(                   1 << intExpr(63)) or
4248        not raisesOverflowError(                   2 << intExpr(62)) or
4249        not raisesOverflowError(                   3 << intExpr(62)) or
4250        not raisesOverflowError(                   4 << intExpr(61)) or
4251        not raisesOverflowError(                   7 << intExpr(61)) or
4252        not raisesOverflowError(                   8 << intExpr(60)) or
4253        not raisesOverflowError(                 255 << intExpr(56)) or
4254        not raisesOverflowError(                 256 << intExpr(55)) or
4255        not raisesOverflowError(                8191 << intExpr(51)) or
4256        not raisesOverflowError(                8192 << intExpr(50)) or
4257        not raisesOverflowError(              262143 << intExpr(46)) or
4258        not raisesOverflowError(              262144 << intExpr(45)) or
4259        not raisesOverflowError(             8388607 << intExpr(41)) or
4260        not raisesOverflowError(             8388608 << intExpr(40)) or
4261        not raisesOverflowError(           268435455 << intExpr(36)) or
4262        not raisesOverflowError(           268435456 << intExpr(35)) or
4263        not raisesOverflowError(          8589934591 << intExpr(31)) or
4264        not raisesOverflowError(          8589934592 << intExpr(30)) or
4265        not raisesOverflowError(        274877906943 << intExpr(26)) or
4266        not raisesOverflowError(        274877906944 << intExpr(25)) or
4267        not raisesOverflowError(       8796093022207 << intExpr(21)) or
4268        not raisesOverflowError(       8796093022208 << intExpr(20)) or
4269        not raisesOverflowError(     281474976710655 << intExpr(16)) or
4270        not raisesOverflowError(     281474976710656 << intExpr(15)) or
4271        not raisesOverflowError(    9007199254740991 << intExpr(11)) or
4272        not raisesOverflowError(    9007199254740992 << intExpr(10)) or
4273        not raisesOverflowError(  288230376151711743 << intExpr( 6)) or
4274        not raisesOverflowError(  288230376151711744 << intExpr( 5)) or
4275        not raisesOverflowError(  576460752303423487 << intExpr( 5)) or
4276        not raisesOverflowError(  576460752303423488 << intExpr( 4)) or
4277        not raisesOverflowError( 1152921504606846975 << intExpr( 4)) or
4278        not raisesOverflowError( 1152921504606846976 << intExpr( 3)) or
4279        not raisesOverflowError( 2305843009213693951 << intExpr( 3)) or
4280        not raisesOverflowError( 2305843009213693952 << intExpr( 2)) or
4281        not raisesOverflowError( 4611686018427387903 << intExpr( 2)) or
4282        not raisesOverflowError( 4611686018427387904 << intExpr( 1)) or
4283        not raisesOverflowError(intExpr(           INT64_MIN) << intExpr( 1)) or
4284        not raisesOverflowError(intExpr(-4611686018427387905) << intExpr( 1)) or
4285        not raisesOverflowError(intExpr(-4611686018427387904) << intExpr( 2)) or
4286        not raisesOverflowError(intExpr(-2305843009213693953) << intExpr( 2)) or
4287        not raisesOverflowError(intExpr(-2305843009213693952) << intExpr( 3)) or
4288        not raisesOverflowError(intExpr(-1152921504606846977) << intExpr( 3)) or
4289        not raisesOverflowError(intExpr( -576460752303423489) << intExpr( 4)) or
4290        not raisesOverflowError(intExpr( -576460752303423488) << intExpr( 5)) or
4291        not raisesOverflowError(intExpr( -288230376151711745) << intExpr( 5)) or
4292        not raisesOverflowError(intExpr( -288230376151711744) << intExpr( 6)) or
4293        not raisesOverflowError(intExpr(   -9007199254740993) << intExpr(10)) or
4294        not raisesOverflowError(intExpr(   -9007199254740992) << intExpr(11)) or
4295        not raisesOverflowError(intExpr(    -281474976710657) << intExpr(15)) or
4296        not raisesOverflowError(intExpr(    -281474976710656) << intExpr(16)) or
4297        not raisesOverflowError(intExpr(      -8796093022209) << intExpr(20)) or
4298        not raisesOverflowError(intExpr(      -8796093022208) << intExpr(21)) or
4299        not raisesOverflowError(intExpr(       -274877906945) << intExpr(25)) or
4300        not raisesOverflowError(intExpr(       -274877906944) << intExpr(26)) or
4301        not raisesOverflowError(intExpr(         -8589934593) << intExpr(30)) or
4302        not raisesOverflowError(intExpr(         -8589934592) << intExpr(31)) or
4303        not raisesOverflowError(intExpr(          -268435457) << intExpr(35)) or
4304        not raisesOverflowError(intExpr(          -268435456) << intExpr(36)) or
4305        not raisesOverflowError(intExpr(            -8388609) << intExpr(40)) or
4306        not raisesOverflowError(intExpr(            -8388608) << intExpr(41)) or
4307        not raisesOverflowError(intExpr(             -262145) << intExpr(45)) or
4308        not raisesOverflowError(intExpr(             -262144) << intExpr(46)) or
4309        not raisesOverflowError(intExpr(               -8193) << intExpr(50)) or
4310        not raisesOverflowError(intExpr(               -8192) << intExpr(51)) or
4311        not raisesOverflowError(intExpr(                -257) << intExpr(55)) or
4312        not raisesOverflowError(intExpr(                -256) << intExpr(56)) or
4313        not raisesOverflowError(intExpr(                  -9) << intExpr(60)) or
4314        not raisesOverflowError(intExpr(                  -8) << intExpr(61)) or
4315        not raisesOverflowError(intExpr(                  -5) << intExpr(61)) or
4316        not raisesOverflowError(intExpr(                  -4) << intExpr(62)) or
4317        not raisesOverflowError(intExpr(                  -3) << intExpr(62)) or
4318        not raisesOverflowError(intExpr(                  -2) << intExpr(63)) or
4319        not raisesOverflowError(intExpr(                  -1) << intExpr(64)) or
4320        not raisesOverflowError(intExpr(                   0) << intExpr(64)) or
4321        not raisesOverflowError(intExpr(                   1) << intExpr(63)) or
4322        not raisesOverflowError(intExpr(                   2) << intExpr(62)) or
4323        not raisesOverflowError(intExpr(                   3) << intExpr(62)) or
4324        not raisesOverflowError(intExpr(                   4) << intExpr(61)) or
4325        not raisesOverflowError(intExpr(                   7) << intExpr(61)) or
4326        not raisesOverflowError(intExpr(                   8) << intExpr(60)) or
4327        not raisesOverflowError(intExpr(                 255) << intExpr(56)) or
4328        not raisesOverflowError(intExpr(                 256) << intExpr(55)) or
4329        not raisesOverflowError(intExpr(                8191) << intExpr(51)) or
4330        not raisesOverflowError(intExpr(                8192) << intExpr(50)) or
4331        not raisesOverflowError(intExpr(              262143) << intExpr(46)) or
4332        not raisesOverflowError(intExpr(              262144) << intExpr(45)) or
4333        not raisesOverflowError(intExpr(             8388607) << intExpr(41)) or
4334        not raisesOverflowError(intExpr(             8388608) << intExpr(40)) or
4335        not raisesOverflowError(intExpr(           268435455) << intExpr(36)) or
4336        not raisesOverflowError(intExpr(           268435456) << intExpr(35)) or
4337        not raisesOverflowError(intExpr(          8589934591) << intExpr(31)) or
4338        not raisesOverflowError(intExpr(          8589934592) << intExpr(30)) or
4339        not raisesOverflowError(intExpr(        274877906943) << intExpr(26)) or
4340        not raisesOverflowError(intExpr(        274877906944) << intExpr(25)) or
4341        not raisesOverflowError(intExpr(       8796093022207) << intExpr(21)) or
4342        not raisesOverflowError(intExpr(       8796093022208) << intExpr(20)) or
4343        not raisesOverflowError(intExpr(     281474976710655) << intExpr(16)) or
4344        not raisesOverflowError(intExpr(     281474976710656) << intExpr(15)) or
4345        not raisesOverflowError(intExpr(    9007199254740991) << intExpr(11)) or
4346        not raisesOverflowError(intExpr(    9007199254740992) << intExpr(10)) or
4347        not raisesOverflowError(intExpr(  288230376151711743) << intExpr( 6)) or
4348        not raisesOverflowError(intExpr(  288230376151711744) << intExpr( 5)) or
4349        not raisesOverflowError(intExpr(  576460752303423487) << intExpr( 5)) or
4350        not raisesOverflowError(intExpr(  576460752303423488) << intExpr( 4)) or
4351        not raisesOverflowError(intExpr( 1152921504606846975) << intExpr( 4)) or
4352        not raisesOverflowError(intExpr( 1152921504606846976) << intExpr( 3)) or
4353        not raisesOverflowError(intExpr( 2305843009213693951) << intExpr( 3)) or
4354        not raisesOverflowError(intExpr( 2305843009213693952) << intExpr( 2)) or
4355        not raisesOverflowError(intExpr( 4611686018427387903) << intExpr( 2)) or
4356        not raisesOverflowError(intExpr( 4611686018427387904) << intExpr( 1)) then
4357      writeln(" ***** Overflow when computing left shift does not raise OVERFLOW_ERROR.");
4358      okay := FALSE;
4359    end if;
4360
4361    if  not raisesOverflowError(-16111 << integer.first) or
4362        not raisesOverflowError(-16111 <<          -999) or
4363        not raisesOverflowError(-16111 <<           -63) or
4364        not raisesOverflowError(-16111 <<            -1) or
4365        not raisesOverflowError(-16111 <<            64) or
4366        not raisesOverflowError(-16111 <<           999) or
4367        not raisesOverflowError(-16111 <<  integer.last) or
4368        not raisesOverflowError(    -1 << integer.first) or
4369        not raisesOverflowError(    -1 <<          -999) or
4370        not raisesOverflowError(    -1 <<           -63) or
4371        not raisesOverflowError(    -1 <<            -1) or
4372        not raisesOverflowError(    -1 <<            64) or
4373        not raisesOverflowError(    -1 <<           999) or
4374        not raisesOverflowError(    -1 <<  integer.last) or
4375        not raisesOverflowError(     0 << integer.first) or
4376        not raisesOverflowError(     0 <<          -999) or
4377        not raisesOverflowError(     0 <<           -63) or
4378        not raisesOverflowError(     0 <<            -1) or
4379        not raisesOverflowError(     0 <<            64) or
4380        not raisesOverflowError(     0 <<           999) or
4381        not raisesOverflowError(     0 <<  integer.last) or
4382        not raisesOverflowError( 16111 << integer.first) or
4383        not raisesOverflowError( 16111 <<          -999) or
4384        not raisesOverflowError( 16111 <<           -63) or
4385        not raisesOverflowError( 16111 <<            -1) or
4386        not raisesOverflowError( 16111 <<            64) or
4387        not raisesOverflowError( 16111 <<           999) or
4388        not raisesOverflowError( 16111 <<  integer.last) or
4389        not raisesOverflowError(intExpr(-16111) << integer.first) or
4390        not raisesOverflowError(intExpr(-16111) <<          -999) or
4391        not raisesOverflowError(intExpr(-16111) <<           -63) or
4392        not raisesOverflowError(intExpr(-16111) <<            -1) or
4393        not raisesOverflowError(intExpr(-16111) <<            64) or
4394        not raisesOverflowError(intExpr(-16111) <<           999) or
4395        not raisesOverflowError(intExpr(-16111) <<  integer.last) or
4396        not raisesOverflowError(intExpr(    -1) << integer.first) or
4397        not raisesOverflowError(intExpr(    -1) <<          -999) or
4398        not raisesOverflowError(intExpr(    -1) <<           -63) or
4399        not raisesOverflowError(intExpr(    -1) <<            -1) or
4400        not raisesOverflowError(intExpr(    -1) <<            64) or
4401        not raisesOverflowError(intExpr(    -1) <<           999) or
4402        not raisesOverflowError(intExpr(    -1) <<  integer.last) or
4403        not raisesOverflowError(intExpr(     0) << integer.first) or
4404        not raisesOverflowError(intExpr(     0) <<          -999) or
4405        not raisesOverflowError(intExpr(     0) <<           -63) or
4406        not raisesOverflowError(intExpr(     0) <<            -1) or
4407        not raisesOverflowError(intExpr(     0) <<            64) or
4408        not raisesOverflowError(intExpr(     0) <<           999) or
4409        not raisesOverflowError(intExpr(     0) <<  integer.last) or
4410        not raisesOverflowError(intExpr( 16111) << integer.first) or
4411        not raisesOverflowError(intExpr( 16111) <<          -999) or
4412        not raisesOverflowError(intExpr( 16111) <<           -63) or
4413        not raisesOverflowError(intExpr( 16111) <<            -1) or
4414        not raisesOverflowError(intExpr( 16111) <<            64) or
4415        not raisesOverflowError(intExpr( 16111) <<           999) or
4416        not raisesOverflowError(intExpr( 16111) <<  integer.last) or
4417        not raisesOverflowError(-16111 << intExpr(integer.first)) or
4418        not raisesOverflowError(-16111 << intExpr(         -999)) or
4419        not raisesOverflowError(-16111 << intExpr(          -63)) or
4420        not raisesOverflowError(-16111 << intExpr(           -1)) or
4421        not raisesOverflowError(-16111 << intExpr(           64)) or
4422        not raisesOverflowError(-16111 << intExpr(          999)) or
4423        not raisesOverflowError(-16111 << intExpr( integer.last)) or
4424        not raisesOverflowError(    -1 << intExpr(integer.first)) or
4425        not raisesOverflowError(    -1 << intExpr(         -999)) or
4426        not raisesOverflowError(    -1 << intExpr(          -63)) or
4427        not raisesOverflowError(    -1 << intExpr(           -1)) or
4428        not raisesOverflowError(    -1 << intExpr(           64)) or
4429        not raisesOverflowError(    -1 << intExpr(          999)) or
4430        not raisesOverflowError(    -1 << intExpr( integer.last)) or
4431        not raisesOverflowError(     0 << intExpr(integer.first)) or
4432        not raisesOverflowError(     0 << intExpr(         -999)) or
4433        not raisesOverflowError(     0 << intExpr(          -63)) or
4434        not raisesOverflowError(     0 << intExpr(           -1)) or
4435        not raisesOverflowError(     0 << intExpr(           64)) or
4436        not raisesOverflowError(     0 << intExpr(          999)) or
4437        not raisesOverflowError(     0 << intExpr( integer.last)) or
4438        not raisesOverflowError( 16111 << intExpr(integer.first)) or
4439        not raisesOverflowError( 16111 << intExpr(         -999)) or
4440        not raisesOverflowError( 16111 << intExpr(          -63)) or
4441        not raisesOverflowError( 16111 << intExpr(           -1)) or
4442        not raisesOverflowError( 16111 << intExpr(           64)) or
4443        not raisesOverflowError( 16111 << intExpr(          999)) or
4444        not raisesOverflowError( 16111 << intExpr( integer.last)) or
4445        not raisesOverflowError(intExpr(-16111) << intExpr(integer.first)) or
4446        not raisesOverflowError(intExpr(-16111) << intExpr(         -999)) or
4447        not raisesOverflowError(intExpr(-16111) << intExpr(          -63)) or
4448        not raisesOverflowError(intExpr(-16111) << intExpr(           -1)) or
4449        not raisesOverflowError(intExpr(-16111) << intExpr(           64)) or
4450        not raisesOverflowError(intExpr(-16111) << intExpr(          999)) or
4451        not raisesOverflowError(intExpr(-16111) << intExpr( integer.last)) or
4452        not raisesOverflowError(intExpr(    -1) << intExpr(integer.first)) or
4453        not raisesOverflowError(intExpr(    -1) << intExpr(         -999)) or
4454        not raisesOverflowError(intExpr(    -1) << intExpr(          -63)) or
4455        not raisesOverflowError(intExpr(    -1) << intExpr(           -1)) or
4456        not raisesOverflowError(intExpr(    -1) << intExpr(           64)) or
4457        not raisesOverflowError(intExpr(    -1) << intExpr(          999)) or
4458        not raisesOverflowError(intExpr(    -1) << intExpr( integer.last)) or
4459        not raisesOverflowError(intExpr(     0) << intExpr(integer.first)) or
4460        not raisesOverflowError(intExpr(     0) << intExpr(         -999)) or
4461        not raisesOverflowError(intExpr(     0) << intExpr(          -63)) or
4462        not raisesOverflowError(intExpr(     0) << intExpr(           -1)) or
4463        not raisesOverflowError(intExpr(     0) << intExpr(           64)) or
4464        not raisesOverflowError(intExpr(     0) << intExpr(          999)) or
4465        not raisesOverflowError(intExpr(     0) << intExpr( integer.last)) or
4466        not raisesOverflowError(intExpr( 16111) << intExpr(integer.first)) or
4467        not raisesOverflowError(intExpr( 16111) << intExpr(         -999)) or
4468        not raisesOverflowError(intExpr( 16111) << intExpr(          -63)) or
4469        not raisesOverflowError(intExpr( 16111) << intExpr(           -1)) or
4470        not raisesOverflowError(intExpr( 16111) << intExpr(           64)) or
4471        not raisesOverflowError(intExpr( 16111) << intExpr(          999)) or
4472        not raisesOverflowError(intExpr( 16111) << intExpr( integer.last)) then
4473      writeln(" ***** Left shift with illegal shift count does not raise OVERFLOW_ERROR.");
4474      okay := FALSE;
4475    end if;
4476
4477    if not check_reduced_overflow_checking_for_lshift then
4478      okay := FALSE;
4479    end if;
4480
4481    if okay then
4482      writeln("Overflow checking of left shift works correct.");
4483    else
4484      writeln(" ***** Overflow checking of left shift does not work correct.");
4485    end if;
4486  end func;
4487
4488
4489const proc: check_lShift_assign is func
4490  local
4491    var boolean: okay is TRUE;
4492    var boolean: ok is TRUE;
4493    var integer: num is 0;
4494    var array integer: arr is [] (0);
4495  begin
4496    num :=            INT64_MIN; ok := ok and raisesOverflowError(num <<:=  1);
4497    num := -4611686018427387905; ok := ok and raisesOverflowError(num <<:=  1);
4498    num := -4611686018427387904; ok := ok and raisesOverflowError(num <<:=  2);
4499    num := -2305843009213693953; ok := ok and raisesOverflowError(num <<:=  2);
4500    num := -2305843009213693952; ok := ok and raisesOverflowError(num <<:=  3);
4501    num := -1152921504606846977; ok := ok and raisesOverflowError(num <<:=  3);
4502    num :=  -576460752303423489; ok := ok and raisesOverflowError(num <<:=  4);
4503    num :=  -576460752303423488; ok := ok and raisesOverflowError(num <<:=  5);
4504    num :=  -288230376151711745; ok := ok and raisesOverflowError(num <<:=  5);
4505    num :=  -288230376151711744; ok := ok and raisesOverflowError(num <<:=  6);
4506    num :=    -9007199254740993; ok := ok and raisesOverflowError(num <<:= 10);
4507    num :=    -9007199254740992; ok := ok and raisesOverflowError(num <<:= 11);
4508    num :=     -281474976710657; ok := ok and raisesOverflowError(num <<:= 15);
4509    num :=     -281474976710656; ok := ok and raisesOverflowError(num <<:= 16);
4510    num :=       -8796093022209; ok := ok and raisesOverflowError(num <<:= 20);
4511    num :=       -8796093022208; ok := ok and raisesOverflowError(num <<:= 21);
4512    num :=        -274877906945; ok := ok and raisesOverflowError(num <<:= 25);
4513    num :=        -274877906944; ok := ok and raisesOverflowError(num <<:= 26);
4514    num :=          -8589934593; ok := ok and raisesOverflowError(num <<:= 30);
4515    num :=          -8589934592; ok := ok and raisesOverflowError(num <<:= 31);
4516    num :=           -268435457; ok := ok and raisesOverflowError(num <<:= 35);
4517    num :=           -268435456; ok := ok and raisesOverflowError(num <<:= 36);
4518    num :=             -8388609; ok := ok and raisesOverflowError(num <<:= 40);
4519    num :=             -8388608; ok := ok and raisesOverflowError(num <<:= 41);
4520    num :=              -262145; ok := ok and raisesOverflowError(num <<:= 45);
4521    num :=              -262144; ok := ok and raisesOverflowError(num <<:= 46);
4522    num :=                -8193; ok := ok and raisesOverflowError(num <<:= 50);
4523    num :=                -8192; ok := ok and raisesOverflowError(num <<:= 51);
4524    num :=                 -257; ok := ok and raisesOverflowError(num <<:= 55);
4525    num :=                 -256; ok := ok and raisesOverflowError(num <<:= 56);
4526    num :=                   -9; ok := ok and raisesOverflowError(num <<:= 60);
4527    num :=                   -8; ok := ok and raisesOverflowError(num <<:= 61);
4528    num :=                   -5; ok := ok and raisesOverflowError(num <<:= 61);
4529    num :=                   -4; ok := ok and raisesOverflowError(num <<:= 62);
4530    num :=                   -3; ok := ok and raisesOverflowError(num <<:= 62);
4531    num :=                   -2; ok := ok and raisesOverflowError(num <<:= 63);
4532    num :=                   -1; ok := ok and raisesOverflowError(num <<:= 64);
4533    num :=                    0; ok := ok and raisesOverflowError(num <<:= 64);
4534    num :=                    1; ok := ok and raisesOverflowError(num <<:= 63);
4535    num :=                    2; ok := ok and raisesOverflowError(num <<:= 62);
4536    num :=                    3; ok := ok and raisesOverflowError(num <<:= 62);
4537    num :=                    4; ok := ok and raisesOverflowError(num <<:= 61);
4538    num :=                    7; ok := ok and raisesOverflowError(num <<:= 61);
4539    num :=                    8; ok := ok and raisesOverflowError(num <<:= 60);
4540    num :=                  255; ok := ok and raisesOverflowError(num <<:= 56);
4541    num :=                  256; ok := ok and raisesOverflowError(num <<:= 55);
4542    num :=                 8191; ok := ok and raisesOverflowError(num <<:= 51);
4543    num :=                 8192; ok := ok and raisesOverflowError(num <<:= 50);
4544    num :=               262143; ok := ok and raisesOverflowError(num <<:= 46);
4545    num :=               262144; ok := ok and raisesOverflowError(num <<:= 45);
4546    num :=              8388607; ok := ok and raisesOverflowError(num <<:= 41);
4547    num :=              8388608; ok := ok and raisesOverflowError(num <<:= 40);
4548    num :=            268435455; ok := ok and raisesOverflowError(num <<:= 36);
4549    num :=            268435456; ok := ok and raisesOverflowError(num <<:= 35);
4550    num :=           8589934591; ok := ok and raisesOverflowError(num <<:= 31);
4551    num :=           8589934592; ok := ok and raisesOverflowError(num <<:= 30);
4552    num :=         274877906943; ok := ok and raisesOverflowError(num <<:= 26);
4553    num :=         274877906944; ok := ok and raisesOverflowError(num <<:= 25);
4554    num :=        8796093022207; ok := ok and raisesOverflowError(num <<:= 21);
4555    num :=        8796093022208; ok := ok and raisesOverflowError(num <<:= 20);
4556    num :=      281474976710655; ok := ok and raisesOverflowError(num <<:= 16);
4557    num :=      281474976710656; ok := ok and raisesOverflowError(num <<:= 15);
4558    num :=     9007199254740991; ok := ok and raisesOverflowError(num <<:= 11);
4559    num :=     9007199254740992; ok := ok and raisesOverflowError(num <<:= 10);
4560    num :=   288230376151711743; ok := ok and raisesOverflowError(num <<:=  6);
4561    num :=   288230376151711744; ok := ok and raisesOverflowError(num <<:=  5);
4562    num :=   576460752303423487; ok := ok and raisesOverflowError(num <<:=  5);
4563    num :=   576460752303423488; ok := ok and raisesOverflowError(num <<:=  4);
4564    num :=  1152921504606846975; ok := ok and raisesOverflowError(num <<:=  4);
4565    num :=  1152921504606846976; ok := ok and raisesOverflowError(num <<:=  3);
4566    num :=  2305843009213693951; ok := ok and raisesOverflowError(num <<:=  3);
4567    num :=  2305843009213693952; ok := ok and raisesOverflowError(num <<:=  2);
4568    num :=  4611686018427387903; ok := ok and raisesOverflowError(num <<:=  2);
4569    num :=  4611686018427387904; ok := ok and raisesOverflowError(num <<:=  1);
4570    num :=            INT64_MIN; ok := ok and raisesOverflowError(num <<:= intExpr( 1));
4571    num := -4611686018427387905; ok := ok and raisesOverflowError(num <<:= intExpr( 1));
4572    num := -4611686018427387904; ok := ok and raisesOverflowError(num <<:= intExpr( 2));
4573    num := -2305843009213693953; ok := ok and raisesOverflowError(num <<:= intExpr( 2));
4574    num := -2305843009213693952; ok := ok and raisesOverflowError(num <<:= intExpr( 3));
4575    num := -1152921504606846977; ok := ok and raisesOverflowError(num <<:= intExpr( 3));
4576    num :=  -576460752303423489; ok := ok and raisesOverflowError(num <<:= intExpr( 4));
4577    num :=  -576460752303423488; ok := ok and raisesOverflowError(num <<:= intExpr( 5));
4578    num :=  -288230376151711745; ok := ok and raisesOverflowError(num <<:= intExpr( 5));
4579    num :=  -288230376151711744; ok := ok and raisesOverflowError(num <<:= intExpr( 6));
4580    num :=    -9007199254740993; ok := ok and raisesOverflowError(num <<:= intExpr(10));
4581    num :=    -9007199254740992; ok := ok and raisesOverflowError(num <<:= intExpr(11));
4582    num :=     -281474976710657; ok := ok and raisesOverflowError(num <<:= intExpr(15));
4583    num :=     -281474976710656; ok := ok and raisesOverflowError(num <<:= intExpr(16));
4584    num :=       -8796093022209; ok := ok and raisesOverflowError(num <<:= intExpr(20));
4585    num :=       -8796093022208; ok := ok and raisesOverflowError(num <<:= intExpr(21));
4586    num :=        -274877906945; ok := ok and raisesOverflowError(num <<:= intExpr(25));
4587    num :=        -274877906944; ok := ok and raisesOverflowError(num <<:= intExpr(26));
4588    num :=          -8589934593; ok := ok and raisesOverflowError(num <<:= intExpr(30));
4589    num :=          -8589934592; ok := ok and raisesOverflowError(num <<:= intExpr(31));
4590    num :=           -268435457; ok := ok and raisesOverflowError(num <<:= intExpr(35));
4591    num :=           -268435456; ok := ok and raisesOverflowError(num <<:= intExpr(36));
4592    num :=             -8388609; ok := ok and raisesOverflowError(num <<:= intExpr(40));
4593    num :=             -8388608; ok := ok and raisesOverflowError(num <<:= intExpr(41));
4594    num :=              -262145; ok := ok and raisesOverflowError(num <<:= intExpr(45));
4595    num :=              -262144; ok := ok and raisesOverflowError(num <<:= intExpr(46));
4596    num :=                -8193; ok := ok and raisesOverflowError(num <<:= intExpr(50));
4597    num :=                -8192; ok := ok and raisesOverflowError(num <<:= intExpr(51));
4598    num :=                 -257; ok := ok and raisesOverflowError(num <<:= intExpr(55));
4599    num :=                 -256; ok := ok and raisesOverflowError(num <<:= intExpr(56));
4600    num :=                   -9; ok := ok and raisesOverflowError(num <<:= intExpr(60));
4601    num :=                   -8; ok := ok and raisesOverflowError(num <<:= intExpr(61));
4602    num :=                   -5; ok := ok and raisesOverflowError(num <<:= intExpr(61));
4603    num :=                   -4; ok := ok and raisesOverflowError(num <<:= intExpr(62));
4604    num :=                   -3; ok := ok and raisesOverflowError(num <<:= intExpr(62));
4605    num :=                   -2; ok := ok and raisesOverflowError(num <<:= intExpr(63));
4606    num :=                   -1; ok := ok and raisesOverflowError(num <<:= intExpr(64));
4607    num :=                    0; ok := ok and raisesOverflowError(num <<:= intExpr(64));
4608    num :=                    1; ok := ok and raisesOverflowError(num <<:= intExpr(63));
4609    num :=                    2; ok := ok and raisesOverflowError(num <<:= intExpr(62));
4610    num :=                    3; ok := ok and raisesOverflowError(num <<:= intExpr(62));
4611    num :=                    4; ok := ok and raisesOverflowError(num <<:= intExpr(61));
4612    num :=                    7; ok := ok and raisesOverflowError(num <<:= intExpr(61));
4613    num :=                    8; ok := ok and raisesOverflowError(num <<:= intExpr(60));
4614    num :=                  255; ok := ok and raisesOverflowError(num <<:= intExpr(56));
4615    num :=                  256; ok := ok and raisesOverflowError(num <<:= intExpr(55));
4616    num :=                 8191; ok := ok and raisesOverflowError(num <<:= intExpr(51));
4617    num :=                 8192; ok := ok and raisesOverflowError(num <<:= intExpr(50));
4618    num :=               262143; ok := ok and raisesOverflowError(num <<:= intExpr(46));
4619    num :=               262144; ok := ok and raisesOverflowError(num <<:= intExpr(45));
4620    num :=              8388607; ok := ok and raisesOverflowError(num <<:= intExpr(41));
4621    num :=              8388608; ok := ok and raisesOverflowError(num <<:= intExpr(40));
4622    num :=            268435455; ok := ok and raisesOverflowError(num <<:= intExpr(36));
4623    num :=            268435456; ok := ok and raisesOverflowError(num <<:= intExpr(35));
4624    num :=           8589934591; ok := ok and raisesOverflowError(num <<:= intExpr(31));
4625    num :=           8589934592; ok := ok and raisesOverflowError(num <<:= intExpr(30));
4626    num :=         274877906943; ok := ok and raisesOverflowError(num <<:= intExpr(26));
4627    num :=         274877906944; ok := ok and raisesOverflowError(num <<:= intExpr(25));
4628    num :=        8796093022207; ok := ok and raisesOverflowError(num <<:= intExpr(21));
4629    num :=        8796093022208; ok := ok and raisesOverflowError(num <<:= intExpr(20));
4630    num :=      281474976710655; ok := ok and raisesOverflowError(num <<:= intExpr(16));
4631    num :=      281474976710656; ok := ok and raisesOverflowError(num <<:= intExpr(15));
4632    num :=     9007199254740991; ok := ok and raisesOverflowError(num <<:= intExpr(11));
4633    num :=     9007199254740992; ok := ok and raisesOverflowError(num <<:= intExpr(10));
4634    num :=   288230376151711743; ok := ok and raisesOverflowError(num <<:= intExpr( 6));
4635    num :=   288230376151711744; ok := ok and raisesOverflowError(num <<:= intExpr( 5));
4636    num :=   576460752303423487; ok := ok and raisesOverflowError(num <<:= intExpr( 5));
4637    num :=   576460752303423488; ok := ok and raisesOverflowError(num <<:= intExpr( 4));
4638    num :=  1152921504606846975; ok := ok and raisesOverflowError(num <<:= intExpr( 4));
4639    num :=  1152921504606846976; ok := ok and raisesOverflowError(num <<:= intExpr( 3));
4640    num :=  2305843009213693951; ok := ok and raisesOverflowError(num <<:= intExpr( 3));
4641    num :=  2305843009213693952; ok := ok and raisesOverflowError(num <<:= intExpr( 2));
4642    num :=  4611686018427387903; ok := ok and raisesOverflowError(num <<:= intExpr( 2));
4643    num :=  4611686018427387904; ok := ok and raisesOverflowError(num <<:= intExpr( 1));
4644    arr[1] :=            INT64_MIN; ok := ok and raisesOverflowError(arr[1] <<:=  1);
4645    arr[1] := -4611686018427387905; ok := ok and raisesOverflowError(arr[1] <<:=  1);
4646    arr[1] := -4611686018427387904; ok := ok and raisesOverflowError(arr[1] <<:=  2);
4647    arr[1] := -2305843009213693953; ok := ok and raisesOverflowError(arr[1] <<:=  2);
4648    arr[1] := -2305843009213693952; ok := ok and raisesOverflowError(arr[1] <<:=  3);
4649    arr[1] := -1152921504606846977; ok := ok and raisesOverflowError(arr[1] <<:=  3);
4650    arr[1] :=  -576460752303423489; ok := ok and raisesOverflowError(arr[1] <<:=  4);
4651    arr[1] :=  -576460752303423488; ok := ok and raisesOverflowError(arr[1] <<:=  5);
4652    arr[1] :=  -288230376151711745; ok := ok and raisesOverflowError(arr[1] <<:=  5);
4653    arr[1] :=  -288230376151711744; ok := ok and raisesOverflowError(arr[1] <<:=  6);
4654    arr[1] :=    -9007199254740993; ok := ok and raisesOverflowError(arr[1] <<:= 10);
4655    arr[1] :=    -9007199254740992; ok := ok and raisesOverflowError(arr[1] <<:= 11);
4656    arr[1] :=     -281474976710657; ok := ok and raisesOverflowError(arr[1] <<:= 15);
4657    arr[1] :=     -281474976710656; ok := ok and raisesOverflowError(arr[1] <<:= 16);
4658    arr[1] :=       -8796093022209; ok := ok and raisesOverflowError(arr[1] <<:= 20);
4659    arr[1] :=       -8796093022208; ok := ok and raisesOverflowError(arr[1] <<:= 21);
4660    arr[1] :=        -274877906945; ok := ok and raisesOverflowError(arr[1] <<:= 25);
4661    arr[1] :=        -274877906944; ok := ok and raisesOverflowError(arr[1] <<:= 26);
4662    arr[1] :=          -8589934593; ok := ok and raisesOverflowError(arr[1] <<:= 30);
4663    arr[1] :=          -8589934592; ok := ok and raisesOverflowError(arr[1] <<:= 31);
4664    arr[1] :=           -268435457; ok := ok and raisesOverflowError(arr[1] <<:= 35);
4665    arr[1] :=           -268435456; ok := ok and raisesOverflowError(arr[1] <<:= 36);
4666    arr[1] :=             -8388609; ok := ok and raisesOverflowError(arr[1] <<:= 40);
4667    arr[1] :=             -8388608; ok := ok and raisesOverflowError(arr[1] <<:= 41);
4668    arr[1] :=              -262145; ok := ok and raisesOverflowError(arr[1] <<:= 45);
4669    arr[1] :=              -262144; ok := ok and raisesOverflowError(arr[1] <<:= 46);
4670    arr[1] :=                -8193; ok := ok and raisesOverflowError(arr[1] <<:= 50);
4671    arr[1] :=                -8192; ok := ok and raisesOverflowError(arr[1] <<:= 51);
4672    arr[1] :=                 -257; ok := ok and raisesOverflowError(arr[1] <<:= 55);
4673    arr[1] :=                 -256; ok := ok and raisesOverflowError(arr[1] <<:= 56);
4674    arr[1] :=                   -9; ok := ok and raisesOverflowError(arr[1] <<:= 60);
4675    arr[1] :=                   -8; ok := ok and raisesOverflowError(arr[1] <<:= 61);
4676    arr[1] :=                   -5; ok := ok and raisesOverflowError(arr[1] <<:= 61);
4677    arr[1] :=                   -4; ok := ok and raisesOverflowError(arr[1] <<:= 62);
4678    arr[1] :=                   -3; ok := ok and raisesOverflowError(arr[1] <<:= 62);
4679    arr[1] :=                   -2; ok := ok and raisesOverflowError(arr[1] <<:= 63);
4680    arr[1] :=                   -1; ok := ok and raisesOverflowError(arr[1] <<:= 64);
4681    arr[1] :=                    0; ok := ok and raisesOverflowError(arr[1] <<:= 64);
4682    arr[1] :=                    1; ok := ok and raisesOverflowError(arr[1] <<:= 63);
4683    arr[1] :=                    2; ok := ok and raisesOverflowError(arr[1] <<:= 62);
4684    arr[1] :=                    3; ok := ok and raisesOverflowError(arr[1] <<:= 62);
4685    arr[1] :=                    4; ok := ok and raisesOverflowError(arr[1] <<:= 61);
4686    arr[1] :=                    7; ok := ok and raisesOverflowError(arr[1] <<:= 61);
4687    arr[1] :=                    8; ok := ok and raisesOverflowError(arr[1] <<:= 60);
4688    arr[1] :=                  255; ok := ok and raisesOverflowError(arr[1] <<:= 56);
4689    arr[1] :=                  256; ok := ok and raisesOverflowError(arr[1] <<:= 55);
4690    arr[1] :=                 8191; ok := ok and raisesOverflowError(arr[1] <<:= 51);
4691    arr[1] :=                 8192; ok := ok and raisesOverflowError(arr[1] <<:= 50);
4692    arr[1] :=               262143; ok := ok and raisesOverflowError(arr[1] <<:= 46);
4693    arr[1] :=               262144; ok := ok and raisesOverflowError(arr[1] <<:= 45);
4694    arr[1] :=              8388607; ok := ok and raisesOverflowError(arr[1] <<:= 41);
4695    arr[1] :=              8388608; ok := ok and raisesOverflowError(arr[1] <<:= 40);
4696    arr[1] :=            268435455; ok := ok and raisesOverflowError(arr[1] <<:= 36);
4697    arr[1] :=            268435456; ok := ok and raisesOverflowError(arr[1] <<:= 35);
4698    arr[1] :=           8589934591; ok := ok and raisesOverflowError(arr[1] <<:= 31);
4699    arr[1] :=           8589934592; ok := ok and raisesOverflowError(arr[1] <<:= 30);
4700    arr[1] :=         274877906943; ok := ok and raisesOverflowError(arr[1] <<:= 26);
4701    arr[1] :=         274877906944; ok := ok and raisesOverflowError(arr[1] <<:= 25);
4702    arr[1] :=        8796093022207; ok := ok and raisesOverflowError(arr[1] <<:= 21);
4703    arr[1] :=        8796093022208; ok := ok and raisesOverflowError(arr[1] <<:= 20);
4704    arr[1] :=      281474976710655; ok := ok and raisesOverflowError(arr[1] <<:= 16);
4705    arr[1] :=      281474976710656; ok := ok and raisesOverflowError(arr[1] <<:= 15);
4706    arr[1] :=     9007199254740991; ok := ok and raisesOverflowError(arr[1] <<:= 11);
4707    arr[1] :=     9007199254740992; ok := ok and raisesOverflowError(arr[1] <<:= 10);
4708    arr[1] :=   288230376151711743; ok := ok and raisesOverflowError(arr[1] <<:=  6);
4709    arr[1] :=   288230376151711744; ok := ok and raisesOverflowError(arr[1] <<:=  5);
4710    arr[1] :=   576460752303423487; ok := ok and raisesOverflowError(arr[1] <<:=  5);
4711    arr[1] :=   576460752303423488; ok := ok and raisesOverflowError(arr[1] <<:=  4);
4712    arr[1] :=  1152921504606846975; ok := ok and raisesOverflowError(arr[1] <<:=  4);
4713    arr[1] :=  1152921504606846976; ok := ok and raisesOverflowError(arr[1] <<:=  3);
4714    arr[1] :=  2305843009213693951; ok := ok and raisesOverflowError(arr[1] <<:=  3);
4715    arr[1] :=  2305843009213693952; ok := ok and raisesOverflowError(arr[1] <<:=  2);
4716    arr[1] :=  4611686018427387903; ok := ok and raisesOverflowError(arr[1] <<:=  2);
4717    arr[1] :=  4611686018427387904; ok := ok and raisesOverflowError(arr[1] <<:=  1);
4718    arr[1] :=            INT64_MIN; ok := ok and raisesOverflowError(arr[1] <<:= intExpr( 1));
4719    arr[1] := -4611686018427387905; ok := ok and raisesOverflowError(arr[1] <<:= intExpr( 1));
4720    arr[1] := -4611686018427387904; ok := ok and raisesOverflowError(arr[1] <<:= intExpr( 2));
4721    arr[1] := -2305843009213693953; ok := ok and raisesOverflowError(arr[1] <<:= intExpr( 2));
4722    arr[1] := -2305843009213693952; ok := ok and raisesOverflowError(arr[1] <<:= intExpr( 3));
4723    arr[1] := -1152921504606846977; ok := ok and raisesOverflowError(arr[1] <<:= intExpr( 3));
4724    arr[1] :=  -576460752303423489; ok := ok and raisesOverflowError(arr[1] <<:= intExpr( 4));
4725    arr[1] :=  -576460752303423488; ok := ok and raisesOverflowError(arr[1] <<:= intExpr( 5));
4726    arr[1] :=  -288230376151711745; ok := ok and raisesOverflowError(arr[1] <<:= intExpr( 5));
4727    arr[1] :=  -288230376151711744; ok := ok and raisesOverflowError(arr[1] <<:= intExpr( 6));
4728    arr[1] :=    -9007199254740993; ok := ok and raisesOverflowError(arr[1] <<:= intExpr(10));
4729    arr[1] :=    -9007199254740992; ok := ok and raisesOverflowError(arr[1] <<:= intExpr(11));
4730    arr[1] :=     -281474976710657; ok := ok and raisesOverflowError(arr[1] <<:= intExpr(15));
4731    arr[1] :=     -281474976710656; ok := ok and raisesOverflowError(arr[1] <<:= intExpr(16));
4732    arr[1] :=       -8796093022209; ok := ok and raisesOverflowError(arr[1] <<:= intExpr(20));
4733    arr[1] :=       -8796093022208; ok := ok and raisesOverflowError(arr[1] <<:= intExpr(21));
4734    arr[1] :=        -274877906945; ok := ok and raisesOverflowError(arr[1] <<:= intExpr(25));
4735    arr[1] :=        -274877906944; ok := ok and raisesOverflowError(arr[1] <<:= intExpr(26));
4736    arr[1] :=          -8589934593; ok := ok and raisesOverflowError(arr[1] <<:= intExpr(30));
4737    arr[1] :=          -8589934592; ok := ok and raisesOverflowError(arr[1] <<:= intExpr(31));
4738    arr[1] :=           -268435457; ok := ok and raisesOverflowError(arr[1] <<:= intExpr(35));
4739    arr[1] :=           -268435456; ok := ok and raisesOverflowError(arr[1] <<:= intExpr(36));
4740    arr[1] :=             -8388609; ok := ok and raisesOverflowError(arr[1] <<:= intExpr(40));
4741    arr[1] :=             -8388608; ok := ok and raisesOverflowError(arr[1] <<:= intExpr(41));
4742    arr[1] :=              -262145; ok := ok and raisesOverflowError(arr[1] <<:= intExpr(45));
4743    arr[1] :=              -262144; ok := ok and raisesOverflowError(arr[1] <<:= intExpr(46));
4744    arr[1] :=                -8193; ok := ok and raisesOverflowError(arr[1] <<:= intExpr(50));
4745    arr[1] :=                -8192; ok := ok and raisesOverflowError(arr[1] <<:= intExpr(51));
4746    arr[1] :=                 -257; ok := ok and raisesOverflowError(arr[1] <<:= intExpr(55));
4747    arr[1] :=                 -256; ok := ok and raisesOverflowError(arr[1] <<:= intExpr(56));
4748    arr[1] :=                   -9; ok := ok and raisesOverflowError(arr[1] <<:= intExpr(60));
4749    arr[1] :=                   -8; ok := ok and raisesOverflowError(arr[1] <<:= intExpr(61));
4750    arr[1] :=                   -5; ok := ok and raisesOverflowError(arr[1] <<:= intExpr(61));
4751    arr[1] :=                   -4; ok := ok and raisesOverflowError(arr[1] <<:= intExpr(62));
4752    arr[1] :=                   -3; ok := ok and raisesOverflowError(arr[1] <<:= intExpr(62));
4753    arr[1] :=                   -2; ok := ok and raisesOverflowError(arr[1] <<:= intExpr(63));
4754    arr[1] :=                   -1; ok := ok and raisesOverflowError(arr[1] <<:= intExpr(64));
4755    arr[1] :=                    0; ok := ok and raisesOverflowError(arr[1] <<:= intExpr(64));
4756    arr[1] :=                    1; ok := ok and raisesOverflowError(arr[1] <<:= intExpr(63));
4757    arr[1] :=                    2; ok := ok and raisesOverflowError(arr[1] <<:= intExpr(62));
4758    arr[1] :=                    3; ok := ok and raisesOverflowError(arr[1] <<:= intExpr(62));
4759    arr[1] :=                    4; ok := ok and raisesOverflowError(arr[1] <<:= intExpr(61));
4760    arr[1] :=                    7; ok := ok and raisesOverflowError(arr[1] <<:= intExpr(61));
4761    arr[1] :=                    8; ok := ok and raisesOverflowError(arr[1] <<:= intExpr(60));
4762    arr[1] :=                  255; ok := ok and raisesOverflowError(arr[1] <<:= intExpr(56));
4763    arr[1] :=                  256; ok := ok and raisesOverflowError(arr[1] <<:= intExpr(55));
4764    arr[1] :=                 8191; ok := ok and raisesOverflowError(arr[1] <<:= intExpr(51));
4765    arr[1] :=                 8192; ok := ok and raisesOverflowError(arr[1] <<:= intExpr(50));
4766    arr[1] :=               262143; ok := ok and raisesOverflowError(arr[1] <<:= intExpr(46));
4767    arr[1] :=               262144; ok := ok and raisesOverflowError(arr[1] <<:= intExpr(45));
4768    arr[1] :=              8388607; ok := ok and raisesOverflowError(arr[1] <<:= intExpr(41));
4769    arr[1] :=              8388608; ok := ok and raisesOverflowError(arr[1] <<:= intExpr(40));
4770    arr[1] :=            268435455; ok := ok and raisesOverflowError(arr[1] <<:= intExpr(36));
4771    arr[1] :=            268435456; ok := ok and raisesOverflowError(arr[1] <<:= intExpr(35));
4772    arr[1] :=           8589934591; ok := ok and raisesOverflowError(arr[1] <<:= intExpr(31));
4773    arr[1] :=           8589934592; ok := ok and raisesOverflowError(arr[1] <<:= intExpr(30));
4774    arr[1] :=         274877906943; ok := ok and raisesOverflowError(arr[1] <<:= intExpr(26));
4775    arr[1] :=         274877906944; ok := ok and raisesOverflowError(arr[1] <<:= intExpr(25));
4776    arr[1] :=        8796093022207; ok := ok and raisesOverflowError(arr[1] <<:= intExpr(21));
4777    arr[1] :=        8796093022208; ok := ok and raisesOverflowError(arr[1] <<:= intExpr(20));
4778    arr[1] :=      281474976710655; ok := ok and raisesOverflowError(arr[1] <<:= intExpr(16));
4779    arr[1] :=      281474976710656; ok := ok and raisesOverflowError(arr[1] <<:= intExpr(15));
4780    arr[1] :=     9007199254740991; ok := ok and raisesOverflowError(arr[1] <<:= intExpr(11));
4781    arr[1] :=     9007199254740992; ok := ok and raisesOverflowError(arr[1] <<:= intExpr(10));
4782    arr[1] :=   288230376151711743; ok := ok and raisesOverflowError(arr[1] <<:= intExpr( 6));
4783    arr[1] :=   288230376151711744; ok := ok and raisesOverflowError(arr[1] <<:= intExpr( 5));
4784    arr[1] :=   576460752303423487; ok := ok and raisesOverflowError(arr[1] <<:= intExpr( 5));
4785    arr[1] :=   576460752303423488; ok := ok and raisesOverflowError(arr[1] <<:= intExpr( 4));
4786    arr[1] :=  1152921504606846975; ok := ok and raisesOverflowError(arr[1] <<:= intExpr( 4));
4787    arr[1] :=  1152921504606846976; ok := ok and raisesOverflowError(arr[1] <<:= intExpr( 3));
4788    arr[1] :=  2305843009213693951; ok := ok and raisesOverflowError(arr[1] <<:= intExpr( 3));
4789    arr[1] :=  2305843009213693952; ok := ok and raisesOverflowError(arr[1] <<:= intExpr( 2));
4790    arr[1] :=  4611686018427387903; ok := ok and raisesOverflowError(arr[1] <<:= intExpr( 2));
4791    arr[1] :=  4611686018427387904; ok := ok and raisesOverflowError(arr[1] <<:= intExpr( 1));
4792    if not ok then
4793      writeln(" ***** Left shift assignment does not raise OVERFLOW_ERROR.");
4794      okay := FALSE;
4795    end if;
4796
4797    ok := TRUE;
4798    num := -16111; ok := ok and raisesOverflowError(num <<:= -999);
4799    num := -16111; ok := ok and raisesOverflowError(num <<:=  -63);
4800    num := -16111; ok := ok and raisesOverflowError(num <<:=   -1);
4801    num := -16111; ok := ok and raisesOverflowError(num <<:=   64);
4802    num := -16111; ok := ok and raisesOverflowError(num <<:=  999);
4803    num :=     -1; ok := ok and raisesOverflowError(num <<:= -999);
4804    num :=     -1; ok := ok and raisesOverflowError(num <<:=  -63);
4805    num :=     -1; ok := ok and raisesOverflowError(num <<:=   -1);
4806    num :=     -1; ok := ok and raisesOverflowError(num <<:=   64);
4807    num :=     -1; ok := ok and raisesOverflowError(num <<:=  999);
4808    num :=      0; ok := ok and raisesOverflowError(num <<:= -999);
4809    num :=      0; ok := ok and raisesOverflowError(num <<:=  -63);
4810    num :=      0; ok := ok and raisesOverflowError(num <<:=   -1);
4811    num :=      0; ok := ok and raisesOverflowError(num <<:=   64);
4812    num :=      0; ok := ok and raisesOverflowError(num <<:=  999);
4813    num :=  16111; ok := ok and raisesOverflowError(num <<:= -999);
4814    num :=  16111; ok := ok and raisesOverflowError(num <<:=  -63);
4815    num :=  16111; ok := ok and raisesOverflowError(num <<:=   -1);
4816    num :=  16111; ok := ok and raisesOverflowError(num <<:=   64);
4817    num :=  16111; ok := ok and raisesOverflowError(num <<:=  999);
4818    num := -16111; ok := ok and raisesOverflowError(num <<:= intExpr(-999));
4819    num := -16111; ok := ok and raisesOverflowError(num <<:= intExpr( -63));
4820    num := -16111; ok := ok and raisesOverflowError(num <<:= intExpr(  -1));
4821    num := -16111; ok := ok and raisesOverflowError(num <<:= intExpr(  64));
4822    num := -16111; ok := ok and raisesOverflowError(num <<:= intExpr( 999));
4823    num :=     -1; ok := ok and raisesOverflowError(num <<:= intExpr(-999));
4824    num :=     -1; ok := ok and raisesOverflowError(num <<:= intExpr( -63));
4825    num :=     -1; ok := ok and raisesOverflowError(num <<:= intExpr(  -1));
4826    num :=     -1; ok := ok and raisesOverflowError(num <<:= intExpr(  64));
4827    num :=     -1; ok := ok and raisesOverflowError(num <<:= intExpr( 999));
4828    num :=      0; ok := ok and raisesOverflowError(num <<:= intExpr(-999));
4829    num :=      0; ok := ok and raisesOverflowError(num <<:= intExpr( -63));
4830    num :=      0; ok := ok and raisesOverflowError(num <<:= intExpr(  -1));
4831    num :=      0; ok := ok and raisesOverflowError(num <<:= intExpr(  64));
4832    num :=      0; ok := ok and raisesOverflowError(num <<:= intExpr( 999));
4833    num :=  16111; ok := ok and raisesOverflowError(num <<:= intExpr(-999));
4834    num :=  16111; ok := ok and raisesOverflowError(num <<:= intExpr( -63));
4835    num :=  16111; ok := ok and raisesOverflowError(num <<:= intExpr(  -1));
4836    num :=  16111; ok := ok and raisesOverflowError(num <<:= intExpr(  64));
4837    num :=  16111; ok := ok and raisesOverflowError(num <<:= intExpr( 999));
4838    arr[1] := -16111; ok := ok and raisesOverflowError(arr[1] <<:= -999);
4839    arr[1] := -16111; ok := ok and raisesOverflowError(arr[1] <<:=  -63);
4840    arr[1] := -16111; ok := ok and raisesOverflowError(arr[1] <<:=   -1);
4841    arr[1] := -16111; ok := ok and raisesOverflowError(arr[1] <<:=   64);
4842    arr[1] := -16111; ok := ok and raisesOverflowError(arr[1] <<:=  999);
4843    arr[1] :=     -1; ok := ok and raisesOverflowError(arr[1] <<:= -999);
4844    arr[1] :=     -1; ok := ok and raisesOverflowError(arr[1] <<:=  -63);
4845    arr[1] :=     -1; ok := ok and raisesOverflowError(arr[1] <<:=   -1);
4846    arr[1] :=     -1; ok := ok and raisesOverflowError(arr[1] <<:=   64);
4847    arr[1] :=     -1; ok := ok and raisesOverflowError(arr[1] <<:=  999);
4848    arr[1] :=      0; ok := ok and raisesOverflowError(arr[1] <<:= -999);
4849    arr[1] :=      0; ok := ok and raisesOverflowError(arr[1] <<:=  -63);
4850    arr[1] :=      0; ok := ok and raisesOverflowError(arr[1] <<:=   -1);
4851    arr[1] :=      0; ok := ok and raisesOverflowError(arr[1] <<:=   64);
4852    arr[1] :=      0; ok := ok and raisesOverflowError(arr[1] <<:=  999);
4853    arr[1] :=  16111; ok := ok and raisesOverflowError(arr[1] <<:= -999);
4854    arr[1] :=  16111; ok := ok and raisesOverflowError(arr[1] <<:=  -63);
4855    arr[1] :=  16111; ok := ok and raisesOverflowError(arr[1] <<:=   -1);
4856    arr[1] :=  16111; ok := ok and raisesOverflowError(arr[1] <<:=   64);
4857    arr[1] :=  16111; ok := ok and raisesOverflowError(arr[1] <<:=  999);
4858    arr[1] := -16111; ok := ok and raisesOverflowError(arr[1] <<:= intExpr(-999));
4859    arr[1] := -16111; ok := ok and raisesOverflowError(arr[1] <<:= intExpr( -63));
4860    arr[1] := -16111; ok := ok and raisesOverflowError(arr[1] <<:= intExpr(  -1));
4861    arr[1] := -16111; ok := ok and raisesOverflowError(arr[1] <<:= intExpr(  64));
4862    arr[1] := -16111; ok := ok and raisesOverflowError(arr[1] <<:= intExpr( 999));
4863    arr[1] :=     -1; ok := ok and raisesOverflowError(arr[1] <<:= intExpr(-999));
4864    arr[1] :=     -1; ok := ok and raisesOverflowError(arr[1] <<:= intExpr( -63));
4865    arr[1] :=     -1; ok := ok and raisesOverflowError(arr[1] <<:= intExpr(  -1));
4866    arr[1] :=     -1; ok := ok and raisesOverflowError(arr[1] <<:= intExpr(  64));
4867    arr[1] :=     -1; ok := ok and raisesOverflowError(arr[1] <<:= intExpr( 999));
4868    arr[1] :=      0; ok := ok and raisesOverflowError(arr[1] <<:= intExpr(-999));
4869    arr[1] :=      0; ok := ok and raisesOverflowError(arr[1] <<:= intExpr( -63));
4870    arr[1] :=      0; ok := ok and raisesOverflowError(arr[1] <<:= intExpr(  -1));
4871    arr[1] :=      0; ok := ok and raisesOverflowError(arr[1] <<:= intExpr(  64));
4872    arr[1] :=      0; ok := ok and raisesOverflowError(arr[1] <<:= intExpr( 999));
4873    arr[1] :=  16111; ok := ok and raisesOverflowError(arr[1] <<:= intExpr(-999));
4874    arr[1] :=  16111; ok := ok and raisesOverflowError(arr[1] <<:= intExpr( -63));
4875    arr[1] :=  16111; ok := ok and raisesOverflowError(arr[1] <<:= intExpr(  -1));
4876    arr[1] :=  16111; ok := ok and raisesOverflowError(arr[1] <<:= intExpr(  64));
4877    arr[1] :=  16111; ok := ok and raisesOverflowError(arr[1] <<:= intExpr( 999));
4878    if not ok then
4879      writeln(" ***** Left shift assignment with illegal shift count does not raise OVERFLOW_ERROR.");
4880      okay := FALSE;
4881    end if;
4882
4883    if okay then
4884      writeln("Overflow checking of left shift assignment works correct.");
4885    else
4886      writeln(" ***** Overflow checking of left shift assignment does not work correct.");
4887    end if;
4888  end func;
4889
4890
4891const proc: check_rShift is func
4892  local
4893    var boolean: okay is TRUE;
4894  begin
4895    if  not raisesOverflowError(-16111 >> integer.first) or
4896        not raisesOverflowError(-16111 >>          -999) or
4897        not raisesOverflowError(-16111 >>           -63) or
4898        not raisesOverflowError(-16111 >>            -1) or
4899        not raisesOverflowError(-16111 >>            64) or
4900        not raisesOverflowError(-16111 >>           999) or
4901        not raisesOverflowError(-16111 >>  integer.last) or
4902        not raisesOverflowError(    -1 >> integer.first) or
4903        not raisesOverflowError(    -1 >>          -999) or
4904        not raisesOverflowError(    -1 >>           -63) or
4905        not raisesOverflowError(    -1 >>            -1) or
4906        not raisesOverflowError(    -1 >>            64) or
4907        not raisesOverflowError(    -1 >>           999) or
4908        not raisesOverflowError(    -1 >>  integer.last) or
4909        not raisesOverflowError(     0 >> integer.first) or
4910        not raisesOverflowError(     0 >>          -999) or
4911        not raisesOverflowError(     0 >>           -63) or
4912        not raisesOverflowError(     0 >>            -1) or
4913        not raisesOverflowError(     0 >>            64) or
4914        not raisesOverflowError(     0 >>           999) or
4915        not raisesOverflowError(     0 >>  integer.last) or
4916        not raisesOverflowError( 16111 >> integer.first) or
4917        not raisesOverflowError( 16111 >>          -999) or
4918        not raisesOverflowError( 16111 >>           -63) or
4919        not raisesOverflowError( 16111 >>            -1) or
4920        not raisesOverflowError( 16111 >>            64) or
4921        not raisesOverflowError( 16111 >>           999) or
4922        not raisesOverflowError( 16111 >>  integer.last) or
4923        not raisesOverflowError(intExpr(-16111) >> integer.first) or
4924        not raisesOverflowError(intExpr(-16111) >>          -999) or
4925        not raisesOverflowError(intExpr(-16111) >>           -63) or
4926        not raisesOverflowError(intExpr(-16111) >>            -1) or
4927        not raisesOverflowError(intExpr(-16111) >>            64) or
4928        not raisesOverflowError(intExpr(-16111) >>           999) or
4929        not raisesOverflowError(intExpr(-16111) >>  integer.last) or
4930        not raisesOverflowError(intExpr(    -1) >> integer.first) or
4931        not raisesOverflowError(intExpr(    -1) >>          -999) or
4932        not raisesOverflowError(intExpr(    -1) >>           -63) or
4933        not raisesOverflowError(intExpr(    -1) >>            -1) or
4934        not raisesOverflowError(intExpr(    -1) >>            64) or
4935        not raisesOverflowError(intExpr(    -1) >>           999) or
4936        not raisesOverflowError(intExpr(    -1) >>  integer.last) or
4937        not raisesOverflowError(intExpr(     0) >> integer.first) or
4938        not raisesOverflowError(intExpr(     0) >>          -999) or
4939        not raisesOverflowError(intExpr(     0) >>           -63) or
4940        not raisesOverflowError(intExpr(     0) >>            -1) or
4941        not raisesOverflowError(intExpr(     0) >>            64) or
4942        not raisesOverflowError(intExpr(     0) >>           999) or
4943        not raisesOverflowError(intExpr(     0) >>  integer.last) or
4944        not raisesOverflowError(intExpr( 16111) >> integer.first) or
4945        not raisesOverflowError(intExpr( 16111) >>          -999) or
4946        not raisesOverflowError(intExpr( 16111) >>           -63) or
4947        not raisesOverflowError(intExpr( 16111) >>            -1) or
4948        not raisesOverflowError(intExpr( 16111) >>            64) or
4949        not raisesOverflowError(intExpr( 16111) >>           999) or
4950        not raisesOverflowError(intExpr( 16111) >>  integer.last) or
4951        not raisesOverflowError(-16111 >> intExpr(integer.first)) or
4952        not raisesOverflowError(-16111 >> intExpr(         -999)) or
4953        not raisesOverflowError(-16111 >> intExpr(          -63)) or
4954        not raisesOverflowError(-16111 >> intExpr(           -1)) or
4955        not raisesOverflowError(-16111 >> intExpr(           64)) or
4956        not raisesOverflowError(-16111 >> intExpr(          999)) or
4957        not raisesOverflowError(-16111 >> intExpr( integer.last)) or
4958        not raisesOverflowError(    -1 >> intExpr(integer.first)) or
4959        not raisesOverflowError(    -1 >> intExpr(         -999)) or
4960        not raisesOverflowError(    -1 >> intExpr(          -63)) or
4961        not raisesOverflowError(    -1 >> intExpr(           -1)) or
4962        not raisesOverflowError(    -1 >> intExpr(           64)) or
4963        not raisesOverflowError(    -1 >> intExpr(          999)) or
4964        not raisesOverflowError(    -1 >> intExpr( integer.last)) or
4965        not raisesOverflowError(     0 >> intExpr(integer.first)) or
4966        not raisesOverflowError(     0 >> intExpr(         -999)) or
4967        not raisesOverflowError(     0 >> intExpr(          -63)) or
4968        not raisesOverflowError(     0 >> intExpr(           -1)) or
4969        not raisesOverflowError(     0 >> intExpr(           64)) or
4970        not raisesOverflowError(     0 >> intExpr(          999)) or
4971        not raisesOverflowError(     0 >> intExpr( integer.last)) or
4972        not raisesOverflowError( 16111 >> intExpr(integer.first)) or
4973        not raisesOverflowError( 16111 >> intExpr(         -999)) or
4974        not raisesOverflowError( 16111 >> intExpr(          -63)) or
4975        not raisesOverflowError( 16111 >> intExpr(           -1)) or
4976        not raisesOverflowError( 16111 >> intExpr(           64)) or
4977        not raisesOverflowError( 16111 >> intExpr(          999)) or
4978        not raisesOverflowError( 16111 >> intExpr( integer.last)) or
4979        not raisesOverflowError(intExpr(-16111) >> intExpr(integer.first)) or
4980        not raisesOverflowError(intExpr(-16111) >> intExpr(         -999)) or
4981        not raisesOverflowError(intExpr(-16111) >> intExpr(          -63)) or
4982        not raisesOverflowError(intExpr(-16111) >> intExpr(           -1)) or
4983        not raisesOverflowError(intExpr(-16111) >> intExpr(           64)) or
4984        not raisesOverflowError(intExpr(-16111) >> intExpr(          999)) or
4985        not raisesOverflowError(intExpr(-16111) >> intExpr( integer.last)) or
4986        not raisesOverflowError(intExpr(    -1) >> intExpr(integer.first)) or
4987        not raisesOverflowError(intExpr(    -1) >> intExpr(         -999)) or
4988        not raisesOverflowError(intExpr(    -1) >> intExpr(          -63)) or
4989        not raisesOverflowError(intExpr(    -1) >> intExpr(           -1)) or
4990        not raisesOverflowError(intExpr(    -1) >> intExpr(           64)) or
4991        not raisesOverflowError(intExpr(    -1) >> intExpr(          999)) or
4992        not raisesOverflowError(intExpr(    -1) >> intExpr( integer.last)) or
4993        not raisesOverflowError(intExpr(     0) >> intExpr(integer.first)) or
4994        not raisesOverflowError(intExpr(     0) >> intExpr(         -999)) or
4995        not raisesOverflowError(intExpr(     0) >> intExpr(          -63)) or
4996        not raisesOverflowError(intExpr(     0) >> intExpr(           -1)) or
4997        not raisesOverflowError(intExpr(     0) >> intExpr(           64)) or
4998        not raisesOverflowError(intExpr(     0) >> intExpr(          999)) or
4999        not raisesOverflowError(intExpr(     0) >> intExpr( integer.last)) or
5000        not raisesOverflowError(intExpr( 16111) >> intExpr(integer.first)) or
5001        not raisesOverflowError(intExpr( 16111) >> intExpr(         -999)) or
5002        not raisesOverflowError(intExpr( 16111) >> intExpr(          -63)) or
5003        not raisesOverflowError(intExpr( 16111) >> intExpr(           -1)) or
5004        not raisesOverflowError(intExpr( 16111) >> intExpr(           64)) or
5005        not raisesOverflowError(intExpr( 16111) >> intExpr(          999)) or
5006        not raisesOverflowError(intExpr( 16111) >> intExpr( integer.last)) then
5007      writeln(" ***** Right shift with illegal shift count does not raise OVERFLOW_ERROR.");
5008      okay := FALSE;
5009    end if;
5010
5011    if okay then
5012      writeln("Overflow checking of right shift works correct.");
5013    else
5014      writeln(" ***** Overflow checking of right shift does not work correct.");
5015    end if;
5016  end func;
5017
5018
5019const proc: check_rShift_assign is func
5020  local
5021    var boolean: okay is TRUE;
5022    var boolean: ok is TRUE;
5023    var integer: num is 0;
5024    var array integer: arr is [] (0);
5025  begin
5026    num := -16111; ok := ok and raisesOverflowError(num >>:= -999);
5027    num := -16111; ok := ok and raisesOverflowError(num >>:=  -63);
5028    num := -16111; ok := ok and raisesOverflowError(num >>:=   -1);
5029    num := -16111; ok := ok and raisesOverflowError(num >>:=   64);
5030    num := -16111; ok := ok and raisesOverflowError(num >>:=  999);
5031    num :=     -1; ok := ok and raisesOverflowError(num >>:= -999);
5032    num :=     -1; ok := ok and raisesOverflowError(num >>:=  -63);
5033    num :=     -1; ok := ok and raisesOverflowError(num >>:=   -1);
5034    num :=     -1; ok := ok and raisesOverflowError(num >>:=   64);
5035    num :=     -1; ok := ok and raisesOverflowError(num >>:=  999);
5036    num :=      0; ok := ok and raisesOverflowError(num >>:= -999);
5037    num :=      0; ok := ok and raisesOverflowError(num >>:=  -63);
5038    num :=      0; ok := ok and raisesOverflowError(num >>:=   -1);
5039    num :=      0; ok := ok and raisesOverflowError(num >>:=   64);
5040    num :=      0; ok := ok and raisesOverflowError(num >>:=  999);
5041    num :=  16111; ok := ok and raisesOverflowError(num >>:= -999);
5042    num :=  16111; ok := ok and raisesOverflowError(num >>:=  -63);
5043    num :=  16111; ok := ok and raisesOverflowError(num >>:=   -1);
5044    num :=  16111; ok := ok and raisesOverflowError(num >>:=   64);
5045    num :=  16111; ok := ok and raisesOverflowError(num >>:=  999);
5046    num := -16111; ok := ok and raisesOverflowError(num >>:= intExpr(-999));
5047    num := -16111; ok := ok and raisesOverflowError(num >>:= intExpr( -63));
5048    num := -16111; ok := ok and raisesOverflowError(num >>:= intExpr(  -1));
5049    num := -16111; ok := ok and raisesOverflowError(num >>:= intExpr(  64));
5050    num := -16111; ok := ok and raisesOverflowError(num >>:= intExpr( 999));
5051    num :=     -1; ok := ok and raisesOverflowError(num >>:= intExpr(-999));
5052    num :=     -1; ok := ok and raisesOverflowError(num >>:= intExpr( -63));
5053    num :=     -1; ok := ok and raisesOverflowError(num >>:= intExpr(  -1));
5054    num :=     -1; ok := ok and raisesOverflowError(num >>:= intExpr(  64));
5055    num :=     -1; ok := ok and raisesOverflowError(num >>:= intExpr( 999));
5056    num :=      0; ok := ok and raisesOverflowError(num >>:= intExpr(-999));
5057    num :=      0; ok := ok and raisesOverflowError(num >>:= intExpr( -63));
5058    num :=      0; ok := ok and raisesOverflowError(num >>:= intExpr(  -1));
5059    num :=      0; ok := ok and raisesOverflowError(num >>:= intExpr(  64));
5060    num :=      0; ok := ok and raisesOverflowError(num >>:= intExpr( 999));
5061    num :=  16111; ok := ok and raisesOverflowError(num >>:= intExpr(-999));
5062    num :=  16111; ok := ok and raisesOverflowError(num >>:= intExpr( -63));
5063    num :=  16111; ok := ok and raisesOverflowError(num >>:= intExpr(  -1));
5064    num :=  16111; ok := ok and raisesOverflowError(num >>:= intExpr(  64));
5065    num :=  16111; ok := ok and raisesOverflowError(num >>:= intExpr( 999));
5066    arr[1] := -16111; ok := ok and raisesOverflowError(arr[1] >>:= -999);
5067    arr[1] := -16111; ok := ok and raisesOverflowError(arr[1] >>:=  -63);
5068    arr[1] := -16111; ok := ok and raisesOverflowError(arr[1] >>:=   -1);
5069    arr[1] := -16111; ok := ok and raisesOverflowError(arr[1] >>:=   64);
5070    arr[1] := -16111; ok := ok and raisesOverflowError(arr[1] >>:=  999);
5071    arr[1] :=     -1; ok := ok and raisesOverflowError(arr[1] >>:= -999);
5072    arr[1] :=     -1; ok := ok and raisesOverflowError(arr[1] >>:=  -63);
5073    arr[1] :=     -1; ok := ok and raisesOverflowError(arr[1] >>:=   -1);
5074    arr[1] :=     -1; ok := ok and raisesOverflowError(arr[1] >>:=   64);
5075    arr[1] :=     -1; ok := ok and raisesOverflowError(arr[1] >>:=  999);
5076    arr[1] :=      0; ok := ok and raisesOverflowError(arr[1] >>:= -999);
5077    arr[1] :=      0; ok := ok and raisesOverflowError(arr[1] >>:=  -63);
5078    arr[1] :=      0; ok := ok and raisesOverflowError(arr[1] >>:=   -1);
5079    arr[1] :=      0; ok := ok and raisesOverflowError(arr[1] >>:=   64);
5080    arr[1] :=      0; ok := ok and raisesOverflowError(arr[1] >>:=  999);
5081    arr[1] :=  16111; ok := ok and raisesOverflowError(arr[1] >>:= -999);
5082    arr[1] :=  16111; ok := ok and raisesOverflowError(arr[1] >>:=  -63);
5083    arr[1] :=  16111; ok := ok and raisesOverflowError(arr[1] >>:=   -1);
5084    arr[1] :=  16111; ok := ok and raisesOverflowError(arr[1] >>:=   64);
5085    arr[1] :=  16111; ok := ok and raisesOverflowError(arr[1] >>:=  999);
5086    arr[1] := -16111; ok := ok and raisesOverflowError(arr[1] >>:= intExpr(-999));
5087    arr[1] := -16111; ok := ok and raisesOverflowError(arr[1] >>:= intExpr( -63));
5088    arr[1] := -16111; ok := ok and raisesOverflowError(arr[1] >>:= intExpr(  -1));
5089    arr[1] := -16111; ok := ok and raisesOverflowError(arr[1] >>:= intExpr(  64));
5090    arr[1] := -16111; ok := ok and raisesOverflowError(arr[1] >>:= intExpr( 999));
5091    arr[1] :=     -1; ok := ok and raisesOverflowError(arr[1] >>:= intExpr(-999));
5092    arr[1] :=     -1; ok := ok and raisesOverflowError(arr[1] >>:= intExpr( -63));
5093    arr[1] :=     -1; ok := ok and raisesOverflowError(arr[1] >>:= intExpr(  -1));
5094    arr[1] :=     -1; ok := ok and raisesOverflowError(arr[1] >>:= intExpr(  64));
5095    arr[1] :=     -1; ok := ok and raisesOverflowError(arr[1] >>:= intExpr( 999));
5096    arr[1] :=      0; ok := ok and raisesOverflowError(arr[1] >>:= intExpr(-999));
5097    arr[1] :=      0; ok := ok and raisesOverflowError(arr[1] >>:= intExpr( -63));
5098    arr[1] :=      0; ok := ok and raisesOverflowError(arr[1] >>:= intExpr(  -1));
5099    arr[1] :=      0; ok := ok and raisesOverflowError(arr[1] >>:= intExpr(  64));
5100    arr[1] :=      0; ok := ok and raisesOverflowError(arr[1] >>:= intExpr( 999));
5101    arr[1] :=  16111; ok := ok and raisesOverflowError(arr[1] >>:= intExpr(-999));
5102    arr[1] :=  16111; ok := ok and raisesOverflowError(arr[1] >>:= intExpr( -63));
5103    arr[1] :=  16111; ok := ok and raisesOverflowError(arr[1] >>:= intExpr(  -1));
5104    arr[1] :=  16111; ok := ok and raisesOverflowError(arr[1] >>:= intExpr(  64));
5105    arr[1] :=  16111; ok := ok and raisesOverflowError(arr[1] >>:= intExpr( 999));
5106    if not ok then
5107      writeln(" ***** Right shift assignment with illegal shift count does not raise OVERFLOW_ERROR.");
5108      okay := FALSE;
5109    end if;
5110
5111    if okay then
5112      writeln("Overflow checking of right shift assignment works correct.");
5113    else
5114      writeln(" ***** Overflow checking of right shift assignment does not work correct.");
5115    end if;
5116  end func;
5117
5118
5119const proc: check_ulShift is func
5120  local
5121    var boolean: okay is TRUE;
5122  begin
5123    if  not raisesOverflowError(bin32(-16111) << integer.first) or
5124        not raisesOverflowError(bin32(-16111) <<          -999) or
5125        not raisesOverflowError(bin32(-16111) <<           -63) or
5126        not raisesOverflowError(bin32(-16111) <<            -1) or
5127        not raisesOverflowError(bin32(-16111) <<            64) or
5128        not raisesOverflowError(bin32(-16111) <<           999) or
5129        not raisesOverflowError(bin32(-16111) <<  integer.last) or
5130        not raisesOverflowError(bin32(    -1) << integer.first) or
5131        not raisesOverflowError(bin32(    -1) <<          -999) or
5132        not raisesOverflowError(bin32(    -1) <<           -63) or
5133        not raisesOverflowError(bin32(    -1) <<            -1) or
5134        not raisesOverflowError(bin32(    -1) <<            64) or
5135        not raisesOverflowError(bin32(    -1) <<           999) or
5136        not raisesOverflowError(bin32(    -1) <<  integer.last) or
5137        not raisesOverflowError(bin32(     0) << integer.first) or
5138        not raisesOverflowError(bin32(     0) <<          -999) or
5139        not raisesOverflowError(bin32(     0) <<           -63) or
5140        not raisesOverflowError(bin32(     0) <<            -1) or
5141        not raisesOverflowError(bin32(     0) <<            64) or
5142        not raisesOverflowError(bin32(     0) <<           999) or
5143        not raisesOverflowError(bin32(     0) <<  integer.last) or
5144        not raisesOverflowError(bin32( 16111) << integer.first) or
5145        not raisesOverflowError(bin32( 16111) <<          -999) or
5146        not raisesOverflowError(bin32( 16111) <<           -63) or
5147        not raisesOverflowError(bin32( 16111) <<            -1) or
5148        not raisesOverflowError(bin32( 16111) <<            64) or
5149        not raisesOverflowError(bin32( 16111) <<           999) or
5150        not raisesOverflowError(bin32( 16111) <<  integer.last) or
5151        not raisesOverflowError(bin32(intExpr(-16111)) << integer.first) or
5152        not raisesOverflowError(bin32(intExpr(-16111)) <<          -999) or
5153        not raisesOverflowError(bin32(intExpr(-16111)) <<           -63) or
5154        not raisesOverflowError(bin32(intExpr(-16111)) <<            -1) or
5155        not raisesOverflowError(bin32(intExpr(-16111)) <<            64) or
5156        not raisesOverflowError(bin32(intExpr(-16111)) <<           999) or
5157        not raisesOverflowError(bin32(intExpr(-16111)) <<  integer.last) or
5158        not raisesOverflowError(bin32(intExpr(    -1)) << integer.first) or
5159        not raisesOverflowError(bin32(intExpr(    -1)) <<          -999) or
5160        not raisesOverflowError(bin32(intExpr(    -1)) <<           -63) or
5161        not raisesOverflowError(bin32(intExpr(    -1)) <<            -1) or
5162        not raisesOverflowError(bin32(intExpr(    -1)) <<            64) or
5163        not raisesOverflowError(bin32(intExpr(    -1)) <<           999) or
5164        not raisesOverflowError(bin32(intExpr(    -1)) <<  integer.last) or
5165        not raisesOverflowError(bin32(intExpr(     0)) << integer.first) or
5166        not raisesOverflowError(bin32(intExpr(     0)) <<          -999) or
5167        not raisesOverflowError(bin32(intExpr(     0)) <<           -63) or
5168        not raisesOverflowError(bin32(intExpr(     0)) <<            -1) or
5169        not raisesOverflowError(bin32(intExpr(     0)) <<            64) or
5170        not raisesOverflowError(bin32(intExpr(     0)) <<           999) or
5171        not raisesOverflowError(bin32(intExpr(     0)) <<  integer.last) or
5172        not raisesOverflowError(bin32(intExpr( 16111)) << integer.first) or
5173        not raisesOverflowError(bin32(intExpr( 16111)) <<          -999) or
5174        not raisesOverflowError(bin32(intExpr( 16111)) <<           -63) or
5175        not raisesOverflowError(bin32(intExpr( 16111)) <<            -1) or
5176        not raisesOverflowError(bin32(intExpr( 16111)) <<            64) or
5177        not raisesOverflowError(bin32(intExpr( 16111)) <<           999) or
5178        not raisesOverflowError(bin32(intExpr( 16111)) <<  integer.last) or
5179        not raisesOverflowError(bin32(-16111) << intExpr(integer.first)) or
5180        not raisesOverflowError(bin32(-16111) << intExpr(         -999)) or
5181        not raisesOverflowError(bin32(-16111) << intExpr(          -63)) or
5182        not raisesOverflowError(bin32(-16111) << intExpr(           -1)) or
5183        not raisesOverflowError(bin32(-16111) << intExpr(           64)) or
5184        not raisesOverflowError(bin32(-16111) << intExpr(          999)) or
5185        not raisesOverflowError(bin32(-16111) << intExpr( integer.last)) or
5186        not raisesOverflowError(bin32(    -1) << intExpr(integer.first)) or
5187        not raisesOverflowError(bin32(    -1) << intExpr(         -999)) or
5188        not raisesOverflowError(bin32(    -1) << intExpr(          -63)) or
5189        not raisesOverflowError(bin32(    -1) << intExpr(           -1)) or
5190        not raisesOverflowError(bin32(    -1) << intExpr(           64)) or
5191        not raisesOverflowError(bin32(    -1) << intExpr(          999)) or
5192        not raisesOverflowError(bin32(    -1) << intExpr( integer.last)) or
5193        not raisesOverflowError(bin32(     0) << intExpr(integer.first)) or
5194        not raisesOverflowError(bin32(     0) << intExpr(         -999)) or
5195        not raisesOverflowError(bin32(     0) << intExpr(          -63)) or
5196        not raisesOverflowError(bin32(     0) << intExpr(           -1)) or
5197        not raisesOverflowError(bin32(     0) << intExpr(           64)) or
5198        not raisesOverflowError(bin32(     0) << intExpr(          999)) or
5199        not raisesOverflowError(bin32(     0) << intExpr( integer.last)) or
5200        not raisesOverflowError(bin32( 16111) << intExpr(integer.first)) or
5201        not raisesOverflowError(bin32( 16111) << intExpr(         -999)) or
5202        not raisesOverflowError(bin32( 16111) << intExpr(          -63)) or
5203        not raisesOverflowError(bin32( 16111) << intExpr(           -1)) or
5204        not raisesOverflowError(bin32( 16111) << intExpr(           64)) or
5205        not raisesOverflowError(bin32( 16111) << intExpr(          999)) or
5206        not raisesOverflowError(bin32( 16111) << intExpr( integer.last)) or
5207        not raisesOverflowError(bin32(intExpr(-16111)) << intExpr(integer.first)) or
5208        not raisesOverflowError(bin32(intExpr(-16111)) << intExpr(         -999)) or
5209        not raisesOverflowError(bin32(intExpr(-16111)) << intExpr(          -63)) or
5210        not raisesOverflowError(bin32(intExpr(-16111)) << intExpr(           -1)) or
5211        not raisesOverflowError(bin32(intExpr(-16111)) << intExpr(           64)) or
5212        not raisesOverflowError(bin32(intExpr(-16111)) << intExpr(          999)) or
5213        not raisesOverflowError(bin32(intExpr(-16111)) << intExpr( integer.last)) or
5214        not raisesOverflowError(bin32(intExpr(    -1)) << intExpr(integer.first)) or
5215        not raisesOverflowError(bin32(intExpr(    -1)) << intExpr(         -999)) or
5216        not raisesOverflowError(bin32(intExpr(    -1)) << intExpr(          -63)) or
5217        not raisesOverflowError(bin32(intExpr(    -1)) << intExpr(           -1)) or
5218        not raisesOverflowError(bin32(intExpr(    -1)) << intExpr(           64)) or
5219        not raisesOverflowError(bin32(intExpr(    -1)) << intExpr(          999)) or
5220        not raisesOverflowError(bin32(intExpr(    -1)) << intExpr( integer.last)) or
5221        not raisesOverflowError(bin32(intExpr(     0)) << intExpr(integer.first)) or
5222        not raisesOverflowError(bin32(intExpr(     0)) << intExpr(         -999)) or
5223        not raisesOverflowError(bin32(intExpr(     0)) << intExpr(          -63)) or
5224        not raisesOverflowError(bin32(intExpr(     0)) << intExpr(           -1)) or
5225        not raisesOverflowError(bin32(intExpr(     0)) << intExpr(           64)) or
5226        not raisesOverflowError(bin32(intExpr(     0)) << intExpr(          999)) or
5227        not raisesOverflowError(bin32(intExpr(     0)) << intExpr( integer.last)) or
5228        not raisesOverflowError(bin32(intExpr( 16111)) << intExpr(integer.first)) or
5229        not raisesOverflowError(bin32(intExpr( 16111)) << intExpr(         -999)) or
5230        not raisesOverflowError(bin32(intExpr( 16111)) << intExpr(          -63)) or
5231        not raisesOverflowError(bin32(intExpr( 16111)) << intExpr(           -1)) or
5232        not raisesOverflowError(bin32(intExpr( 16111)) << intExpr(           64)) or
5233        not raisesOverflowError(bin32(intExpr( 16111)) << intExpr(          999)) or
5234        not raisesOverflowError(bin32(intExpr( 16111)) << intExpr( integer.last)) then
5235      writeln(" ***** Unsigned left shift with illegal shift count does not raise OVERFLOW_ERROR.");
5236      okay := FALSE;
5237    end if;
5238
5239    if okay then
5240      writeln("Overflow checking of unsigned left shift works correct.");
5241    else
5242      writeln(" ***** Overflow checking of unsigned left shift does not work correct.");
5243    end if;
5244  end func;
5245
5246
5247const proc: check_ulShift_assign is func
5248  local
5249    var boolean: okay is TRUE;
5250    var boolean: ok is TRUE;
5251    var bin32: num is bin32(0);
5252    var array bin32: arr is 1 times bin32(0);
5253  begin
5254    num := bin32(-16111); ok := ok and raisesOverflowError(num <<:= -999);
5255    num := bin32(-16111); ok := ok and raisesOverflowError(num <<:=  -63);
5256    num := bin32(-16111); ok := ok and raisesOverflowError(num <<:=   -1);
5257    num := bin32(-16111); ok := ok and raisesOverflowError(num <<:=   64);
5258    num := bin32(-16111); ok := ok and raisesOverflowError(num <<:=  999);
5259    num := bin32(    -1); ok := ok and raisesOverflowError(num <<:= -999);
5260    num := bin32(    -1); ok := ok and raisesOverflowError(num <<:=  -63);
5261    num := bin32(    -1); ok := ok and raisesOverflowError(num <<:=   -1);
5262    num := bin32(    -1); ok := ok and raisesOverflowError(num <<:=   64);
5263    num := bin32(    -1); ok := ok and raisesOverflowError(num <<:=  999);
5264    num := bin32(     0); ok := ok and raisesOverflowError(num <<:= -999);
5265    num := bin32(     0); ok := ok and raisesOverflowError(num <<:=  -63);
5266    num := bin32(     0); ok := ok and raisesOverflowError(num <<:=   -1);
5267    num := bin32(     0); ok := ok and raisesOverflowError(num <<:=   64);
5268    num := bin32(     0); ok := ok and raisesOverflowError(num <<:=  999);
5269    num := bin32( 16111); ok := ok and raisesOverflowError(num <<:= -999);
5270    num := bin32( 16111); ok := ok and raisesOverflowError(num <<:=  -63);
5271    num := bin32( 16111); ok := ok and raisesOverflowError(num <<:=   -1);
5272    num := bin32( 16111); ok := ok and raisesOverflowError(num <<:=   64);
5273    num := bin32( 16111); ok := ok and raisesOverflowError(num <<:=  999);
5274    num := bin32(-16111); ok := ok and raisesOverflowError(num <<:= intExpr(-999));
5275    num := bin32(-16111); ok := ok and raisesOverflowError(num <<:= intExpr( -63));
5276    num := bin32(-16111); ok := ok and raisesOverflowError(num <<:= intExpr(  -1));
5277    num := bin32(-16111); ok := ok and raisesOverflowError(num <<:= intExpr(  64));
5278    num := bin32(-16111); ok := ok and raisesOverflowError(num <<:= intExpr( 999));
5279    num := bin32(    -1); ok := ok and raisesOverflowError(num <<:= intExpr(-999));
5280    num := bin32(    -1); ok := ok and raisesOverflowError(num <<:= intExpr( -63));
5281    num := bin32(    -1); ok := ok and raisesOverflowError(num <<:= intExpr(  -1));
5282    num := bin32(    -1); ok := ok and raisesOverflowError(num <<:= intExpr(  64));
5283    num := bin32(    -1); ok := ok and raisesOverflowError(num <<:= intExpr( 999));
5284    num := bin32(     0); ok := ok and raisesOverflowError(num <<:= intExpr(-999));
5285    num := bin32(     0); ok := ok and raisesOverflowError(num <<:= intExpr( -63));
5286    num := bin32(     0); ok := ok and raisesOverflowError(num <<:= intExpr(  -1));
5287    num := bin32(     0); ok := ok and raisesOverflowError(num <<:= intExpr(  64));
5288    num := bin32(     0); ok := ok and raisesOverflowError(num <<:= intExpr( 999));
5289    num := bin32( 16111); ok := ok and raisesOverflowError(num <<:= intExpr(-999));
5290    num := bin32( 16111); ok := ok and raisesOverflowError(num <<:= intExpr( -63));
5291    num := bin32( 16111); ok := ok and raisesOverflowError(num <<:= intExpr(  -1));
5292    num := bin32( 16111); ok := ok and raisesOverflowError(num <<:= intExpr(  64));
5293    num := bin32( 16111); ok := ok and raisesOverflowError(num <<:= intExpr( 999));
5294    arr[1] := bin32(-16111); ok := ok and raisesOverflowError(arr[1] <<:= -999);
5295    arr[1] := bin32(-16111); ok := ok and raisesOverflowError(arr[1] <<:=  -63);
5296    arr[1] := bin32(-16111); ok := ok and raisesOverflowError(arr[1] <<:=   -1);
5297    arr[1] := bin32(-16111); ok := ok and raisesOverflowError(arr[1] <<:=   64);
5298    arr[1] := bin32(-16111); ok := ok and raisesOverflowError(arr[1] <<:=  999);
5299    arr[1] := bin32(    -1); ok := ok and raisesOverflowError(arr[1] <<:= -999);
5300    arr[1] := bin32(    -1); ok := ok and raisesOverflowError(arr[1] <<:=  -63);
5301    arr[1] := bin32(    -1); ok := ok and raisesOverflowError(arr[1] <<:=   -1);
5302    arr[1] := bin32(    -1); ok := ok and raisesOverflowError(arr[1] <<:=   64);
5303    arr[1] := bin32(    -1); ok := ok and raisesOverflowError(arr[1] <<:=  999);
5304    arr[1] := bin32(     0); ok := ok and raisesOverflowError(arr[1] <<:= -999);
5305    arr[1] := bin32(     0); ok := ok and raisesOverflowError(arr[1] <<:=  -63);
5306    arr[1] := bin32(     0); ok := ok and raisesOverflowError(arr[1] <<:=   -1);
5307    arr[1] := bin32(     0); ok := ok and raisesOverflowError(arr[1] <<:=   64);
5308    arr[1] := bin32(     0); ok := ok and raisesOverflowError(arr[1] <<:=  999);
5309    arr[1] := bin32( 16111); ok := ok and raisesOverflowError(arr[1] <<:= -999);
5310    arr[1] := bin32( 16111); ok := ok and raisesOverflowError(arr[1] <<:=  -63);
5311    arr[1] := bin32( 16111); ok := ok and raisesOverflowError(arr[1] <<:=   -1);
5312    arr[1] := bin32( 16111); ok := ok and raisesOverflowError(arr[1] <<:=   64);
5313    arr[1] := bin32( 16111); ok := ok and raisesOverflowError(arr[1] <<:=  999);
5314    arr[1] := bin32(-16111); ok := ok and raisesOverflowError(arr[1] <<:= intExpr(-999));
5315    arr[1] := bin32(-16111); ok := ok and raisesOverflowError(arr[1] <<:= intExpr( -63));
5316    arr[1] := bin32(-16111); ok := ok and raisesOverflowError(arr[1] <<:= intExpr(  -1));
5317    arr[1] := bin32(-16111); ok := ok and raisesOverflowError(arr[1] <<:= intExpr(  64));
5318    arr[1] := bin32(-16111); ok := ok and raisesOverflowError(arr[1] <<:= intExpr( 999));
5319    arr[1] := bin32(    -1); ok := ok and raisesOverflowError(arr[1] <<:= intExpr(-999));
5320    arr[1] := bin32(    -1); ok := ok and raisesOverflowError(arr[1] <<:= intExpr( -63));
5321    arr[1] := bin32(    -1); ok := ok and raisesOverflowError(arr[1] <<:= intExpr(  -1));
5322    arr[1] := bin32(    -1); ok := ok and raisesOverflowError(arr[1] <<:= intExpr(  64));
5323    arr[1] := bin32(    -1); ok := ok and raisesOverflowError(arr[1] <<:= intExpr( 999));
5324    arr[1] := bin32(     0); ok := ok and raisesOverflowError(arr[1] <<:= intExpr(-999));
5325    arr[1] := bin32(     0); ok := ok and raisesOverflowError(arr[1] <<:= intExpr( -63));
5326    arr[1] := bin32(     0); ok := ok and raisesOverflowError(arr[1] <<:= intExpr(  -1));
5327    arr[1] := bin32(     0); ok := ok and raisesOverflowError(arr[1] <<:= intExpr(  64));
5328    arr[1] := bin32(     0); ok := ok and raisesOverflowError(arr[1] <<:= intExpr( 999));
5329    arr[1] := bin32( 16111); ok := ok and raisesOverflowError(arr[1] <<:= intExpr(-999));
5330    arr[1] := bin32( 16111); ok := ok and raisesOverflowError(arr[1] <<:= intExpr( -63));
5331    arr[1] := bin32( 16111); ok := ok and raisesOverflowError(arr[1] <<:= intExpr(  -1));
5332    arr[1] := bin32( 16111); ok := ok and raisesOverflowError(arr[1] <<:= intExpr(  64));
5333    arr[1] := bin32( 16111); ok := ok and raisesOverflowError(arr[1] <<:= intExpr( 999));
5334    if not ok then
5335      writeln(" ***** Unsigned left shift assignment with illegal shift count does not raise OVERFLOW_ERROR.");
5336      okay := FALSE;
5337    end if;
5338
5339    if okay then
5340      writeln("Overflow checking of unsigned left shift assignment works correct.");
5341    else
5342      writeln(" ***** Overflow checking of unsigned left shift assignment does not work correct.");
5343    end if;
5344  end func;
5345
5346
5347const proc: check_urShift is func
5348  local
5349    var boolean: okay is TRUE;
5350  begin
5351    if  not raisesOverflowError(bin32(-16111) >> integer.first) or
5352        not raisesOverflowError(bin32(-16111) >>          -999) or
5353        not raisesOverflowError(bin32(-16111) >>           -63) or
5354        not raisesOverflowError(bin32(-16111) >>            -1) or
5355        not raisesOverflowError(bin32(-16111) >>            64) or
5356        not raisesOverflowError(bin32(-16111) >>           999) or
5357        not raisesOverflowError(bin32(-16111) >>  integer.last) or
5358        not raisesOverflowError(bin32(    -1) >> integer.first) or
5359        not raisesOverflowError(bin32(    -1) >>          -999) or
5360        not raisesOverflowError(bin32(    -1) >>           -63) or
5361        not raisesOverflowError(bin32(    -1) >>            -1) or
5362        not raisesOverflowError(bin32(    -1) >>            64) or
5363        not raisesOverflowError(bin32(    -1) >>           999) or
5364        not raisesOverflowError(bin32(    -1) >>  integer.last) or
5365        not raisesOverflowError(bin32(     0) >> integer.first) or
5366        not raisesOverflowError(bin32(     0) >>          -999) or
5367        not raisesOverflowError(bin32(     0) >>           -63) or
5368        not raisesOverflowError(bin32(     0) >>            -1) or
5369        not raisesOverflowError(bin32(     0) >>            64) or
5370        not raisesOverflowError(bin32(     0) >>           999) or
5371        not raisesOverflowError(bin32(     0) >>  integer.last) or
5372        not raisesOverflowError(bin32( 16111) >> integer.first) or
5373        not raisesOverflowError(bin32( 16111) >>          -999) or
5374        not raisesOverflowError(bin32( 16111) >>           -63) or
5375        not raisesOverflowError(bin32( 16111) >>            -1) or
5376        not raisesOverflowError(bin32( 16111) >>            64) or
5377        not raisesOverflowError(bin32( 16111) >>           999) or
5378        not raisesOverflowError(bin32( 16111) >>  integer.last) or
5379        not raisesOverflowError(bin32(intExpr(-16111)) >> integer.first) or
5380        not raisesOverflowError(bin32(intExpr(-16111)) >>          -999) or
5381        not raisesOverflowError(bin32(intExpr(-16111)) >>           -63) or
5382        not raisesOverflowError(bin32(intExpr(-16111)) >>            -1) or
5383        not raisesOverflowError(bin32(intExpr(-16111)) >>            64) or
5384        not raisesOverflowError(bin32(intExpr(-16111)) >>           999) or
5385        not raisesOverflowError(bin32(intExpr(-16111)) >>  integer.last) or
5386        not raisesOverflowError(bin32(intExpr(    -1)) >> integer.first) or
5387        not raisesOverflowError(bin32(intExpr(    -1)) >>          -999) or
5388        not raisesOverflowError(bin32(intExpr(    -1)) >>           -63) or
5389        not raisesOverflowError(bin32(intExpr(    -1)) >>            -1) or
5390        not raisesOverflowError(bin32(intExpr(    -1)) >>            64) or
5391        not raisesOverflowError(bin32(intExpr(    -1)) >>           999) or
5392        not raisesOverflowError(bin32(intExpr(    -1)) >>  integer.last) or
5393        not raisesOverflowError(bin32(intExpr(     0)) >> integer.first) or
5394        not raisesOverflowError(bin32(intExpr(     0)) >>          -999) or
5395        not raisesOverflowError(bin32(intExpr(     0)) >>           -63) or
5396        not raisesOverflowError(bin32(intExpr(     0)) >>            -1) or
5397        not raisesOverflowError(bin32(intExpr(     0)) >>            64) or
5398        not raisesOverflowError(bin32(intExpr(     0)) >>           999) or
5399        not raisesOverflowError(bin32(intExpr(     0)) >>  integer.last) or
5400        not raisesOverflowError(bin32(intExpr( 16111)) >> integer.first) or
5401        not raisesOverflowError(bin32(intExpr( 16111)) >>          -999) or
5402        not raisesOverflowError(bin32(intExpr( 16111)) >>           -63) or
5403        not raisesOverflowError(bin32(intExpr( 16111)) >>            -1) or
5404        not raisesOverflowError(bin32(intExpr( 16111)) >>            64) or
5405        not raisesOverflowError(bin32(intExpr( 16111)) >>           999) or
5406        not raisesOverflowError(bin32(intExpr( 16111)) >>  integer.last) or
5407        not raisesOverflowError(bin32(-16111) >> intExpr(integer.first)) or
5408        not raisesOverflowError(bin32(-16111) >> intExpr(         -999)) or
5409        not raisesOverflowError(bin32(-16111) >> intExpr(          -63)) or
5410        not raisesOverflowError(bin32(-16111) >> intExpr(           -1)) or
5411        not raisesOverflowError(bin32(-16111) >> intExpr(           64)) or
5412        not raisesOverflowError(bin32(-16111) >> intExpr(          999)) or
5413        not raisesOverflowError(bin32(-16111) >> intExpr( integer.last)) or
5414        not raisesOverflowError(bin32(    -1) >> intExpr(integer.first)) or
5415        not raisesOverflowError(bin32(    -1) >> intExpr(         -999)) or
5416        not raisesOverflowError(bin32(    -1) >> intExpr(          -63)) or
5417        not raisesOverflowError(bin32(    -1) >> intExpr(           -1)) or
5418        not raisesOverflowError(bin32(    -1) >> intExpr(           64)) or
5419        not raisesOverflowError(bin32(    -1) >> intExpr(          999)) or
5420        not raisesOverflowError(bin32(    -1) >> intExpr( integer.last)) or
5421        not raisesOverflowError(bin32(     0) >> intExpr(integer.first)) or
5422        not raisesOverflowError(bin32(     0) >> intExpr(         -999)) or
5423        not raisesOverflowError(bin32(     0) >> intExpr(          -63)) or
5424        not raisesOverflowError(bin32(     0) >> intExpr(           -1)) or
5425        not raisesOverflowError(bin32(     0) >> intExpr(           64)) or
5426        not raisesOverflowError(bin32(     0) >> intExpr(          999)) or
5427        not raisesOverflowError(bin32(     0) >> intExpr( integer.last)) or
5428        not raisesOverflowError(bin32( 16111) >> intExpr(integer.first)) or
5429        not raisesOverflowError(bin32( 16111) >> intExpr(         -999)) or
5430        not raisesOverflowError(bin32( 16111) >> intExpr(          -63)) or
5431        not raisesOverflowError(bin32( 16111) >> intExpr(           -1)) or
5432        not raisesOverflowError(bin32( 16111) >> intExpr(           64)) or
5433        not raisesOverflowError(bin32( 16111) >> intExpr(          999)) or
5434        not raisesOverflowError(bin32( 16111) >> intExpr( integer.last)) or
5435        not raisesOverflowError(bin32(intExpr(-16111)) >> intExpr(integer.first)) or
5436        not raisesOverflowError(bin32(intExpr(-16111)) >> intExpr(         -999)) or
5437        not raisesOverflowError(bin32(intExpr(-16111)) >> intExpr(          -63)) or
5438        not raisesOverflowError(bin32(intExpr(-16111)) >> intExpr(           -1)) or
5439        not raisesOverflowError(bin32(intExpr(-16111)) >> intExpr(           64)) or
5440        not raisesOverflowError(bin32(intExpr(-16111)) >> intExpr(          999)) or
5441        not raisesOverflowError(bin32(intExpr(-16111)) >> intExpr( integer.last)) or
5442        not raisesOverflowError(bin32(intExpr(    -1)) >> intExpr(integer.first)) or
5443        not raisesOverflowError(bin32(intExpr(    -1)) >> intExpr(         -999)) or
5444        not raisesOverflowError(bin32(intExpr(    -1)) >> intExpr(          -63)) or
5445        not raisesOverflowError(bin32(intExpr(    -1)) >> intExpr(           -1)) or
5446        not raisesOverflowError(bin32(intExpr(    -1)) >> intExpr(           64)) or
5447        not raisesOverflowError(bin32(intExpr(    -1)) >> intExpr(          999)) or
5448        not raisesOverflowError(bin32(intExpr(    -1)) >> intExpr( integer.last)) or
5449        not raisesOverflowError(bin32(intExpr(     0)) >> intExpr(integer.first)) or
5450        not raisesOverflowError(bin32(intExpr(     0)) >> intExpr(         -999)) or
5451        not raisesOverflowError(bin32(intExpr(     0)) >> intExpr(          -63)) or
5452        not raisesOverflowError(bin32(intExpr(     0)) >> intExpr(           -1)) or
5453        not raisesOverflowError(bin32(intExpr(     0)) >> intExpr(           64)) or
5454        not raisesOverflowError(bin32(intExpr(     0)) >> intExpr(          999)) or
5455        not raisesOverflowError(bin32(intExpr(     0)) >> intExpr( integer.last)) or
5456        not raisesOverflowError(bin32(intExpr( 16111)) >> intExpr(integer.first)) or
5457        not raisesOverflowError(bin32(intExpr( 16111)) >> intExpr(         -999)) or
5458        not raisesOverflowError(bin32(intExpr( 16111)) >> intExpr(          -63)) or
5459        not raisesOverflowError(bin32(intExpr( 16111)) >> intExpr(           -1)) or
5460        not raisesOverflowError(bin32(intExpr( 16111)) >> intExpr(           64)) or
5461        not raisesOverflowError(bin32(intExpr( 16111)) >> intExpr(          999)) or
5462        not raisesOverflowError(bin32(intExpr( 16111)) >> intExpr( integer.last)) then
5463      writeln(" ***** Unsigned right shift with illegal shift count does not raise OVERFLOW_ERROR.");
5464      okay := FALSE;
5465    end if;
5466
5467    if okay then
5468      writeln("Overflow checking of unsigned right shift works correct.");
5469    else
5470      writeln(" ***** Overflow checking of unsigned right shift does not work correct.");
5471    end if;
5472  end func;
5473
5474
5475const proc: check_urShift_assign is func
5476  local
5477    var boolean: okay is TRUE;
5478    var boolean: ok is TRUE;
5479    var bin32: num is bin32(0);
5480    var array bin32: arr is 1 times bin32(0);
5481  begin
5482    num := bin32(-16111); ok := ok and raisesOverflowError(num >>:= -999);
5483    num := bin32(-16111); ok := ok and raisesOverflowError(num >>:=  -63);
5484    num := bin32(-16111); ok := ok and raisesOverflowError(num >>:=   -1);
5485    num := bin32(-16111); ok := ok and raisesOverflowError(num >>:=   64);
5486    num := bin32(-16111); ok := ok and raisesOverflowError(num >>:=  999);
5487    num := bin32(    -1); ok := ok and raisesOverflowError(num >>:= -999);
5488    num := bin32(    -1); ok := ok and raisesOverflowError(num >>:=  -63);
5489    num := bin32(    -1); ok := ok and raisesOverflowError(num >>:=   -1);
5490    num := bin32(    -1); ok := ok and raisesOverflowError(num >>:=   64);
5491    num := bin32(    -1); ok := ok and raisesOverflowError(num >>:=  999);
5492    num := bin32(     0); ok := ok and raisesOverflowError(num >>:= -999);
5493    num := bin32(     0); ok := ok and raisesOverflowError(num >>:=  -63);
5494    num := bin32(     0); ok := ok and raisesOverflowError(num >>:=   -1);
5495    num := bin32(     0); ok := ok and raisesOverflowError(num >>:=   64);
5496    num := bin32(     0); ok := ok and raisesOverflowError(num >>:=  999);
5497    num := bin32( 16111); ok := ok and raisesOverflowError(num >>:= -999);
5498    num := bin32( 16111); ok := ok and raisesOverflowError(num >>:=  -63);
5499    num := bin32( 16111); ok := ok and raisesOverflowError(num >>:=   -1);
5500    num := bin32( 16111); ok := ok and raisesOverflowError(num >>:=   64);
5501    num := bin32( 16111); ok := ok and raisesOverflowError(num >>:=  999);
5502    num := bin32(-16111); ok := ok and raisesOverflowError(num >>:= intExpr(-999));
5503    num := bin32(-16111); ok := ok and raisesOverflowError(num >>:= intExpr( -63));
5504    num := bin32(-16111); ok := ok and raisesOverflowError(num >>:= intExpr(  -1));
5505    num := bin32(-16111); ok := ok and raisesOverflowError(num >>:= intExpr(  64));
5506    num := bin32(-16111); ok := ok and raisesOverflowError(num >>:= intExpr( 999));
5507    num := bin32(    -1); ok := ok and raisesOverflowError(num >>:= intExpr(-999));
5508    num := bin32(    -1); ok := ok and raisesOverflowError(num >>:= intExpr( -63));
5509    num := bin32(    -1); ok := ok and raisesOverflowError(num >>:= intExpr(  -1));
5510    num := bin32(    -1); ok := ok and raisesOverflowError(num >>:= intExpr(  64));
5511    num := bin32(    -1); ok := ok and raisesOverflowError(num >>:= intExpr( 999));
5512    num := bin32(     0); ok := ok and raisesOverflowError(num >>:= intExpr(-999));
5513    num := bin32(     0); ok := ok and raisesOverflowError(num >>:= intExpr( -63));
5514    num := bin32(     0); ok := ok and raisesOverflowError(num >>:= intExpr(  -1));
5515    num := bin32(     0); ok := ok and raisesOverflowError(num >>:= intExpr(  64));
5516    num := bin32(     0); ok := ok and raisesOverflowError(num >>:= intExpr( 999));
5517    num := bin32( 16111); ok := ok and raisesOverflowError(num >>:= intExpr(-999));
5518    num := bin32( 16111); ok := ok and raisesOverflowError(num >>:= intExpr( -63));
5519    num := bin32( 16111); ok := ok and raisesOverflowError(num >>:= intExpr(  -1));
5520    num := bin32( 16111); ok := ok and raisesOverflowError(num >>:= intExpr(  64));
5521    num := bin32( 16111); ok := ok and raisesOverflowError(num >>:= intExpr( 999));
5522    arr[1] := bin32(-16111); ok := ok and raisesOverflowError(arr[1] >>:= -999);
5523    arr[1] := bin32(-16111); ok := ok and raisesOverflowError(arr[1] >>:=  -63);
5524    arr[1] := bin32(-16111); ok := ok and raisesOverflowError(arr[1] >>:=   -1);
5525    arr[1] := bin32(-16111); ok := ok and raisesOverflowError(arr[1] >>:=   64);
5526    arr[1] := bin32(-16111); ok := ok and raisesOverflowError(arr[1] >>:=  999);
5527    arr[1] := bin32(    -1); ok := ok and raisesOverflowError(arr[1] >>:= -999);
5528    arr[1] := bin32(    -1); ok := ok and raisesOverflowError(arr[1] >>:=  -63);
5529    arr[1] := bin32(    -1); ok := ok and raisesOverflowError(arr[1] >>:=   -1);
5530    arr[1] := bin32(    -1); ok := ok and raisesOverflowError(arr[1] >>:=   64);
5531    arr[1] := bin32(    -1); ok := ok and raisesOverflowError(arr[1] >>:=  999);
5532    arr[1] := bin32(     0); ok := ok and raisesOverflowError(arr[1] >>:= -999);
5533    arr[1] := bin32(     0); ok := ok and raisesOverflowError(arr[1] >>:=  -63);
5534    arr[1] := bin32(     0); ok := ok and raisesOverflowError(arr[1] >>:=   -1);
5535    arr[1] := bin32(     0); ok := ok and raisesOverflowError(arr[1] >>:=   64);
5536    arr[1] := bin32(     0); ok := ok and raisesOverflowError(arr[1] >>:=  999);
5537    arr[1] := bin32( 16111); ok := ok and raisesOverflowError(arr[1] >>:= -999);
5538    arr[1] := bin32( 16111); ok := ok and raisesOverflowError(arr[1] >>:=  -63);
5539    arr[1] := bin32( 16111); ok := ok and raisesOverflowError(arr[1] >>:=   -1);
5540    arr[1] := bin32( 16111); ok := ok and raisesOverflowError(arr[1] >>:=   64);
5541    arr[1] := bin32( 16111); ok := ok and raisesOverflowError(arr[1] >>:=  999);
5542    arr[1] := bin32(-16111); ok := ok and raisesOverflowError(arr[1] >>:= intExpr(-999));
5543    arr[1] := bin32(-16111); ok := ok and raisesOverflowError(arr[1] >>:= intExpr( -63));
5544    arr[1] := bin32(-16111); ok := ok and raisesOverflowError(arr[1] >>:= intExpr(  -1));
5545    arr[1] := bin32(-16111); ok := ok and raisesOverflowError(arr[1] >>:= intExpr(  64));
5546    arr[1] := bin32(-16111); ok := ok and raisesOverflowError(arr[1] >>:= intExpr( 999));
5547    arr[1] := bin32(    -1); ok := ok and raisesOverflowError(arr[1] >>:= intExpr(-999));
5548    arr[1] := bin32(    -1); ok := ok and raisesOverflowError(arr[1] >>:= intExpr( -63));
5549    arr[1] := bin32(    -1); ok := ok and raisesOverflowError(arr[1] >>:= intExpr(  -1));
5550    arr[1] := bin32(    -1); ok := ok and raisesOverflowError(arr[1] >>:= intExpr(  64));
5551    arr[1] := bin32(    -1); ok := ok and raisesOverflowError(arr[1] >>:= intExpr( 999));
5552    arr[1] := bin32(     0); ok := ok and raisesOverflowError(arr[1] >>:= intExpr(-999));
5553    arr[1] := bin32(     0); ok := ok and raisesOverflowError(arr[1] >>:= intExpr( -63));
5554    arr[1] := bin32(     0); ok := ok and raisesOverflowError(arr[1] >>:= intExpr(  -1));
5555    arr[1] := bin32(     0); ok := ok and raisesOverflowError(arr[1] >>:= intExpr(  64));
5556    arr[1] := bin32(     0); ok := ok and raisesOverflowError(arr[1] >>:= intExpr( 999));
5557    arr[1] := bin32( 16111); ok := ok and raisesOverflowError(arr[1] >>:= intExpr(-999));
5558    arr[1] := bin32( 16111); ok := ok and raisesOverflowError(arr[1] >>:= intExpr( -63));
5559    arr[1] := bin32( 16111); ok := ok and raisesOverflowError(arr[1] >>:= intExpr(  -1));
5560    arr[1] := bin32( 16111); ok := ok and raisesOverflowError(arr[1] >>:= intExpr(  64));
5561    arr[1] := bin32( 16111); ok := ok and raisesOverflowError(arr[1] >>:= intExpr( 999));
5562    if not ok then
5563      writeln(" ***** Unsigned right shift assignment with illegal shift count does not raise OVERFLOW_ERROR.");
5564      okay := FALSE;
5565    end if;
5566
5567    if okay then
5568      writeln("Overflow checking of unsigned right shift assignment works correct.");
5569    else
5570      writeln(" ***** Overflow checking of unsigned right shift assignment does not work correct.");
5571    end if;
5572  end func;
5573
5574
5575const proc: check_power is func
5576  local
5577    var boolean: okay is TRUE;
5578  begin
5579    if  not raisesOverflowError(            INT64_MIN  **  2) or
5580        not raisesOverflowError((-9223372036854775807) **  2) or
5581        not raisesOverflowError(         (-3037000500) **  2) or
5582        not raisesOverflowError(         (-3037000499) **  3) or
5583        not raisesOverflowError(         (-2147483648) **  3) or
5584        not raisesOverflowError(            (-2097153) **  3) or
5585        not raisesOverflowError(            (-2097152) **  4) or
5586        not raisesOverflowError(            (-2097151) **  4) or
5587        not raisesOverflowError(            (-1234577) **  4) or
5588        not raisesOverflowError(             (-123457) **  4) or
5589        not raisesOverflowError(              (-55109) **  4) or
5590        not raisesOverflowError(              (-55108) **  5) or
5591        not raisesOverflowError(              (-32768) **  5) or
5592        not raisesOverflowError(              (-32767) **  5) or
5593        not raisesOverflowError(               (-6209) **  5) or
5594        not raisesOverflowError(               (-6208) **  6) or
5595        not raisesOverflowError(               (-1449) **  6) or
5596        not raisesOverflowError(               (-1448) **  7) or
5597        not raisesOverflowError(                (-513) **  7) or
5598        not raisesOverflowError(                (-512) **  8) or
5599        not raisesOverflowError(                (-511) **  8) or
5600        not raisesOverflowError(                (-235) **  8) or
5601        not raisesOverflowError(                (-234) **  9) or
5602        not raisesOverflowError(                (-129) **  9) or
5603        not raisesOverflowError(                (-128) ** 10) or
5604        not raisesOverflowError(                (-127) ** 10) or
5605        not raisesOverflowError(                 (-97) ** 10) or
5606        not raisesOverflowError(                 (-10) ** 19) or
5607        not raisesOverflowError(                  (-9) ** 20) or
5608        not raisesOverflowError(                  (-8) ** 22) or
5609        not raisesOverflowError(                  (-7) ** 23) or
5610        not raisesOverflowError(                  (-6) ** 25) or
5611        not raisesOverflowError(                  (-5) ** 28) or
5612        not raisesOverflowError(                  (-4) ** 32) or
5613        not raisesOverflowError(                  (-3) ** 40) or
5614        not raisesOverflowError(                  (-2) ** 64) or
5615        not raisesOverflowError(                    2  ** 63) or
5616        not raisesOverflowError(                    3  ** 40) or
5617        not raisesOverflowError(                    4  ** 32) or
5618        not raisesOverflowError(                    5  ** 28) or
5619        not raisesOverflowError(                    6  ** 25) or
5620        not raisesOverflowError(                    7  ** 23) or
5621        not raisesOverflowError(                    8  ** 21) or
5622        not raisesOverflowError(                    9  ** 20) or
5623        not raisesOverflowError(                   10  ** 19) or
5624        not raisesOverflowError(                   97  ** 10) or
5625        not raisesOverflowError(                  127  ** 10) or
5626        not raisesOverflowError(                  128  **  9) or
5627        not raisesOverflowError(                  129  **  9) or
5628        not raisesOverflowError(                  234  **  9) or
5629        not raisesOverflowError(                  235  **  8) or
5630        not raisesOverflowError(                  511  **  8) or
5631        not raisesOverflowError(                  512  **  7) or
5632        not raisesOverflowError(                  513  **  7) or
5633        not raisesOverflowError(                 1448  **  7) or
5634        not raisesOverflowError(                 1449  **  6) or
5635        not raisesOverflowError(                 6208  **  6) or
5636        not raisesOverflowError(                 6209  **  5) or
5637        not raisesOverflowError(                32767  **  5) or
5638        not raisesOverflowError(                32768  **  5) or
5639        not raisesOverflowError(                55108  **  5) or
5640        not raisesOverflowError(                55109  **  4) or
5641        not raisesOverflowError(               123457  **  4) or
5642        not raisesOverflowError(              1234577  **  4) or
5643        not raisesOverflowError(              2097151  **  4) or
5644        not raisesOverflowError(              2097152  **  3) or
5645        not raisesOverflowError(              2097153  **  3) or
5646        not raisesOverflowError(           2147483648  **  3) or
5647        not raisesOverflowError(           3037000499  **  3) or
5648        not raisesOverflowError(           3037000500  **  2) or
5649        not raisesOverflowError(  9223372036854775807  **  2) then
5650      writeln(" ***** Overflow when computing power does not raise OVERFLOW_ERROR. (1)");
5651      okay := FALSE;
5652    end if;
5653
5654    if  not raisesOverflowError(intExpr(           INT64_MIN) **  2) or
5655        not raisesOverflowError(intExpr(-9223372036854775807) **  2) or
5656        not raisesOverflowError(intExpr(         -3037000500) **  2) or
5657        not raisesOverflowError(intExpr(         -3037000499) **  3) or
5658        not raisesOverflowError(intExpr(         -2147483648) **  3) or
5659        not raisesOverflowError(intExpr(            -2097153) **  3) or
5660        not raisesOverflowError(intExpr(            -2097152) **  4) or
5661        not raisesOverflowError(intExpr(            -2097151) **  4) or
5662        not raisesOverflowError(intExpr(            -1234577) **  4) or
5663        not raisesOverflowError(intExpr(             -123457) **  4) or
5664        not raisesOverflowError(intExpr(              -55109) **  4) or
5665        not raisesOverflowError(intExpr(              -55108) **  5) or
5666        not raisesOverflowError(intExpr(              -32768) **  5) or
5667        not raisesOverflowError(intExpr(              -32767) **  5) or
5668        not raisesOverflowError(intExpr(               -6209) **  5) or
5669        not raisesOverflowError(intExpr(               -6208) **  6) or
5670        not raisesOverflowError(intExpr(               -1449) **  6) or
5671        not raisesOverflowError(intExpr(               -1448) **  7) or
5672        not raisesOverflowError(intExpr(                -513) **  7) or
5673        not raisesOverflowError(intExpr(                -512) **  8) or
5674        not raisesOverflowError(intExpr(                -511) **  8) or
5675        not raisesOverflowError(intExpr(                -235) **  8) or
5676        not raisesOverflowError(intExpr(                -234) **  9) or
5677        not raisesOverflowError(intExpr(                -129) **  9) or
5678        not raisesOverflowError(intExpr(                -128) ** 10) or
5679        not raisesOverflowError(intExpr(                -127) ** 10) or
5680        not raisesOverflowError(intExpr(                 -97) ** 10) or
5681        not raisesOverflowError(intExpr(                 -10) ** 19) or
5682        not raisesOverflowError(intExpr(                  -9) ** 20) or
5683        not raisesOverflowError(intExpr(                  -8) ** 22) or
5684        not raisesOverflowError(intExpr(                  -7) ** 23) or
5685        not raisesOverflowError(intExpr(                  -6) ** 25) or
5686        not raisesOverflowError(intExpr(                  -5) ** 28) or
5687        not raisesOverflowError(intExpr(                  -4) ** 32) or
5688        not raisesOverflowError(intExpr(                  -3) ** 40) or
5689        not raisesOverflowError(intExpr(                  -2) ** 64) or
5690        not raisesOverflowError(intExpr(                   2) ** 63) or
5691        not raisesOverflowError(intExpr(                   3) ** 40) or
5692        not raisesOverflowError(intExpr(                   4) ** 32) or
5693        not raisesOverflowError(intExpr(                   5) ** 28) or
5694        not raisesOverflowError(intExpr(                   6) ** 25) or
5695        not raisesOverflowError(intExpr(                   7) ** 23) or
5696        not raisesOverflowError(intExpr(                   8) ** 21) or
5697        not raisesOverflowError(intExpr(                   9) ** 20) or
5698        not raisesOverflowError(intExpr(                  10) ** 19) or
5699        not raisesOverflowError(intExpr(                  97) ** 10) or
5700        not raisesOverflowError(intExpr(                 127) ** 10) or
5701        not raisesOverflowError(intExpr(                 128) **  9) or
5702        not raisesOverflowError(intExpr(                 129) **  9) or
5703        not raisesOverflowError(intExpr(                 234) **  9) or
5704        not raisesOverflowError(intExpr(                 235) **  8) or
5705        not raisesOverflowError(intExpr(                 511) **  8) or
5706        not raisesOverflowError(intExpr(                 512) **  7) or
5707        not raisesOverflowError(intExpr(                 513) **  7) or
5708        not raisesOverflowError(intExpr(                1448) **  7) or
5709        not raisesOverflowError(intExpr(                1449) **  6) or
5710        not raisesOverflowError(intExpr(                6208) **  6) or
5711        not raisesOverflowError(intExpr(                6209) **  5) or
5712        not raisesOverflowError(intExpr(               32767) **  5) or
5713        not raisesOverflowError(intExpr(               32768) **  5) or
5714        not raisesOverflowError(intExpr(               55108) **  5) or
5715        not raisesOverflowError(intExpr(               55109) **  4) or
5716        not raisesOverflowError(intExpr(              123457) **  4) or
5717        not raisesOverflowError(intExpr(             1234577) **  4) or
5718        not raisesOverflowError(intExpr(             2097151) **  4) or
5719        not raisesOverflowError(intExpr(             2097152) **  3) or
5720        not raisesOverflowError(intExpr(             2097153) **  3) or
5721        not raisesOverflowError(intExpr(          2147483648) **  3) or
5722        not raisesOverflowError(intExpr(          3037000499) **  3) or
5723        not raisesOverflowError(intExpr(          3037000500) **  2) or
5724        not raisesOverflowError(intExpr( 9223372036854775807) **  2) then
5725      writeln(" ***** Overflow when computing power does not raise OVERFLOW_ERROR. (2)");
5726      okay := FALSE;
5727    end if;
5728
5729    if  not raisesOverflowError(            INT64_MIN  ** intExpr( 2)) or
5730        not raisesOverflowError((-9223372036854775807) ** intExpr( 2)) or
5731        not raisesOverflowError(         (-3037000500) ** intExpr( 2)) or
5732        not raisesOverflowError(         (-3037000499) ** intExpr( 3)) or
5733        not raisesOverflowError(         (-2147483648) ** intExpr( 3)) or
5734        not raisesOverflowError(            (-2097153) ** intExpr( 3)) or
5735        not raisesOverflowError(            (-2097152) ** intExpr( 4)) or
5736        not raisesOverflowError(            (-2097151) ** intExpr( 4)) or
5737        not raisesOverflowError(            (-1234577) ** intExpr( 4)) or
5738        not raisesOverflowError(             (-123457) ** intExpr( 4)) or
5739        not raisesOverflowError(              (-55109) ** intExpr( 4)) or
5740        not raisesOverflowError(              (-55108) ** intExpr( 5)) or
5741        not raisesOverflowError(              (-32768) ** intExpr( 5)) or
5742        not raisesOverflowError(              (-32767) ** intExpr( 5)) or
5743        not raisesOverflowError(               (-6209) ** intExpr( 5)) or
5744        not raisesOverflowError(               (-6208) ** intExpr( 6)) or
5745        not raisesOverflowError(               (-1449) ** intExpr( 6)) or
5746        not raisesOverflowError(               (-1448) ** intExpr( 7)) or
5747        not raisesOverflowError(                (-513) ** intExpr( 7)) or
5748        not raisesOverflowError(                (-512) ** intExpr( 8)) or
5749        not raisesOverflowError(                (-511) ** intExpr( 8)) or
5750        not raisesOverflowError(                (-235) ** intExpr( 8)) or
5751        not raisesOverflowError(                (-234) ** intExpr( 9)) or
5752        not raisesOverflowError(                (-129) ** intExpr( 9)) or
5753        not raisesOverflowError(                (-128) ** intExpr(10)) or
5754        not raisesOverflowError(                (-127) ** intExpr(10)) or
5755        not raisesOverflowError(                 (-97) ** intExpr(10)) or
5756        not raisesOverflowError(                 (-10) ** intExpr(19)) or
5757        not raisesOverflowError(                  (-9) ** intExpr(20)) or
5758        not raisesOverflowError(                  (-8) ** intExpr(22)) or
5759        not raisesOverflowError(                  (-7) ** intExpr(23)) or
5760        not raisesOverflowError(                  (-6) ** intExpr(25)) or
5761        not raisesOverflowError(                  (-5) ** intExpr(28)) or
5762        not raisesOverflowError(                  (-4) ** intExpr(32)) or
5763        not raisesOverflowError(                  (-3) ** intExpr(40)) or
5764        not raisesOverflowError(                  (-2) ** intExpr(64)) or
5765        not raisesOverflowError(                    2  ** intExpr(63)) or
5766        not raisesOverflowError(                    3  ** intExpr(40)) or
5767        not raisesOverflowError(                    4  ** intExpr(32)) or
5768        not raisesOverflowError(                    5  ** intExpr(28)) or
5769        not raisesOverflowError(                    6  ** intExpr(25)) or
5770        not raisesOverflowError(                    7  ** intExpr(23)) or
5771        not raisesOverflowError(                    8  ** intExpr(21)) or
5772        not raisesOverflowError(                    9  ** intExpr(20)) or
5773        not raisesOverflowError(                   10  ** intExpr(19)) or
5774        not raisesOverflowError(                   97  ** intExpr(10)) or
5775        not raisesOverflowError(                  127  ** intExpr(10)) or
5776        not raisesOverflowError(                  128  ** intExpr( 9)) or
5777        not raisesOverflowError(                  129  ** intExpr( 9)) or
5778        not raisesOverflowError(                  234  ** intExpr( 9)) or
5779        not raisesOverflowError(                  235  ** intExpr( 8)) or
5780        not raisesOverflowError(                  511  ** intExpr( 8)) or
5781        not raisesOverflowError(                  512  ** intExpr( 7)) or
5782        not raisesOverflowError(                  513  ** intExpr( 7)) or
5783        not raisesOverflowError(                 1448  ** intExpr( 7)) or
5784        not raisesOverflowError(                 1449  ** intExpr( 6)) or
5785        not raisesOverflowError(                 6208  ** intExpr( 6)) or
5786        not raisesOverflowError(                 6209  ** intExpr( 5)) or
5787        not raisesOverflowError(                32767  ** intExpr( 5)) or
5788        not raisesOverflowError(                32768  ** intExpr( 5)) or
5789        not raisesOverflowError(                55108  ** intExpr( 5)) or
5790        not raisesOverflowError(                55109  ** intExpr( 4)) or
5791        not raisesOverflowError(               123457  ** intExpr( 4)) or
5792        not raisesOverflowError(              1234577  ** intExpr( 4)) or
5793        not raisesOverflowError(              2097151  ** intExpr( 4)) or
5794        not raisesOverflowError(              2097152  ** intExpr( 3)) or
5795        not raisesOverflowError(              2097153  ** intExpr( 3)) or
5796        not raisesOverflowError(           2147483648  ** intExpr( 3)) or
5797        not raisesOverflowError(           3037000499  ** intExpr( 3)) or
5798        not raisesOverflowError(           3037000500  ** intExpr( 2)) or
5799        not raisesOverflowError(  9223372036854775807  ** intExpr( 2)) then
5800      writeln(" ***** Overflow when computing power does not raise OVERFLOW_ERROR. (3)");
5801      okay := FALSE;
5802    end if;
5803
5804    if  not raisesOverflowError(intExpr(           INT64_MIN) ** intExpr( 2)) or
5805        not raisesOverflowError(intExpr(-9223372036854775807) ** intExpr( 2)) or
5806        not raisesOverflowError(intExpr(         -3037000500) ** intExpr( 2)) or
5807        not raisesOverflowError(intExpr(         -3037000499) ** intExpr( 3)) or
5808        not raisesOverflowError(intExpr(         -2147483648) ** intExpr( 3)) or
5809        not raisesOverflowError(intExpr(            -2097153) ** intExpr( 3)) or
5810        not raisesOverflowError(intExpr(            -2097152) ** intExpr( 4)) or
5811        not raisesOverflowError(intExpr(            -2097151) ** intExpr( 4)) or
5812        not raisesOverflowError(intExpr(            -1234577) ** intExpr( 4)) or
5813        not raisesOverflowError(intExpr(             -123457) ** intExpr( 4)) or
5814        not raisesOverflowError(intExpr(              -55109) ** intExpr( 4)) or
5815        not raisesOverflowError(intExpr(              -55108) ** intExpr( 5)) or
5816        not raisesOverflowError(intExpr(              -32768) ** intExpr( 5)) or
5817        not raisesOverflowError(intExpr(              -32767) ** intExpr( 5)) or
5818        not raisesOverflowError(intExpr(               -6209) ** intExpr( 5)) or
5819        not raisesOverflowError(intExpr(               -6208) ** intExpr( 6)) or
5820        not raisesOverflowError(intExpr(               -1449) ** intExpr( 6)) or
5821        not raisesOverflowError(intExpr(               -1448) ** intExpr( 7)) or
5822        not raisesOverflowError(intExpr(                -513) ** intExpr( 7)) or
5823        not raisesOverflowError(intExpr(                -512) ** intExpr( 8)) or
5824        not raisesOverflowError(intExpr(                -511) ** intExpr( 8)) or
5825        not raisesOverflowError(intExpr(                -235) ** intExpr( 8)) or
5826        not raisesOverflowError(intExpr(                -234) ** intExpr( 9)) or
5827        not raisesOverflowError(intExpr(                -129) ** intExpr( 9)) or
5828        not raisesOverflowError(intExpr(                -128) ** intExpr(10)) or
5829        not raisesOverflowError(intExpr(                -127) ** intExpr(10)) or
5830        not raisesOverflowError(intExpr(                 -97) ** intExpr(10)) or
5831        not raisesOverflowError(intExpr(                 -10) ** intExpr(19)) or
5832        not raisesOverflowError(intExpr(                  -9) ** intExpr(20)) or
5833        not raisesOverflowError(intExpr(                  -8) ** intExpr(22)) or
5834        not raisesOverflowError(intExpr(                  -7) ** intExpr(23)) or
5835        not raisesOverflowError(intExpr(                  -6) ** intExpr(25)) or
5836        not raisesOverflowError(intExpr(                  -5) ** intExpr(28)) or
5837        not raisesOverflowError(intExpr(                  -4) ** intExpr(32)) or
5838        not raisesOverflowError(intExpr(                  -3) ** intExpr(40)) or
5839        not raisesOverflowError(intExpr(                  -2) ** intExpr(64)) or
5840        not raisesOverflowError(intExpr(                   2) ** intExpr(63)) or
5841        not raisesOverflowError(intExpr(                   3) ** intExpr(40)) or
5842        not raisesOverflowError(intExpr(                   4) ** intExpr(32)) or
5843        not raisesOverflowError(intExpr(                   5) ** intExpr(28)) or
5844        not raisesOverflowError(intExpr(                   6) ** intExpr(25)) or
5845        not raisesOverflowError(intExpr(                   7) ** intExpr(23)) or
5846        not raisesOverflowError(intExpr(                   8) ** intExpr(21)) or
5847        not raisesOverflowError(intExpr(                   9) ** intExpr(20)) or
5848        not raisesOverflowError(intExpr(                  10) ** intExpr(19)) or
5849        not raisesOverflowError(intExpr(                  97) ** intExpr(10)) or
5850        not raisesOverflowError(intExpr(                 127) ** intExpr(10)) or
5851        not raisesOverflowError(intExpr(                 128) ** intExpr( 9)) or
5852        not raisesOverflowError(intExpr(                 129) ** intExpr( 9)) or
5853        not raisesOverflowError(intExpr(                 234) ** intExpr( 9)) or
5854        not raisesOverflowError(intExpr(                 235) ** intExpr( 8)) or
5855        not raisesOverflowError(intExpr(                 511) ** intExpr( 8)) or
5856        not raisesOverflowError(intExpr(                 512) ** intExpr( 7)) or
5857        not raisesOverflowError(intExpr(                 513) ** intExpr( 7)) or
5858        not raisesOverflowError(intExpr(                1448) ** intExpr( 7)) or
5859        not raisesOverflowError(intExpr(                1449) ** intExpr( 6)) or
5860        not raisesOverflowError(intExpr(                6208) ** intExpr( 6)) or
5861        not raisesOverflowError(intExpr(                6209) ** intExpr( 5)) or
5862        not raisesOverflowError(intExpr(               32767) ** intExpr( 5)) or
5863        not raisesOverflowError(intExpr(               32768) ** intExpr( 5)) or
5864        not raisesOverflowError(intExpr(               55108) ** intExpr( 5)) or
5865        not raisesOverflowError(intExpr(               55109) ** intExpr( 4)) or
5866        not raisesOverflowError(intExpr(              123457) ** intExpr( 4)) or
5867        not raisesOverflowError(intExpr(             1234577) ** intExpr( 4)) or
5868        not raisesOverflowError(intExpr(             2097151) ** intExpr( 4)) or
5869        not raisesOverflowError(intExpr(             2097152) ** intExpr( 3)) or
5870        not raisesOverflowError(intExpr(             2097153) ** intExpr( 3)) or
5871        not raisesOverflowError(intExpr(          2147483648) ** intExpr( 3)) or
5872        not raisesOverflowError(intExpr(          3037000499) ** intExpr( 3)) or
5873        not raisesOverflowError(intExpr(          3037000500) ** intExpr( 2)) or
5874        not raisesOverflowError(intExpr( 9223372036854775807) ** intExpr( 2)) then
5875      writeln(" ***** Overflow when computing power does not raise OVERFLOW_ERROR. (4)");
5876      okay := FALSE;
5877    end if;
5878
5879    if okay then
5880      writeln("Overflow checking of power works correct.");
5881    else
5882      writeln(" ***** Overflow checking of power does not work correct.");
5883    end if;
5884  end func;
5885
5886
5887const proc: check_binom is func
5888  local
5889    var boolean: okay is TRUE;
5890  begin
5891    if  not raisesOverflowError((-99) !         16) or
5892        not raisesOverflowError((-98) !         16) or
5893        not raisesOverflowError((-97) !         16) or
5894        not raisesOverflowError((-96) !         17) or
5895        not raisesOverflowError((-95) !         17) or
5896        not raisesOverflowError((-94) !         17) or
5897        not raisesOverflowError((-93) !         17) or
5898        not raisesOverflowError((-92) !         17) or
5899        not raisesOverflowError((-91) !         17) or
5900        not raisesOverflowError((-90) !         17) or
5901        not raisesOverflowError((-89) !         17) or
5902        not raisesOverflowError((-88) !         17) or
5903        not raisesOverflowError((-87) !         17) or
5904        not raisesOverflowError((-86) !         17) or
5905        not raisesOverflowError((-85) !         18) or
5906        not raisesOverflowError((-84) !         18) or
5907        not raisesOverflowError((-83) !         18) or
5908        not raisesOverflowError((-82) !         18) or
5909        not raisesOverflowError((-81) !         18) or
5910        not raisesOverflowError((-80) !         18) or
5911        not raisesOverflowError((-79) !         18) or
5912        not raisesOverflowError((-78) !         18) or
5913        not raisesOverflowError((-77) !         19) or
5914        not raisesOverflowError((-76) !         19) or
5915        not raisesOverflowError((-75) !         19) or
5916        not raisesOverflowError((-74) !         19) or
5917        not raisesOverflowError((-73) !         19) or
5918        not raisesOverflowError((-72) !         19) or
5919        not raisesOverflowError((-71) !         19) or
5920        not raisesOverflowError((-70) !         20) or
5921        not raisesOverflowError((-69) !         20) or
5922        not raisesOverflowError((-68) !         20) or
5923        not raisesOverflowError((-67) !         20) or
5924        not raisesOverflowError((-66) !         20) or
5925        not raisesOverflowError((-65) !         20) or
5926        not raisesOverflowError((-64) !         21) or
5927        not raisesOverflowError((-63) !         21) or
5928        not raisesOverflowError((-62) !         21) or
5929        not raisesOverflowError((-61) !         21) or
5930        not raisesOverflowError((-60) !         21) or
5931        not raisesOverflowError((-59) !         22) or
5932        not raisesOverflowError((-58) !         22) or
5933        not raisesOverflowError((-57) !         22) or
5934        not raisesOverflowError((-56) !         22) or
5935        not raisesOverflowError((-55) !         23) or
5936        not raisesOverflowError((-54) !         23) or
5937        not raisesOverflowError((-53) !         23) or
5938        not raisesOverflowError((-52) !         24) or
5939        not raisesOverflowError((-51) !         24) or
5940        not raisesOverflowError((-50) !         24) or
5941        not raisesOverflowError((-49) !         25) or
5942        not raisesOverflowError((-48) !         25) or
5943        not raisesOverflowError((-47) !         25) or
5944        not raisesOverflowError((-46) !         26) or
5945        not raisesOverflowError((-45) !         26) or
5946        not raisesOverflowError((-44) !         27) or
5947        not raisesOverflowError((-43) !         27) or
5948        not raisesOverflowError((-42) !         28) or
5949        not raisesOverflowError((-41) !         28) or
5950        not raisesOverflowError((-40) !         29) or
5951        not raisesOverflowError((-39) !         30) or
5952        not raisesOverflowError((-38) !         30) or
5953        not raisesOverflowError((-37) !         31) or
5954        not raisesOverflowError((-36) !         32) or
5955        not raisesOverflowError((-35) !         33) or
5956        not raisesOverflowError((-34) !         34) or
5957        not raisesOverflowError((-33) !         35) or
5958        not raisesOverflowError((-32) !         36) or
5959        not raisesOverflowError((-31) !         37) or
5960        not raisesOverflowError((-30) !         39) or
5961        not raisesOverflowError((-29) !         40) or
5962        not raisesOverflowError((-28) !         42) or
5963        not raisesOverflowError((-27) !         44) or
5964        not raisesOverflowError((-26) !         46) or
5965        not raisesOverflowError((-25) !         49) or
5966        not raisesOverflowError((-24) !         52) or
5967        not raisesOverflowError((-23) !         55) or
5968        not raisesOverflowError((-22) !         59) or
5969        not raisesOverflowError((-21) !         64) or
5970        not raisesOverflowError((-20) !         70) or
5971        not raisesOverflowError((-19) !         77) or
5972        not raisesOverflowError((-18) !         85) or
5973        not raisesOverflowError((-17) !         96) or
5974        not raisesOverflowError((-16) !        111) or
5975        not raisesOverflowError((-15) !        130) or
5976        not raisesOverflowError((-14) !        157) or
5977        not raisesOverflowError((-13) !        195) or
5978        not raisesOverflowError((-12) !        255) or
5979        not raisesOverflowError((-11) !        352) or
5980        not raisesOverflowError((-10) !        526) or
5981        not raisesOverflowError(( -9) !        880) or
5982        not raisesOverflowError(( -8) !       1727) or
5983        not raisesOverflowError(( -7) !       4332) or
5984        not raisesOverflowError(( -6) !      16171) or
5985        not raisesOverflowError(( -5) !     121974) or
5986        not raisesOverflowError(( -4) !    3810777) or
5987        not raisesOverflowError(( -3) ! 4294967295) then
5988      writeln(" ***** Overflow not raised for binomial coefficient with negative n. (1)");
5989      okay := FALSE;
5990    end if;
5991
5992    if  not raisesOverflowError(intExpr(-99) !         16) or
5993        not raisesOverflowError(intExpr(-98) !         16) or
5994        not raisesOverflowError(intExpr(-97) !         16) or
5995        not raisesOverflowError(intExpr(-96) !         17) or
5996        not raisesOverflowError(intExpr(-95) !         17) or
5997        not raisesOverflowError(intExpr(-94) !         17) or
5998        not raisesOverflowError(intExpr(-93) !         17) or
5999        not raisesOverflowError(intExpr(-92) !         17) or
6000        not raisesOverflowError(intExpr(-91) !         17) or
6001        not raisesOverflowError(intExpr(-90) !         17) or
6002        not raisesOverflowError(intExpr(-89) !         17) or
6003        not raisesOverflowError(intExpr(-88) !         17) or
6004        not raisesOverflowError(intExpr(-87) !         17) or
6005        not raisesOverflowError(intExpr(-86) !         17) or
6006        not raisesOverflowError(intExpr(-85) !         18) or
6007        not raisesOverflowError(intExpr(-84) !         18) or
6008        not raisesOverflowError(intExpr(-83) !         18) or
6009        not raisesOverflowError(intExpr(-82) !         18) or
6010        not raisesOverflowError(intExpr(-81) !         18) or
6011        not raisesOverflowError(intExpr(-80) !         18) or
6012        not raisesOverflowError(intExpr(-79) !         18) or
6013        not raisesOverflowError(intExpr(-78) !         18) or
6014        not raisesOverflowError(intExpr(-77) !         19) or
6015        not raisesOverflowError(intExpr(-76) !         19) or
6016        not raisesOverflowError(intExpr(-75) !         19) or
6017        not raisesOverflowError(intExpr(-74) !         19) or
6018        not raisesOverflowError(intExpr(-73) !         19) or
6019        not raisesOverflowError(intExpr(-72) !         19) or
6020        not raisesOverflowError(intExpr(-71) !         19) or
6021        not raisesOverflowError(intExpr(-70) !         20) or
6022        not raisesOverflowError(intExpr(-69) !         20) or
6023        not raisesOverflowError(intExpr(-68) !         20) or
6024        not raisesOverflowError(intExpr(-67) !         20) or
6025        not raisesOverflowError(intExpr(-66) !         20) or
6026        not raisesOverflowError(intExpr(-65) !         20) or
6027        not raisesOverflowError(intExpr(-64) !         21) or
6028        not raisesOverflowError(intExpr(-63) !         21) or
6029        not raisesOverflowError(intExpr(-62) !         21) or
6030        not raisesOverflowError(intExpr(-61) !         21) or
6031        not raisesOverflowError(intExpr(-60) !         21) or
6032        not raisesOverflowError(intExpr(-59) !         22) or
6033        not raisesOverflowError(intExpr(-58) !         22) or
6034        not raisesOverflowError(intExpr(-57) !         22) or
6035        not raisesOverflowError(intExpr(-56) !         22) or
6036        not raisesOverflowError(intExpr(-55) !         23) or
6037        not raisesOverflowError(intExpr(-54) !         23) or
6038        not raisesOverflowError(intExpr(-53) !         23) or
6039        not raisesOverflowError(intExpr(-52) !         24) or
6040        not raisesOverflowError(intExpr(-51) !         24) or
6041        not raisesOverflowError(intExpr(-50) !         24) or
6042        not raisesOverflowError(intExpr(-49) !         25) or
6043        not raisesOverflowError(intExpr(-48) !         25) or
6044        not raisesOverflowError(intExpr(-47) !         25) or
6045        not raisesOverflowError(intExpr(-46) !         26) or
6046        not raisesOverflowError(intExpr(-45) !         26) or
6047        not raisesOverflowError(intExpr(-44) !         27) or
6048        not raisesOverflowError(intExpr(-43) !         27) or
6049        not raisesOverflowError(intExpr(-42) !         28) or
6050        not raisesOverflowError(intExpr(-41) !         28) or
6051        not raisesOverflowError(intExpr(-40) !         29) or
6052        not raisesOverflowError(intExpr(-39) !         30) or
6053        not raisesOverflowError(intExpr(-38) !         30) or
6054        not raisesOverflowError(intExpr(-37) !         31) or
6055        not raisesOverflowError(intExpr(-36) !         32) or
6056        not raisesOverflowError(intExpr(-35) !         33) or
6057        not raisesOverflowError(intExpr(-34) !         34) or
6058        not raisesOverflowError(intExpr(-33) !         35) or
6059        not raisesOverflowError(intExpr(-32) !         36) or
6060        not raisesOverflowError(intExpr(-31) !         37) or
6061        not raisesOverflowError(intExpr(-30) !         39) or
6062        not raisesOverflowError(intExpr(-29) !         40) or
6063        not raisesOverflowError(intExpr(-28) !         42) or
6064        not raisesOverflowError(intExpr(-27) !         44) or
6065        not raisesOverflowError(intExpr(-26) !         46) or
6066        not raisesOverflowError(intExpr(-25) !         49) or
6067        not raisesOverflowError(intExpr(-24) !         52) or
6068        not raisesOverflowError(intExpr(-23) !         55) or
6069        not raisesOverflowError(intExpr(-22) !         59) or
6070        not raisesOverflowError(intExpr(-21) !         64) or
6071        not raisesOverflowError(intExpr(-20) !         70) or
6072        not raisesOverflowError(intExpr(-19) !         77) or
6073        not raisesOverflowError(intExpr(-18) !         85) or
6074        not raisesOverflowError(intExpr(-17) !         96) or
6075        not raisesOverflowError(intExpr(-16) !        111) or
6076        not raisesOverflowError(intExpr(-15) !        130) or
6077        not raisesOverflowError(intExpr(-14) !        157) or
6078        not raisesOverflowError(intExpr(-13) !        195) or
6079        not raisesOverflowError(intExpr(-12) !        255) or
6080        not raisesOverflowError(intExpr(-11) !        352) or
6081        not raisesOverflowError(intExpr(-10) !        526) or
6082        not raisesOverflowError(intExpr( -9) !        880) or
6083        not raisesOverflowError(intExpr( -8) !       1727) or
6084        not raisesOverflowError(intExpr( -7) !       4332) or
6085        not raisesOverflowError(intExpr( -6) !      16171) or
6086        not raisesOverflowError(intExpr( -5) !     121974) or
6087        not raisesOverflowError(intExpr( -4) !    3810777) or
6088        not raisesOverflowError(intExpr( -3) ! 4294967295) then
6089      writeln(" ***** Overflow not raised for binomial coefficient with negative n. (2)");
6090      okay := FALSE;
6091    end if;
6092
6093    if  not raisesOverflowError((-99) ! intExpr(        16)) or
6094        not raisesOverflowError((-98) ! intExpr(        16)) or
6095        not raisesOverflowError((-97) ! intExpr(        16)) or
6096        not raisesOverflowError((-96) ! intExpr(        17)) or
6097        not raisesOverflowError((-95) ! intExpr(        17)) or
6098        not raisesOverflowError((-94) ! intExpr(        17)) or
6099        not raisesOverflowError((-93) ! intExpr(        17)) or
6100        not raisesOverflowError((-92) ! intExpr(        17)) or
6101        not raisesOverflowError((-91) ! intExpr(        17)) or
6102        not raisesOverflowError((-90) ! intExpr(        17)) or
6103        not raisesOverflowError((-89) ! intExpr(        17)) or
6104        not raisesOverflowError((-88) ! intExpr(        17)) or
6105        not raisesOverflowError((-87) ! intExpr(        17)) or
6106        not raisesOverflowError((-86) ! intExpr(        17)) or
6107        not raisesOverflowError((-85) ! intExpr(        18)) or
6108        not raisesOverflowError((-84) ! intExpr(        18)) or
6109        not raisesOverflowError((-83) ! intExpr(        18)) or
6110        not raisesOverflowError((-82) ! intExpr(        18)) or
6111        not raisesOverflowError((-81) ! intExpr(        18)) or
6112        not raisesOverflowError((-80) ! intExpr(        18)) or
6113        not raisesOverflowError((-79) ! intExpr(        18)) or
6114        not raisesOverflowError((-78) ! intExpr(        18)) or
6115        not raisesOverflowError((-77) ! intExpr(        19)) or
6116        not raisesOverflowError((-76) ! intExpr(        19)) or
6117        not raisesOverflowError((-75) ! intExpr(        19)) or
6118        not raisesOverflowError((-74) ! intExpr(        19)) or
6119        not raisesOverflowError((-73) ! intExpr(        19)) or
6120        not raisesOverflowError((-72) ! intExpr(        19)) or
6121        not raisesOverflowError((-71) ! intExpr(        19)) or
6122        not raisesOverflowError((-70) ! intExpr(        20)) or
6123        not raisesOverflowError((-69) ! intExpr(        20)) or
6124        not raisesOverflowError((-68) ! intExpr(        20)) or
6125        not raisesOverflowError((-67) ! intExpr(        20)) or
6126        not raisesOverflowError((-66) ! intExpr(        20)) or
6127        not raisesOverflowError((-65) ! intExpr(        20)) or
6128        not raisesOverflowError((-64) ! intExpr(        21)) or
6129        not raisesOverflowError((-63) ! intExpr(        21)) or
6130        not raisesOverflowError((-62) ! intExpr(        21)) or
6131        not raisesOverflowError((-61) ! intExpr(        21)) or
6132        not raisesOverflowError((-60) ! intExpr(        21)) or
6133        not raisesOverflowError((-59) ! intExpr(        22)) or
6134        not raisesOverflowError((-58) ! intExpr(        22)) or
6135        not raisesOverflowError((-57) ! intExpr(        22)) or
6136        not raisesOverflowError((-56) ! intExpr(        22)) or
6137        not raisesOverflowError((-55) ! intExpr(        23)) or
6138        not raisesOverflowError((-54) ! intExpr(        23)) or
6139        not raisesOverflowError((-53) ! intExpr(        23)) or
6140        not raisesOverflowError((-52) ! intExpr(        24)) or
6141        not raisesOverflowError((-51) ! intExpr(        24)) or
6142        not raisesOverflowError((-50) ! intExpr(        24)) or
6143        not raisesOverflowError((-49) ! intExpr(        25)) or
6144        not raisesOverflowError((-48) ! intExpr(        25)) or
6145        not raisesOverflowError((-47) ! intExpr(        25)) or
6146        not raisesOverflowError((-46) ! intExpr(        26)) or
6147        not raisesOverflowError((-45) ! intExpr(        26)) or
6148        not raisesOverflowError((-44) ! intExpr(        27)) or
6149        not raisesOverflowError((-43) ! intExpr(        27)) or
6150        not raisesOverflowError((-42) ! intExpr(        28)) or
6151        not raisesOverflowError((-41) ! intExpr(        28)) or
6152        not raisesOverflowError((-40) ! intExpr(        29)) or
6153        not raisesOverflowError((-39) ! intExpr(        30)) or
6154        not raisesOverflowError((-38) ! intExpr(        30)) or
6155        not raisesOverflowError((-37) ! intExpr(        31)) or
6156        not raisesOverflowError((-36) ! intExpr(        32)) or
6157        not raisesOverflowError((-35) ! intExpr(        33)) or
6158        not raisesOverflowError((-34) ! intExpr(        34)) or
6159        not raisesOverflowError((-33) ! intExpr(        35)) or
6160        not raisesOverflowError((-32) ! intExpr(        36)) or
6161        not raisesOverflowError((-31) ! intExpr(        37)) or
6162        not raisesOverflowError((-30) ! intExpr(        39)) or
6163        not raisesOverflowError((-29) ! intExpr(        40)) or
6164        not raisesOverflowError((-28) ! intExpr(        42)) or
6165        not raisesOverflowError((-27) ! intExpr(        44)) or
6166        not raisesOverflowError((-26) ! intExpr(        46)) or
6167        not raisesOverflowError((-25) ! intExpr(        49)) or
6168        not raisesOverflowError((-24) ! intExpr(        52)) or
6169        not raisesOverflowError((-23) ! intExpr(        55)) or
6170        not raisesOverflowError((-22) ! intExpr(        59)) or
6171        not raisesOverflowError((-21) ! intExpr(        64)) or
6172        not raisesOverflowError((-20) ! intExpr(        70)) or
6173        not raisesOverflowError((-19) ! intExpr(        77)) or
6174        not raisesOverflowError((-18) ! intExpr(        85)) or
6175        not raisesOverflowError((-17) ! intExpr(        96)) or
6176        not raisesOverflowError((-16) ! intExpr(       111)) or
6177        not raisesOverflowError((-15) ! intExpr(       130)) or
6178        not raisesOverflowError((-14) ! intExpr(       157)) or
6179        not raisesOverflowError((-13) ! intExpr(       195)) or
6180        not raisesOverflowError((-12) ! intExpr(       255)) or
6181        not raisesOverflowError((-11) ! intExpr(       352)) or
6182        not raisesOverflowError((-10) ! intExpr(       526)) or
6183        not raisesOverflowError(( -9) ! intExpr(       880)) or
6184        not raisesOverflowError(( -8) ! intExpr(      1727)) or
6185        not raisesOverflowError(( -7) ! intExpr(      4332)) or
6186        not raisesOverflowError(( -6) ! intExpr(     16171)) or
6187        not raisesOverflowError(( -5) ! intExpr(    121974)) or
6188        not raisesOverflowError(( -4) ! intExpr(   3810777)) or
6189        not raisesOverflowError(( -3) ! intExpr(4294967295)) then
6190      writeln(" ***** Overflow not raised for binomial coefficient with negative n. (3)");
6191      okay := FALSE;
6192    end if;
6193
6194    if  not raisesOverflowError(intExpr(-99) ! intExpr(        16)) or
6195        not raisesOverflowError(intExpr(-98) ! intExpr(        16)) or
6196        not raisesOverflowError(intExpr(-97) ! intExpr(        16)) or
6197        not raisesOverflowError(intExpr(-96) ! intExpr(        17)) or
6198        not raisesOverflowError(intExpr(-95) ! intExpr(        17)) or
6199        not raisesOverflowError(intExpr(-94) ! intExpr(        17)) or
6200        not raisesOverflowError(intExpr(-93) ! intExpr(        17)) or
6201        not raisesOverflowError(intExpr(-92) ! intExpr(        17)) or
6202        not raisesOverflowError(intExpr(-91) ! intExpr(        17)) or
6203        not raisesOverflowError(intExpr(-90) ! intExpr(        17)) or
6204        not raisesOverflowError(intExpr(-89) ! intExpr(        17)) or
6205        not raisesOverflowError(intExpr(-88) ! intExpr(        17)) or
6206        not raisesOverflowError(intExpr(-87) ! intExpr(        17)) or
6207        not raisesOverflowError(intExpr(-86) ! intExpr(        17)) or
6208        not raisesOverflowError(intExpr(-85) ! intExpr(        18)) or
6209        not raisesOverflowError(intExpr(-84) ! intExpr(        18)) or
6210        not raisesOverflowError(intExpr(-83) ! intExpr(        18)) or
6211        not raisesOverflowError(intExpr(-82) ! intExpr(        18)) or
6212        not raisesOverflowError(intExpr(-81) ! intExpr(        18)) or
6213        not raisesOverflowError(intExpr(-80) ! intExpr(        18)) or
6214        not raisesOverflowError(intExpr(-79) ! intExpr(        18)) or
6215        not raisesOverflowError(intExpr(-78) ! intExpr(        18)) or
6216        not raisesOverflowError(intExpr(-77) ! intExpr(        19)) or
6217        not raisesOverflowError(intExpr(-76) ! intExpr(        19)) or
6218        not raisesOverflowError(intExpr(-75) ! intExpr(        19)) or
6219        not raisesOverflowError(intExpr(-74) ! intExpr(        19)) or
6220        not raisesOverflowError(intExpr(-73) ! intExpr(        19)) or
6221        not raisesOverflowError(intExpr(-72) ! intExpr(        19)) or
6222        not raisesOverflowError(intExpr(-71) ! intExpr(        19)) or
6223        not raisesOverflowError(intExpr(-70) ! intExpr(        20)) or
6224        not raisesOverflowError(intExpr(-69) ! intExpr(        20)) or
6225        not raisesOverflowError(intExpr(-68) ! intExpr(        20)) or
6226        not raisesOverflowError(intExpr(-67) ! intExpr(        20)) or
6227        not raisesOverflowError(intExpr(-66) ! intExpr(        20)) or
6228        not raisesOverflowError(intExpr(-65) ! intExpr(        20)) or
6229        not raisesOverflowError(intExpr(-64) ! intExpr(        21)) or
6230        not raisesOverflowError(intExpr(-63) ! intExpr(        21)) or
6231        not raisesOverflowError(intExpr(-62) ! intExpr(        21)) or
6232        not raisesOverflowError(intExpr(-61) ! intExpr(        21)) or
6233        not raisesOverflowError(intExpr(-60) ! intExpr(        21)) or
6234        not raisesOverflowError(intExpr(-59) ! intExpr(        22)) or
6235        not raisesOverflowError(intExpr(-58) ! intExpr(        22)) or
6236        not raisesOverflowError(intExpr(-57) ! intExpr(        22)) or
6237        not raisesOverflowError(intExpr(-56) ! intExpr(        22)) or
6238        not raisesOverflowError(intExpr(-55) ! intExpr(        23)) or
6239        not raisesOverflowError(intExpr(-54) ! intExpr(        23)) or
6240        not raisesOverflowError(intExpr(-53) ! intExpr(        23)) or
6241        not raisesOverflowError(intExpr(-52) ! intExpr(        24)) or
6242        not raisesOverflowError(intExpr(-51) ! intExpr(        24)) or
6243        not raisesOverflowError(intExpr(-50) ! intExpr(        24)) or
6244        not raisesOverflowError(intExpr(-49) ! intExpr(        25)) or
6245        not raisesOverflowError(intExpr(-48) ! intExpr(        25)) or
6246        not raisesOverflowError(intExpr(-47) ! intExpr(        25)) or
6247        not raisesOverflowError(intExpr(-46) ! intExpr(        26)) or
6248        not raisesOverflowError(intExpr(-45) ! intExpr(        26)) or
6249        not raisesOverflowError(intExpr(-44) ! intExpr(        27)) or
6250        not raisesOverflowError(intExpr(-43) ! intExpr(        27)) or
6251        not raisesOverflowError(intExpr(-42) ! intExpr(        28)) or
6252        not raisesOverflowError(intExpr(-41) ! intExpr(        28)) or
6253        not raisesOverflowError(intExpr(-40) ! intExpr(        29)) or
6254        not raisesOverflowError(intExpr(-39) ! intExpr(        30)) or
6255        not raisesOverflowError(intExpr(-38) ! intExpr(        30)) or
6256        not raisesOverflowError(intExpr(-37) ! intExpr(        31)) or
6257        not raisesOverflowError(intExpr(-36) ! intExpr(        32)) or
6258        not raisesOverflowError(intExpr(-35) ! intExpr(        33)) or
6259        not raisesOverflowError(intExpr(-34) ! intExpr(        34)) or
6260        not raisesOverflowError(intExpr(-33) ! intExpr(        35)) or
6261        not raisesOverflowError(intExpr(-32) ! intExpr(        36)) or
6262        not raisesOverflowError(intExpr(-31) ! intExpr(        37)) or
6263        not raisesOverflowError(intExpr(-30) ! intExpr(        39)) or
6264        not raisesOverflowError(intExpr(-29) ! intExpr(        40)) or
6265        not raisesOverflowError(intExpr(-28) ! intExpr(        42)) or
6266        not raisesOverflowError(intExpr(-27) ! intExpr(        44)) or
6267        not raisesOverflowError(intExpr(-26) ! intExpr(        46)) or
6268        not raisesOverflowError(intExpr(-25) ! intExpr(        49)) or
6269        not raisesOverflowError(intExpr(-24) ! intExpr(        52)) or
6270        not raisesOverflowError(intExpr(-23) ! intExpr(        55)) or
6271        not raisesOverflowError(intExpr(-22) ! intExpr(        59)) or
6272        not raisesOverflowError(intExpr(-21) ! intExpr(        64)) or
6273        not raisesOverflowError(intExpr(-20) ! intExpr(        70)) or
6274        not raisesOverflowError(intExpr(-19) ! intExpr(        77)) or
6275        not raisesOverflowError(intExpr(-18) ! intExpr(        85)) or
6276        not raisesOverflowError(intExpr(-17) ! intExpr(        96)) or
6277        not raisesOverflowError(intExpr(-16) ! intExpr(       111)) or
6278        not raisesOverflowError(intExpr(-15) ! intExpr(       130)) or
6279        not raisesOverflowError(intExpr(-14) ! intExpr(       157)) or
6280        not raisesOverflowError(intExpr(-13) ! intExpr(       195)) or
6281        not raisesOverflowError(intExpr(-12) ! intExpr(       255)) or
6282        not raisesOverflowError(intExpr(-11) ! intExpr(       352)) or
6283        not raisesOverflowError(intExpr(-10) ! intExpr(       526)) or
6284        not raisesOverflowError(intExpr( -9) ! intExpr(       880)) or
6285        not raisesOverflowError(intExpr( -8) ! intExpr(      1727)) or
6286        not raisesOverflowError(intExpr( -7) ! intExpr(      4332)) or
6287        not raisesOverflowError(intExpr( -6) ! intExpr(     16171)) or
6288        not raisesOverflowError(intExpr( -5) ! intExpr(    121974)) or
6289        not raisesOverflowError(intExpr( -4) ! intExpr(   3810777)) or
6290        not raisesOverflowError(intExpr( -3) ! intExpr(4294967295)) then
6291      writeln(" ***** Overflow not raised for binomial coefficient with negative n. (4)");
6292      okay := FALSE;
6293    end if;
6294
6295    if  not raisesOverflowError(4294967297 !  2) or
6296        not raisesOverflowError(   3810780 !  3) or
6297        not raisesOverflowError(    121978 !  4) or
6298        not raisesOverflowError(     16176 !  5) or
6299        not raisesOverflowError(      4338 !  6) or
6300        not raisesOverflowError(      1734 !  7) or
6301        not raisesOverflowError(       888 !  8) or
6302        not raisesOverflowError(       535 !  9) or
6303        not raisesOverflowError(       362 ! 10) or
6304        not raisesOverflowError(       266 ! 11) or
6305        not raisesOverflowError(       207 ! 12) or
6306        not raisesOverflowError(       170 ! 13) or
6307        not raisesOverflowError(       144 ! 14) or
6308        not raisesOverflowError(       126 ! 15) or
6309        not raisesOverflowError(       112 ! 16) or
6310        not raisesOverflowError(       102 ! 17) or
6311        not raisesOverflowError(        95 ! 18) or
6312        not raisesOverflowError(        89 ! 19) or
6313        not raisesOverflowError(        84 ! 20) or
6314        not raisesOverflowError(        80 ! 21) or
6315        not raisesOverflowError(        77 ! 22) or
6316        not raisesOverflowError(        75 ! 23) or
6317        not raisesOverflowError(        73 ! 24) or
6318        not raisesOverflowError(        71 ! 25) or
6319        not raisesOverflowError(        70 ! 26) or
6320        not raisesOverflowError(        69 ! 27) or
6321        not raisesOverflowError(        68 ! 28) or
6322        not raisesOverflowError(        68 ! 29) or
6323        not raisesOverflowError(        67 ! 30) or
6324        not raisesOverflowError(        67 ! 31) or
6325        not raisesOverflowError(        67 ! 32) or
6326        not raisesOverflowError(        67 ! 33) or
6327        not raisesOverflowError(        67 ! 34) or
6328        not raisesOverflowError(        67 ! 35) or
6329        not raisesOverflowError(        67 ! 36) or
6330        not raisesOverflowError(        67 ! 37) or
6331        not raisesOverflowError(        68 ! 38) or
6332        not raisesOverflowError(        68 ! 39) or
6333        not raisesOverflowError(        68 ! 40) or
6334        not raisesOverflowError(        69 ! 41) or
6335        not raisesOverflowError(        69 ! 42) or
6336        not raisesOverflowError(        70 ! 43) or
6337        not raisesOverflowError(        70 ! 44) or
6338        not raisesOverflowError(        71 ! 45) or
6339        not raisesOverflowError(        71 ! 46) or
6340        not raisesOverflowError(        72 ! 47) or
6341        not raisesOverflowError(        73 ! 48) or
6342        not raisesOverflowError(        73 ! 49) or
6343        not raisesOverflowError(        74 ! 50) or
6344        not raisesOverflowError(        75 ! 51) or
6345        not raisesOverflowError(        75 ! 52) or
6346        not raisesOverflowError(        76 ! 53) or
6347        not raisesOverflowError(        77 ! 54) or
6348        not raisesOverflowError(        77 ! 55) or
6349        not raisesOverflowError(        78 ! 56) or
6350        not raisesOverflowError(        79 ! 57) or
6351        not raisesOverflowError(        80 ! 58) or
6352        not raisesOverflowError(        80 ! 59) or
6353        not raisesOverflowError(        81 ! 60) or
6354        not raisesOverflowError(        82 ! 61) or
6355        not raisesOverflowError(        83 ! 62) or
6356        not raisesOverflowError(        84 ! 63) or
6357        not raisesOverflowError(        84 ! 64) or
6358        not raisesOverflowError(        85 ! 65) or
6359        not raisesOverflowError(        86 ! 66) or
6360        not raisesOverflowError(        87 ! 67) or
6361        not raisesOverflowError(        88 ! 68) or
6362        not raisesOverflowError(        89 ! 69) or
6363        not raisesOverflowError(        89 ! 70) or
6364        not raisesOverflowError(        90 ! 71) or
6365        not raisesOverflowError(        91 ! 72) or
6366        not raisesOverflowError(        92 ! 73) or
6367        not raisesOverflowError(        93 ! 74) or
6368        not raisesOverflowError(        94 ! 75) or
6369        not raisesOverflowError(        95 ! 76) or
6370        not raisesOverflowError(        95 ! 77) or
6371        not raisesOverflowError(        96 ! 78) or
6372        not raisesOverflowError(        97 ! 79) or
6373        not raisesOverflowError(        98 ! 80) or
6374        not raisesOverflowError(        99 ! 81) or
6375        not raisesOverflowError(       100 ! 82) or
6376        not raisesOverflowError(       101 ! 83) or
6377        not raisesOverflowError(       102 ! 84) or
6378        not raisesOverflowError(       102 ! 85) or
6379        not raisesOverflowError(       103 ! 86) or
6380        not raisesOverflowError(       104 ! 87) or
6381        not raisesOverflowError(       105 ! 88) or
6382        not raisesOverflowError(       106 ! 89) or
6383        not raisesOverflowError(       107 ! 90) or
6384        not raisesOverflowError(       108 ! 91) or
6385        not raisesOverflowError(       109 ! 92) or
6386        not raisesOverflowError(       110 ! 93) or
6387        not raisesOverflowError(       111 ! 94) or
6388        not raisesOverflowError(       112 ! 95) or
6389        not raisesOverflowError(       113 ! 96) or
6390        not raisesOverflowError(       113 ! 97) or
6391        not raisesOverflowError(       114 ! 98) or
6392        not raisesOverflowError(       115 ! 99) then
6393      writeln(" ***** Overflow not raised for binomial coefficient with positive n. (1)");
6394      okay := FALSE;
6395    end if;
6396
6397    if  not raisesOverflowError(intExpr(4294967297) !  2) or
6398        not raisesOverflowError(intExpr(   3810780) !  3) or
6399        not raisesOverflowError(intExpr(    121978) !  4) or
6400        not raisesOverflowError(intExpr(     16176) !  5) or
6401        not raisesOverflowError(intExpr(      4338) !  6) or
6402        not raisesOverflowError(intExpr(      1734) !  7) or
6403        not raisesOverflowError(intExpr(       888) !  8) or
6404        not raisesOverflowError(intExpr(       535) !  9) or
6405        not raisesOverflowError(intExpr(       362) ! 10) or
6406        not raisesOverflowError(intExpr(       266) ! 11) or
6407        not raisesOverflowError(intExpr(       207) ! 12) or
6408        not raisesOverflowError(intExpr(       170) ! 13) or
6409        not raisesOverflowError(intExpr(       144) ! 14) or
6410        not raisesOverflowError(intExpr(       126) ! 15) or
6411        not raisesOverflowError(intExpr(       112) ! 16) or
6412        not raisesOverflowError(intExpr(       102) ! 17) or
6413        not raisesOverflowError(intExpr(        95) ! 18) or
6414        not raisesOverflowError(intExpr(        89) ! 19) or
6415        not raisesOverflowError(intExpr(        84) ! 20) or
6416        not raisesOverflowError(intExpr(        80) ! 21) or
6417        not raisesOverflowError(intExpr(        77) ! 22) or
6418        not raisesOverflowError(intExpr(        75) ! 23) or
6419        not raisesOverflowError(intExpr(        73) ! 24) or
6420        not raisesOverflowError(intExpr(        71) ! 25) or
6421        not raisesOverflowError(intExpr(        70) ! 26) or
6422        not raisesOverflowError(intExpr(        69) ! 27) or
6423        not raisesOverflowError(intExpr(        68) ! 28) or
6424        not raisesOverflowError(intExpr(        68) ! 29) or
6425        not raisesOverflowError(intExpr(        67) ! 30) or
6426        not raisesOverflowError(intExpr(        67) ! 31) or
6427        not raisesOverflowError(intExpr(        67) ! 32) or
6428        not raisesOverflowError(intExpr(        67) ! 33) or
6429        not raisesOverflowError(intExpr(        67) ! 34) or
6430        not raisesOverflowError(intExpr(        67) ! 35) or
6431        not raisesOverflowError(intExpr(        67) ! 36) or
6432        not raisesOverflowError(intExpr(        67) ! 37) or
6433        not raisesOverflowError(intExpr(        68) ! 38) or
6434        not raisesOverflowError(intExpr(        68) ! 39) or
6435        not raisesOverflowError(intExpr(        68) ! 40) or
6436        not raisesOverflowError(intExpr(        69) ! 41) or
6437        not raisesOverflowError(intExpr(        69) ! 42) or
6438        not raisesOverflowError(intExpr(        70) ! 43) or
6439        not raisesOverflowError(intExpr(        70) ! 44) or
6440        not raisesOverflowError(intExpr(        71) ! 45) or
6441        not raisesOverflowError(intExpr(        71) ! 46) or
6442        not raisesOverflowError(intExpr(        72) ! 47) or
6443        not raisesOverflowError(intExpr(        73) ! 48) or
6444        not raisesOverflowError(intExpr(        73) ! 49) or
6445        not raisesOverflowError(intExpr(        74) ! 50) or
6446        not raisesOverflowError(intExpr(        75) ! 51) or
6447        not raisesOverflowError(intExpr(        75) ! 52) or
6448        not raisesOverflowError(intExpr(        76) ! 53) or
6449        not raisesOverflowError(intExpr(        77) ! 54) or
6450        not raisesOverflowError(intExpr(        77) ! 55) or
6451        not raisesOverflowError(intExpr(        78) ! 56) or
6452        not raisesOverflowError(intExpr(        79) ! 57) or
6453        not raisesOverflowError(intExpr(        80) ! 58) or
6454        not raisesOverflowError(intExpr(        80) ! 59) or
6455        not raisesOverflowError(intExpr(        81) ! 60) or
6456        not raisesOverflowError(intExpr(        82) ! 61) or
6457        not raisesOverflowError(intExpr(        83) ! 62) or
6458        not raisesOverflowError(intExpr(        84) ! 63) or
6459        not raisesOverflowError(intExpr(        84) ! 64) or
6460        not raisesOverflowError(intExpr(        85) ! 65) or
6461        not raisesOverflowError(intExpr(        86) ! 66) or
6462        not raisesOverflowError(intExpr(        87) ! 67) or
6463        not raisesOverflowError(intExpr(        88) ! 68) or
6464        not raisesOverflowError(intExpr(        89) ! 69) or
6465        not raisesOverflowError(intExpr(        89) ! 70) or
6466        not raisesOverflowError(intExpr(        90) ! 71) or
6467        not raisesOverflowError(intExpr(        91) ! 72) or
6468        not raisesOverflowError(intExpr(        92) ! 73) or
6469        not raisesOverflowError(intExpr(        93) ! 74) or
6470        not raisesOverflowError(intExpr(        94) ! 75) or
6471        not raisesOverflowError(intExpr(        95) ! 76) or
6472        not raisesOverflowError(intExpr(        95) ! 77) or
6473        not raisesOverflowError(intExpr(        96) ! 78) or
6474        not raisesOverflowError(intExpr(        97) ! 79) or
6475        not raisesOverflowError(intExpr(        98) ! 80) or
6476        not raisesOverflowError(intExpr(        99) ! 81) or
6477        not raisesOverflowError(intExpr(       100) ! 82) or
6478        not raisesOverflowError(intExpr(       101) ! 83) or
6479        not raisesOverflowError(intExpr(       102) ! 84) or
6480        not raisesOverflowError(intExpr(       102) ! 85) or
6481        not raisesOverflowError(intExpr(       103) ! 86) or
6482        not raisesOverflowError(intExpr(       104) ! 87) or
6483        not raisesOverflowError(intExpr(       105) ! 88) or
6484        not raisesOverflowError(intExpr(       106) ! 89) or
6485        not raisesOverflowError(intExpr(       107) ! 90) or
6486        not raisesOverflowError(intExpr(       108) ! 91) or
6487        not raisesOverflowError(intExpr(       109) ! 92) or
6488        not raisesOverflowError(intExpr(       110) ! 93) or
6489        not raisesOverflowError(intExpr(       111) ! 94) or
6490        not raisesOverflowError(intExpr(       112) ! 95) or
6491        not raisesOverflowError(intExpr(       113) ! 96) or
6492        not raisesOverflowError(intExpr(       113) ! 97) or
6493        not raisesOverflowError(intExpr(       114) ! 98) or
6494        not raisesOverflowError(intExpr(       115) ! 99) then
6495      writeln(" ***** Overflow not raised for binomial coefficient with positive n. (2)");
6496      okay := FALSE;
6497    end if;
6498
6499    if  not raisesOverflowError(4294967297 ! intExpr( 2)) or
6500        not raisesOverflowError(   3810780 ! intExpr( 3)) or
6501        not raisesOverflowError(    121978 ! intExpr( 4)) or
6502        not raisesOverflowError(     16176 ! intExpr( 5)) or
6503        not raisesOverflowError(      4338 ! intExpr( 6)) or
6504        not raisesOverflowError(      1734 ! intExpr( 7)) or
6505        not raisesOverflowError(       888 ! intExpr( 8)) or
6506        not raisesOverflowError(       535 ! intExpr( 9)) or
6507        not raisesOverflowError(       362 ! intExpr(10)) or
6508        not raisesOverflowError(       266 ! intExpr(11)) or
6509        not raisesOverflowError(       207 ! intExpr(12)) or
6510        not raisesOverflowError(       170 ! intExpr(13)) or
6511        not raisesOverflowError(       144 ! intExpr(14)) or
6512        not raisesOverflowError(       126 ! intExpr(15)) or
6513        not raisesOverflowError(       112 ! intExpr(16)) or
6514        not raisesOverflowError(       102 ! intExpr(17)) or
6515        not raisesOverflowError(        95 ! intExpr(18)) or
6516        not raisesOverflowError(        89 ! intExpr(19)) or
6517        not raisesOverflowError(        84 ! intExpr(20)) or
6518        not raisesOverflowError(        80 ! intExpr(21)) or
6519        not raisesOverflowError(        77 ! intExpr(22)) or
6520        not raisesOverflowError(        75 ! intExpr(23)) or
6521        not raisesOverflowError(        73 ! intExpr(24)) or
6522        not raisesOverflowError(        71 ! intExpr(25)) or
6523        not raisesOverflowError(        70 ! intExpr(26)) or
6524        not raisesOverflowError(        69 ! intExpr(27)) or
6525        not raisesOverflowError(        68 ! intExpr(28)) or
6526        not raisesOverflowError(        68 ! intExpr(29)) or
6527        not raisesOverflowError(        67 ! intExpr(30)) or
6528        not raisesOverflowError(        67 ! intExpr(31)) or
6529        not raisesOverflowError(        67 ! intExpr(32)) or
6530        not raisesOverflowError(        67 ! intExpr(33)) or
6531        not raisesOverflowError(        67 ! intExpr(34)) or
6532        not raisesOverflowError(        67 ! intExpr(35)) or
6533        not raisesOverflowError(        67 ! intExpr(36)) or
6534        not raisesOverflowError(        67 ! intExpr(37)) or
6535        not raisesOverflowError(        68 ! intExpr(38)) or
6536        not raisesOverflowError(        68 ! intExpr(39)) or
6537        not raisesOverflowError(        68 ! intExpr(40)) or
6538        not raisesOverflowError(        69 ! intExpr(41)) or
6539        not raisesOverflowError(        69 ! intExpr(42)) or
6540        not raisesOverflowError(        70 ! intExpr(43)) or
6541        not raisesOverflowError(        70 ! intExpr(44)) or
6542        not raisesOverflowError(        71 ! intExpr(45)) or
6543        not raisesOverflowError(        71 ! intExpr(46)) or
6544        not raisesOverflowError(        72 ! intExpr(47)) or
6545        not raisesOverflowError(        73 ! intExpr(48)) or
6546        not raisesOverflowError(        73 ! intExpr(49)) or
6547        not raisesOverflowError(        74 ! intExpr(50)) or
6548        not raisesOverflowError(        75 ! intExpr(51)) or
6549        not raisesOverflowError(        75 ! intExpr(52)) or
6550        not raisesOverflowError(        76 ! intExpr(53)) or
6551        not raisesOverflowError(        77 ! intExpr(54)) or
6552        not raisesOverflowError(        77 ! intExpr(55)) or
6553        not raisesOverflowError(        78 ! intExpr(56)) or
6554        not raisesOverflowError(        79 ! intExpr(57)) or
6555        not raisesOverflowError(        80 ! intExpr(58)) or
6556        not raisesOverflowError(        80 ! intExpr(59)) or
6557        not raisesOverflowError(        81 ! intExpr(60)) or
6558        not raisesOverflowError(        82 ! intExpr(61)) or
6559        not raisesOverflowError(        83 ! intExpr(62)) or
6560        not raisesOverflowError(        84 ! intExpr(63)) or
6561        not raisesOverflowError(        84 ! intExpr(64)) or
6562        not raisesOverflowError(        85 ! intExpr(65)) or
6563        not raisesOverflowError(        86 ! intExpr(66)) or
6564        not raisesOverflowError(        87 ! intExpr(67)) or
6565        not raisesOverflowError(        88 ! intExpr(68)) or
6566        not raisesOverflowError(        89 ! intExpr(69)) or
6567        not raisesOverflowError(        89 ! intExpr(70)) or
6568        not raisesOverflowError(        90 ! intExpr(71)) or
6569        not raisesOverflowError(        91 ! intExpr(72)) or
6570        not raisesOverflowError(        92 ! intExpr(73)) or
6571        not raisesOverflowError(        93 ! intExpr(74)) or
6572        not raisesOverflowError(        94 ! intExpr(75)) or
6573        not raisesOverflowError(        95 ! intExpr(76)) or
6574        not raisesOverflowError(        95 ! intExpr(77)) or
6575        not raisesOverflowError(        96 ! intExpr(78)) or
6576        not raisesOverflowError(        97 ! intExpr(79)) or
6577        not raisesOverflowError(        98 ! intExpr(80)) or
6578        not raisesOverflowError(        99 ! intExpr(81)) or
6579        not raisesOverflowError(       100 ! intExpr(82)) or
6580        not raisesOverflowError(       101 ! intExpr(83)) or
6581        not raisesOverflowError(       102 ! intExpr(84)) or
6582        not raisesOverflowError(       102 ! intExpr(85)) or
6583        not raisesOverflowError(       103 ! intExpr(86)) or
6584        not raisesOverflowError(       104 ! intExpr(87)) or
6585        not raisesOverflowError(       105 ! intExpr(88)) or
6586        not raisesOverflowError(       106 ! intExpr(89)) or
6587        not raisesOverflowError(       107 ! intExpr(90)) or
6588        not raisesOverflowError(       108 ! intExpr(91)) or
6589        not raisesOverflowError(       109 ! intExpr(92)) or
6590        not raisesOverflowError(       110 ! intExpr(93)) or
6591        not raisesOverflowError(       111 ! intExpr(94)) or
6592        not raisesOverflowError(       112 ! intExpr(95)) or
6593        not raisesOverflowError(       113 ! intExpr(96)) or
6594        not raisesOverflowError(       113 ! intExpr(97)) or
6595        not raisesOverflowError(       114 ! intExpr(98)) or
6596        not raisesOverflowError(       115 ! intExpr(99)) then
6597      writeln(" ***** Overflow not raised for binomial coefficient with positive n. (3)");
6598      okay := FALSE;
6599    end if;
6600
6601    if  not raisesOverflowError(intExpr(4294967297) ! intExpr( 2)) or
6602        not raisesOverflowError(intExpr(   3810780) ! intExpr( 3)) or
6603        not raisesOverflowError(intExpr(    121978) ! intExpr( 4)) or
6604        not raisesOverflowError(intExpr(     16176) ! intExpr( 5)) or
6605        not raisesOverflowError(intExpr(      4338) ! intExpr( 6)) or
6606        not raisesOverflowError(intExpr(      1734) ! intExpr( 7)) or
6607        not raisesOverflowError(intExpr(       888) ! intExpr( 8)) or
6608        not raisesOverflowError(intExpr(       535) ! intExpr( 9)) or
6609        not raisesOverflowError(intExpr(       362) ! intExpr(10)) or
6610        not raisesOverflowError(intExpr(       266) ! intExpr(11)) or
6611        not raisesOverflowError(intExpr(       207) ! intExpr(12)) or
6612        not raisesOverflowError(intExpr(       170) ! intExpr(13)) or
6613        not raisesOverflowError(intExpr(       144) ! intExpr(14)) or
6614        not raisesOverflowError(intExpr(       126) ! intExpr(15)) or
6615        not raisesOverflowError(intExpr(       112) ! intExpr(16)) or
6616        not raisesOverflowError(intExpr(       102) ! intExpr(17)) or
6617        not raisesOverflowError(intExpr(        95) ! intExpr(18)) or
6618        not raisesOverflowError(intExpr(        89) ! intExpr(19)) or
6619        not raisesOverflowError(intExpr(        84) ! intExpr(20)) or
6620        not raisesOverflowError(intExpr(        80) ! intExpr(21)) or
6621        not raisesOverflowError(intExpr(        77) ! intExpr(22)) or
6622        not raisesOverflowError(intExpr(        75) ! intExpr(23)) or
6623        not raisesOverflowError(intExpr(        73) ! intExpr(24)) or
6624        not raisesOverflowError(intExpr(        71) ! intExpr(25)) or
6625        not raisesOverflowError(intExpr(        70) ! intExpr(26)) or
6626        not raisesOverflowError(intExpr(        69) ! intExpr(27)) or
6627        not raisesOverflowError(intExpr(        68) ! intExpr(28)) or
6628        not raisesOverflowError(intExpr(        68) ! intExpr(29)) or
6629        not raisesOverflowError(intExpr(        67) ! intExpr(30)) or
6630        not raisesOverflowError(intExpr(        67) ! intExpr(31)) or
6631        not raisesOverflowError(intExpr(        67) ! intExpr(32)) or
6632        not raisesOverflowError(intExpr(        67) ! intExpr(33)) or
6633        not raisesOverflowError(intExpr(        67) ! intExpr(34)) or
6634        not raisesOverflowError(intExpr(        67) ! intExpr(35)) or
6635        not raisesOverflowError(intExpr(        67) ! intExpr(36)) or
6636        not raisesOverflowError(intExpr(        67) ! intExpr(37)) or
6637        not raisesOverflowError(intExpr(        68) ! intExpr(38)) or
6638        not raisesOverflowError(intExpr(        68) ! intExpr(39)) or
6639        not raisesOverflowError(intExpr(        68) ! intExpr(40)) or
6640        not raisesOverflowError(intExpr(        69) ! intExpr(41)) or
6641        not raisesOverflowError(intExpr(        69) ! intExpr(42)) or
6642        not raisesOverflowError(intExpr(        70) ! intExpr(43)) or
6643        not raisesOverflowError(intExpr(        70) ! intExpr(44)) or
6644        not raisesOverflowError(intExpr(        71) ! intExpr(45)) or
6645        not raisesOverflowError(intExpr(        71) ! intExpr(46)) or
6646        not raisesOverflowError(intExpr(        72) ! intExpr(47)) or
6647        not raisesOverflowError(intExpr(        73) ! intExpr(48)) or
6648        not raisesOverflowError(intExpr(        73) ! intExpr(49)) or
6649        not raisesOverflowError(intExpr(        74) ! intExpr(50)) or
6650        not raisesOverflowError(intExpr(        75) ! intExpr(51)) or
6651        not raisesOverflowError(intExpr(        75) ! intExpr(52)) or
6652        not raisesOverflowError(intExpr(        76) ! intExpr(53)) or
6653        not raisesOverflowError(intExpr(        77) ! intExpr(54)) or
6654        not raisesOverflowError(intExpr(        77) ! intExpr(55)) or
6655        not raisesOverflowError(intExpr(        78) ! intExpr(56)) or
6656        not raisesOverflowError(intExpr(        79) ! intExpr(57)) or
6657        not raisesOverflowError(intExpr(        80) ! intExpr(58)) or
6658        not raisesOverflowError(intExpr(        80) ! intExpr(59)) or
6659        not raisesOverflowError(intExpr(        81) ! intExpr(60)) or
6660        not raisesOverflowError(intExpr(        82) ! intExpr(61)) or
6661        not raisesOverflowError(intExpr(        83) ! intExpr(62)) or
6662        not raisesOverflowError(intExpr(        84) ! intExpr(63)) or
6663        not raisesOverflowError(intExpr(        84) ! intExpr(64)) or
6664        not raisesOverflowError(intExpr(        85) ! intExpr(65)) or
6665        not raisesOverflowError(intExpr(        86) ! intExpr(66)) or
6666        not raisesOverflowError(intExpr(        87) ! intExpr(67)) or
6667        not raisesOverflowError(intExpr(        88) ! intExpr(68)) or
6668        not raisesOverflowError(intExpr(        89) ! intExpr(69)) or
6669        not raisesOverflowError(intExpr(        89) ! intExpr(70)) or
6670        not raisesOverflowError(intExpr(        90) ! intExpr(71)) or
6671        not raisesOverflowError(intExpr(        91) ! intExpr(72)) or
6672        not raisesOverflowError(intExpr(        92) ! intExpr(73)) or
6673        not raisesOverflowError(intExpr(        93) ! intExpr(74)) or
6674        not raisesOverflowError(intExpr(        94) ! intExpr(75)) or
6675        not raisesOverflowError(intExpr(        95) ! intExpr(76)) or
6676        not raisesOverflowError(intExpr(        95) ! intExpr(77)) or
6677        not raisesOverflowError(intExpr(        96) ! intExpr(78)) or
6678        not raisesOverflowError(intExpr(        97) ! intExpr(79)) or
6679        not raisesOverflowError(intExpr(        98) ! intExpr(80)) or
6680        not raisesOverflowError(intExpr(        99) ! intExpr(81)) or
6681        not raisesOverflowError(intExpr(       100) ! intExpr(82)) or
6682        not raisesOverflowError(intExpr(       101) ! intExpr(83)) or
6683        not raisesOverflowError(intExpr(       102) ! intExpr(84)) or
6684        not raisesOverflowError(intExpr(       102) ! intExpr(85)) or
6685        not raisesOverflowError(intExpr(       103) ! intExpr(86)) or
6686        not raisesOverflowError(intExpr(       104) ! intExpr(87)) or
6687        not raisesOverflowError(intExpr(       105) ! intExpr(88)) or
6688        not raisesOverflowError(intExpr(       106) ! intExpr(89)) or
6689        not raisesOverflowError(intExpr(       107) ! intExpr(90)) or
6690        not raisesOverflowError(intExpr(       108) ! intExpr(91)) or
6691        not raisesOverflowError(intExpr(       109) ! intExpr(92)) or
6692        not raisesOverflowError(intExpr(       110) ! intExpr(93)) or
6693        not raisesOverflowError(intExpr(       111) ! intExpr(94)) or
6694        not raisesOverflowError(intExpr(       112) ! intExpr(95)) or
6695        not raisesOverflowError(intExpr(       113) ! intExpr(96)) or
6696        not raisesOverflowError(intExpr(       113) ! intExpr(97)) or
6697        not raisesOverflowError(intExpr(       114) ! intExpr(98)) or
6698        not raisesOverflowError(intExpr(       115) ! intExpr(99)) then
6699      writeln(" ***** Overflow not raised for binomial coefficient with positive n. (4)");
6700      okay := FALSE;
6701    end if;
6702
6703    if okay then
6704      writeln("Overflow checking of binomial coefficient works correct.");
6705    else
6706      writeln(" ***** Overflow checking of binomial coefficient does not work correct.");
6707    end if;
6708  end func;
6709
6710
6711const proc: check_abs is func
6712  local
6713    var boolean: okay is TRUE;
6714  begin
6715    if  not raisesOverflowError(abs(                      INT64_MIN))   or
6716        not raisesOverflowError(abs(intExpr(              INT64_MIN)))  or
6717        not raisesOverflowError(abs(        (-9223372036854775807-1)))  or
6718        not raisesOverflowError(abs(intExpr((-9223372036854775807-1)))) then
6719      writeln(" ***** Overflow when computing abs(-9223372036854775808) does not work correct.");
6720      okay := FALSE;
6721    end if;
6722
6723    if okay then
6724      writeln("Overflow checking of abs works correct.");
6725    else
6726      writeln(" ***** Overflow checking of abs does not work correct.");
6727    end if;
6728  end func;
6729
6730
6731const proc: main is func
6732
6733  begin
6734    writeln;
6735    check_negation;
6736    check_add;
6737    check_add_assign;
6738    check_subtract;
6739    check_subtract_assign;
6740    check_succ;
6741    check_pred;
6742    check_incr;
6743    check_decr;
6744    check_mult;
6745    check_mult_assign;
6746    check_div;
6747    check_rem;
6748    check_mdiv;
6749    check_mod;
6750    check_lShift;
6751    check_lShift_assign;
6752    check_rShift;
6753    check_rShift_assign;
6754    check_ulShift;
6755    check_ulShift_assign;
6756    check_urShift;
6757    check_urShift_assign;
6758    check_power;
6759    check_binom;
6760    check_abs;
6761  end func;
6762