3 -- Grant of Unlimited Rights
5 -- Under contracts F33600-87-D-0337, F33600-84-D-0280, MDA903-79-C-0687,
6 -- F08630-91-C-0015, and DCA100-97-D-0025, the U.S. Government obtained
7 -- unlimited rights in the software and documentation contained herein.
8 -- Unlimited rights are defined in DFAR 252.227-7013(a)(19). By making
9 -- this public release, the Government intends to confer upon all
10 -- recipients unlimited rights equal to those held by the Government.
11 -- These rights include rights to use, duplicate, release or disclose the
12 -- released technical data and computer software in whole or in part, in
13 -- any manner and for any purpose whatsoever, and to have or permit others
18 -- ALL MATERIALS OR INFORMATION HEREIN RELEASED, MADE AVAILABLE OR
19 -- DISCLOSED ARE AS IS. THE GOVERNMENT MAKES NO EXPRESS OR IMPLIED
20 -- WARRANTY AS TO ANY MATTER WHATSOEVER, INCLUDING THE CONDITIONS OF THE
21 -- SOFTWARE, DOCUMENTATION OR OTHER INFORMATION RELEASED, MADE AVAILABLE
22 -- OR DISCLOSED, OR THE OWNERSHIP, MERCHANTABILITY, OR FITNESS FOR A
23 -- PARTICULAR PURPOSE OF SAID MATERIAL.
25 -- CHECK THAT FOR FIXED POINT TYPES THE OPERATORS "+" AND "-" PRODUCE
26 -- CORRECT RESULTS WHEN:
27 -- (A) A, B, A+B, AND A-B ARE ALL MODEL NUMBERS.
28 -- (B) A IS A MODEL NUMBER BUT B, A+B, AND A-B ARE NOT.
29 -- (C) A, B, A+B, AND A-B ARE ALL MODEL NUMBERS WITH DIFFERENT
32 -- CASE A: BASIC TYPES THAT FIT THE CHARACTERISTICS OF DURATION'BASE.
35 -- KAS 11/14/95 REDUCE EXPECTATION FOR T'SMALL
36 -- KAS 11/30/95 ONE MORE CHANGE...
37 -- PWN 02/28/96 CLEANED COMMENTS FOR RELEASE
38 -- KAS 03/18/96 ELIDED TWO 'SMALL CASES FOR 2.1
40 WITH REPORT
; USE REPORT
;
43 TYPE LIKE_DURATION
IS DELTA 0.020 RANGE -86_400
.0
.. 86_400
.0
;
45 SUBTYPE F
IS LIKE_DURATION
DELTA 0.25 RANGE -1000.0 .. 1000.0;
46 SUBTYPE ST_F1
IS LIKE_DURATION
DELTA 0.5 RANGE -4.0 .. 3.0;
47 SUBTYPE ST_F2
IS LIKE_DURATION
DELTA 1.0 / 16
48 RANGE -13.0 / 16 .. 5.0 + 1.0 / 16;
52 TEST
("C45331A", "CHECK THAT FOR FIXED POINT TYPES THE " &
53 "OPERATORS ""+"" AND ""-"" PRODUCE CORRECT " &
54 "RESULTS - BASIC TYPES");
56 -------------------------------------------------------------------
59 SMALL
, MAX
, MIN
, ZERO
: F
:= 0.5;
62 -- INITIALIZE "CONSTANTS":
65 MAX
:= F
'LAST; -- BECAUSE F'LAST < F'LARGE AND F'LAST
67 MIN
:= F
'FIRST; -- F'FIRST IS A MODEL NUMBER.
71 -- CHECK SMALL + OR - ZERO = SMALL:
72 IF "+"(LEFT
=> SMALL
, RIGHT
=> ZERO
) /= SMALL
OR
73 0.0 + SMALL
/= SMALL
THEN
74 FAILED
("F'SMALL + 0.0 /= F'SMALL");
76 IF "-"(LEFT
=> SMALL
, RIGHT
=> ZERO
) /= SMALL
OR
77 SMALL
- 0.0 /= SMALL
THEN
78 FAILED
("F'SMALL - 0.0 /= F'SMALL");
81 -- CHECK MAX + OR - ZERO = MAX:
82 IF MAX
+ ZERO
/= MAX
OR 0.0 + MAX
/= MAX
THEN
83 FAILED
("F'LAST + 0.0 /= F'LAST");
85 IF MAX
- ZERO
/= MAX
OR MAX
- 0.0 /= MAX
THEN
86 FAILED
("F'LAST - 0.0 /= F'LAST");
89 -- CHECK SMALL - SMALL = 0.0:
93 IF SMALL
- X
/= 0.0 OR SMALL
- SMALL
/= 0.0 OR
94 F
'SMALL - F
'SMALL /= 0.0 THEN
95 FAILED
("F'SMALL - F'SMALL /= 0.0");
98 -- CHECK MAX - MAX = 0.0:
102 IF MAX
- X
/= 0.0 OR MAX
- MAX
/= 0.0 OR
103 F
'LAST - F
'LAST /= 0.0 THEN
104 FAILED
("F'LAST - F'LAST /= 0.0");
107 -- CHECK ZERO - MAX = MIN, MIN - MIN = 0.0,
108 -- AND MIN + MAX = 0.0:
113 FAILED
("0.0 - 1000.0 /= -1000.0");
118 IF MIN
- X
/= 0.0 OR MIN
- MIN
/= 0.0 OR
119 F
'FIRST - F
'FIRST /= 0.0 THEN
120 FAILED
("F'FIRST - F'FIRST /= 0.0");
122 IF MIN
+ MAX
/= 0.0 OR MAX
+ MIN
/= 0.0 OR
123 F
'FIRST + F
'LAST /= 0.0 THEN
124 FAILED
("-1000.0 + 1000.0 /= 0.0");
127 -- CHECK ADDITION AND SUBTRACTION FOR ARBITRARY MID-RANGE
132 IF (X
+ SMALL
) /= (SMALL
+ X
) OR
133 (X
+ SMALL
) > (X
+ 0.25) THEN -- X + SMALL SB <= X + DELTA
134 FAILED
("X + SMALL DELIVERED BAD RESULT");
137 -- CHECK (MAX - SMALL) + SMALL = MAX:
141 IF X
+ SMALL
/= MAX
THEN
142 FAILED
("(MAX - SMALL) + SMALL /= MAX");
147 FAILED
("EXCEPTION RAISED - A");
150 -------------------------------------------------------------------
153 NON_MODEL_CONST
: CONSTANT := 2.0 / 3;
154 NON_MODEL_VAR
: F
:= 0.0;
156 SMALL
, MAX
, MIN
, ZERO
: F
:= 0.5;
159 -- INITIALIZE "CONSTANTS":
162 MAX
:= F
'LAST; -- BECAUSE F'LAST < F'LARGE AND
163 -- F'LAST IS A MODEL NUMBER.
164 MIN
:= F
'FIRST; -- F'FIRST IS A MODEL NUMBER.
166 NON_MODEL_VAR
:= NON_MODEL_CONST
;
169 -- CHECK VALUE OF NON_MODEL_VAR:
170 IF NON_MODEL_VAR
NOT IN 0.5 .. 0.75 THEN
171 FAILED
("VALUE OF NON_MODEL_VAR NOT IN CORRECT RANGE");
174 -- CHECK NON-MODEL VALUE + OR - ZERO:
175 IF NON_MODEL_VAR
+ ZERO
NOT IN 0.5 .. 0.75 OR
176 F
'(0.0) + NON_MODEL_CONST NOT IN 0.5 .. 0.75 THEN
177 FAILED ("(2.0 / 3) + 0.0 NOT IN 0.5 .. 0.75");
179 IF NON_MODEL_VAR - ZERO NOT IN 0.5 .. 0.75 OR
180 NON_MODEL_CONST - F'(0.0) NOT IN 0.5 .. 0.75 THEN
181 FAILED
("(2.0 / 3) - 0.0 NOT IN 0.5 .. 0.75");
184 -- CHECK ZERO - NON-MODEL:
185 IF F
'(0.0) - NON_MODEL_CONST NOT IN -0.75 .. -0.5 THEN
186 FAILED ("0.0 - (2.0 / 3) NOT IN -0.75 .. -0.5");
189 IF F'(1.0) - NON_MODEL_CONST
NOT IN 0.25 .. 0.5 THEN
190 FAILED
("1.0 - (2.0 / 3) NOT IN 0.25 .. 0.5");
193 -- CHECK ADDITION AND SUBTRACTION OF NON-MODEL NEAR MIN AND
195 IF MIN
+ NON_MODEL_VAR
NOT IN -999.5 .. -999.25 OR
196 NON_MODEL_CONST
+ F
'FIRST NOT IN -999.5 .. -999.25 THEN
197 FAILED
("-1000.0 + (2.0 / 3) NOT IN -999.5 .. -999.25");
199 IF MAX
- NON_MODEL_VAR
NOT IN 999.25 .. 999.5 OR
200 F
'LAST - NON_MODEL_CONST
NOT IN 999.25 .. 999.5 THEN
201 FAILED
("1000.0 - (2.0 / 3) NOT IN 999.25 .. 999.5");
204 -- CHECK ADDITION AND SUBTRACTION FOR ARBITRARY MID-RANGE
205 -- MODEL NUMBER WITH NON-MODEL:
209 IF X
+ NON_MODEL_CONST
NOT IN -212.75 .. -212.5 THEN
210 FAILED
("-213.25 + (2.0 / 3) NOT IN -212.75 .. -212.5");
212 IF NON_MODEL_VAR
- X
NOT IN 213.75 .. 214.0 THEN
213 FAILED
("(2.0 / 3) - (-213.25) NOT IN 213.75 .. 214.0");
218 FAILED
("EXCEPTION RAISED - B");
221 -------------------------------------------------------------------
224 A_SMALL
, A_MAX
, A_MIN
: ST_F1
:= 0.0;
225 B_SMALL
, B_MAX
, B_MIN
: ST_F2
:= 0.0;
228 -- INITIALIZE "CONSTANTS":
230 A_SMALL
:= ST_F1
'SMALL;
231 A_MAX
:= ST_F1
'LAST; -- BECAUSE 'LAST < 'LARGE AND
232 -- 'LAST IS A MODEL NUMBER.
233 A_MIN
:= ST_F1
'FIRST; -- 'FIRST IS A MODEL NUMBER.
235 B_SMALL
:= ST_F2
'SMALL;
236 B_MAX
:= ST_F2
'LAST; -- BECAUSE 'LAST <= 'LARGE AND
237 -- 'LAST IS A MODEL NUMBER.
238 B_MIN
:= ST_F2
'FIRST; -- 'FIRST IS A MODEL NUMBER.
241 IF A_MIN
+ B_MIN
/= -4.8125 THEN
242 FAILED
("-4.0 + (-0.8125) /= -4.8125");
245 IF A_MIN
- B_MIN
/= -3.1875 THEN
246 FAILED
("-4.0 - (-0.8125) /= -3.1875");
249 IF (A_MIN
+ B_SMALL
) NOT IN A_MIN
.. -3.9375 THEN
250 FAILED
("(A_MIN + B_SMALL) NOT IN A_MIN .. -3.9375");
253 IF (A_MIN
- B_SMALL
) NOT IN -4.0625 .. -4.0 THEN
254 FAILED
("(A_MIN - B_SMALL) NOT IN -4.0 .. -4.0625");
257 IF A_MIN
+ B_MAX
/= 1.0625 THEN
258 FAILED
("-4.0 + 5.0625 /= 1.0625");
261 IF A_MIN
- B_MAX
/= -9.0625 THEN
262 FAILED
("-4.0 - 5.0625 /= -9.0625");
265 IF (A_SMALL
+ B_MIN
) NOT IN B_MIN
..-0.3125 THEN
266 FAILED
("(A_SMALL + B_MIN) NOT IN B_MIN..-0.3125");
269 IF (A_SMALL
- B_MIN
) NOT IN +0.8125 .. 1.3125 THEN
270 FAILED
("(A_SMALL - B_MIN) NOT IN -0.8125 .. 1.3125");
275 IF (A_SMALL
+ B_MAX
) NOT IN 5.0625 .. 5.5625 THEN
276 FAILED
("(A_SMALL + B_MAX) NOT IN 5.0625 .. 5.5625");
279 IF (A_SMALL
- B_MAX
) NOT IN -5.0625 .. -4.5625 THEN
280 FAILED
("(A_SMALL - B_MAX) NOT IN -5.0625 .. -4.5625");
283 IF A_MAX
+ B_MIN
/= 2.1875 THEN
284 FAILED
("3.0 + (-0.8125) /= 2.1875");
287 IF A_MAX
- B_MIN
/= 3.8125 THEN
288 FAILED
("3.0 - (-0.8125) /= 3.8125");
291 IF (A_MAX
+ B_SMALL
) NOT IN 3.0 .. 3.0625 THEN
292 FAILED
("(A_MAX + B_SMALL) NOT IN 3.0 .. 3.0625");
295 IF (A_MAX
- B_SMALL
) NOT IN 2.9375..3.0 THEN
296 FAILED
("(A_MAX - B_SMALL) NOT IN 2.9375..3.0");
299 IF A_MAX
+ B_MAX
/= 8.0625 THEN
300 FAILED
("3.0 + 5.0625 /= 8.0625");
303 IF A_MAX
- B_MAX
/= -2.0625 THEN
304 FAILED
("3.0 - 5.0625 /= -2.0625");
308 IF X
NOT IN 3.0 .. 3.25 THEN
309 FAILED
("-0.8125 - (-4.0) NOT IN RANGE");
312 X
:= B_MIN
- A_SMALL
;
313 IF X
NOT IN -1.3125 .. -0.8125 THEN
314 FAILED
("B_MIN - A_SMALL NOT IN RANGE");
318 IF X
NOT IN -4.0 .. -3.75 THEN
319 FAILED
("-0.8125 - 3.0 NOT IN RANGE");
322 X
:= B_SMALL
- A_MIN
;
323 IF X
NOT IN 4.0 .. 4.0625 THEN
324 FAILED
("B_SMALL - A_MIN NOT IN RANGE");
328 X
:= B_SMALL
- A_MAX
;
329 IF X
NOT IN -3.0 .. -2.75 THEN
330 FAILED
("B_SMALL - A_MAX NOT IN RANGE");
334 IF X
NOT IN 9.0 .. 9.25 THEN
335 FAILED
("5.0625 - (-4.0) NOT IN RANGE");
338 X
:= B_MAX
- A_SMALL
;
339 IF X
NOT IN 4.56 .. 5.0625 THEN
340 FAILED
("5.0625 - 0.5 NOT IN RANGE");
344 IF X
NOT IN 2.0 .. 2.25 THEN
345 FAILED
("5.0625 - 3.0 NOT IN RANGE");
350 FAILED
("EXCEPTION RAISED - C");
353 -------------------------------------------------------------------