1-- C45502B.DEP
2
3--                             Grant of Unlimited Rights
4--
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
14--     to do so.
15--
16--                                    DISCLAIMER
17--
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.
24--*
25-- OBJECTIVE:
26--     CHECK THAT MULTIPLICATION AND DIVISION YIELD CORRECT RESULTS WHEN
27--     THE OPERANDS ARE OF PREDEFINED TYPE SHORT_INTEGER.
28
29-- APPLICABILITY CRITERIA:
30--     THIS TEST IS APPLICABLE TO THOSE IMPLEMENTATIONS WHICH SUPPORT
31--     SHORT_INTEGER.
32
33--     IF "SHORT_INTEGER" IS NOT SUPPORTED, THEN THE DECLARATION OF
34--     "CHECK_SHORT" MUST BE REJECTED.
35
36-- HISTORY:
37--     RJW 09/01/86 CREATED ORIGINAL TEST.
38--     DHH 01/13/88 ADDED APPLICABILITY CRITERIA AND STANDARD HEADER.
39
40WITH REPORT; USE REPORT;
41PROCEDURE C45502B IS
42
43     CHECK_SHORT : SHORT_INTEGER;                   -- N/A => ERROR.
44
45     FUNCTION IDENT (S : SHORT_INTEGER) RETURN SHORT_INTEGER IS
46     BEGIN
47          RETURN SHORT_INTEGER (IDENT_INT (INTEGER (S)));
48     END IDENT;
49
50BEGIN
51     TEST ( "C45502B", "CHECK THAT MULTIPLICATION AND DIVISION " &
52                       "YIELD CORRECT RESULTS WHEN THE OPERANDS " &
53                       "ARE OF PREDEFINED TYPE SHORT_INTEGER" );
54
55     DECLARE
56          I0  : SHORT_INTEGER := 0;
57          I1  : SHORT_INTEGER := 1;
58          I2  : SHORT_INTEGER := 2;
59          I3  : SHORT_INTEGER := 3;
60          I5  : SHORT_INTEGER := 5;
61          I10 : SHORT_INTEGER := 10;
62          I11 : SHORT_INTEGER := 11;
63          I12 : SHORT_INTEGER := 12;
64          I13 : SHORT_INTEGER := 13;
65          I14 : SHORT_INTEGER := 14;
66          N1  : SHORT_INTEGER := -1;
67          N2  : SHORT_INTEGER := -2;
68          N5  : SHORT_INTEGER := -5;
69          N10 : SHORT_INTEGER := -10;
70          N11 : SHORT_INTEGER := -11;
71          N12 : SHORT_INTEGER := -12;
72          N13 : SHORT_INTEGER := -13;
73          N14 : SHORT_INTEGER := -14;
74          N50 : SHORT_INTEGER := -50;
75
76     BEGIN
77          IF I0 * SHORT_INTEGER'FIRST /= 0 THEN
78               FAILED ( "INCORRECT RESULT FOR I0 * " &
79                        "SHORT_INTEGER'FIRST" );
80          END IF;
81
82          IF I0 * SHORT_INTEGER'LAST /= 0 THEN
83               FAILED ( "INCORRECT RESULT FOR I0 * " &
84                        "SHORT_INTEGER'LAST" );
85          END IF;
86
87          IF N1 * SHORT_INTEGER'LAST + SHORT_INTEGER'LAST /= 0 THEN
88               FAILED ( "INCORRECT RESULT FOR N1 * " &
89                        "SHORT_INTEGER'LAST" );
90          END IF;
91
92          IF I3 * I1 /= I3 THEN
93               FAILED ( "INCORRECT RESULT FOR I3 * I1" );
94          END IF;
95
96          IF IDENT (I3) * IDENT (I1) /= I3 THEN
97               FAILED ( "INCORRECT RESULT FOR IDENT (I3) * " &
98                        "IDENT (I1)" );
99          END IF;
100
101          IF I2 * N1 /= N2 THEN
102               FAILED ( "INCORRECT RESULT FOR I2 * N1" );
103          END IF;
104
105          IF "*" (LEFT => I2, RIGHT => N1) /= N2 THEN
106               FAILED ( "INCORRECT RESULT FOR ""*"" (LEFT => I2, " &
107                        "RIGHT => N1)" );
108          END IF;
109
110          IF IDENT (I2) * IDENT (N1) /= N2 THEN
111               FAILED ( "INCORRECT RESULT FOR IDENT (I2) * " &
112                        "IDENT (N1)" );
113          END IF;
114
115          IF I5 * I2 * N5 /= N50 THEN
116               FAILED ( "INCORRECT RESULT FOR I5 * I2 * N5" );
117          END IF;
118
119          IF IDENT (N1) * IDENT (N5) /= I5 THEN
120               FAILED ( "INCORRECT RESULT FOR IDENT (N1) * " &
121                        "IDENT (N5)" );
122          END IF;
123
124          IF "*" (LEFT => IDENT (N1), RIGHT => IDENT (N5)) /=
125                 I5 THEN
126               FAILED ( "INCORRECT RESULT FOR ""*"" (LEFT => " &
127                        "IDENT (N1), RIGHT => IDENT (N5))" );
128          END IF;
129
130          IF IDENT (N1) * IDENT (I2) * IDENT (N5) /= I10
131             THEN
132               FAILED ( "INCORRECT RESULT FOR IDENT (N1) * " &
133                        "IDENT (I2) * IDENT (N5)" );
134          END IF;
135
136          IF (-IDENT (I0)) * IDENT (I10) /= I0 THEN
137               FAILED ( "INCORRECT RESULT FOR (-IDENT (I0)) * " &
138                        "IDENT (I10)" );
139          END IF;
140
141          IF I0 * I10 /= (-I0) THEN
142               FAILED ( "INCORRECT RESULT FOR I0 * I10" );
143          END IF;
144
145          IF "*" (LEFT => I0, RIGHT => I10) /= (-I0) THEN
146               FAILED ( "INCORRECT RESULT FOR ""*"" (LEFT => I0, " &
147                        "RIGHT => I10)" );
148          END IF;
149
150          IF IDENT (I10) / IDENT (I5) /= I2 THEN
151               FAILED ( "INCORRECT RESULT FOR IDENT (I10) " &
152                        "/ IDENT (I5)" );
153          END IF;
154
155          IF I11 / I5 /= I2 THEN
156               FAILED ( "INCORRECT RESULT FOR I11 / I5" );
157          END IF;
158
159          IF IDENT (I12) / IDENT (I5) /= I2 THEN
160               FAILED ( "INCORRECT RESULT FOR IDENT (I12) " &
161                        "/ IDENT (I5)" );
162          END IF;
163
164          IF "/" (LEFT => IDENT (I12), RIGHT => IDENT (I5)) /=
165                 I2 THEN
166               FAILED ( "INCORRECT RESULT FOR ""/"" (LEFT => " &
167                        "IDENT (I12), RIGHT => IDENT (I5))" );
168          END IF;
169
170          IF I13 / I5 /= I2 THEN
171               FAILED ( "INCORRECT RESULT FOR I13 / I5" );
172          END IF;
173
174          IF IDENT (I14) / IDENT (I5) /= I2 THEN
175               FAILED ( "INCORRECT RESULT FOR IDENT (I14) " &
176                        "/ IDENT (I5)" );
177          END IF;
178
179          IF I10 / N5 /= N2 THEN
180               FAILED ( "INCORRECT RESULT FOR I10 / N5" );
181          END IF;
182
183          IF "/" (LEFT => I10, RIGHT => N5) /= N2 THEN
184               FAILED ( "INCORRECT RESULT FOR ""/"" (LEFT => I10, " &
185                        "RIGHT => N5)" );
186          END IF;
187
188          IF IDENT (I11) / IDENT (N5) /= N2 THEN
189               FAILED ( "INCORRECT RESULT FOR IDENT (I11) " &
190                        "/ IDENT (N5)" );
191          END IF;
192
193          IF I12 / N5 /= N2 THEN
194               FAILED ( "INCORRECT RESULT FOR I12 / N5" );
195          END IF;
196
197          IF IDENT (I13) / IDENT (N5) /= N2 THEN
198               FAILED ( "INCORRECT RESULT FOR IDENT (I13) " &
199                        "/ IDENT (N5)" );
200          END IF;
201
202          IF I14 / N5 /= N2 THEN
203               FAILED ( "INCORRECT RESULT FOR I14 / N5" );
204          END IF;
205
206          IF IDENT (N10) / IDENT (I5) /= N2 THEN
207               FAILED ( "INCORRECT RESULT FOR IDENT (N10) " &
208                        "/ IDENT (I5)" );
209          END IF;
210
211          IF "/" (LEFT => IDENT (N10), RIGHT => IDENT (I5)) /=
212                 N2 THEN
213               FAILED ( "INCORRECT RESULT FOR ""/"" (LEFT => " &
214                        "IDENT (N10), RIGHT => IDENT (I5))" );
215          END IF;
216
217          IF N11 / I5 /= N2 THEN
218               FAILED ( "INCORRECT RESULT FOR N11 / I5" );
219          END IF;
220
221          IF IDENT (N12) / IDENT (I5) /= N2 THEN
222               FAILED ( "INCORRECT RESULT FOR IDENT (N12) " &
223                        "/ IDENT (I5)" );
224          END IF;
225
226          IF N13 / I5 /= N2 THEN
227               FAILED ( "INCORRECT RESULT FOR N13 / I5" );
228          END IF;
229
230          IF "/" (LEFT => N13, RIGHT => I5) /= N2 THEN
231               FAILED ( "INCORRECT RESULT FOR ""/"" (LEFT => N13, " &
232                        "RIGHT => I5)" );
233          END IF;
234
235          IF IDENT (N14) / IDENT (I5) /= N2 THEN
236               FAILED ( "INCORRECT RESULT FOR IDENT (N14) " &
237                        "/ IDENT (I5)" );
238          END IF;
239
240          IF N10 / N5 /= I2 THEN
241               FAILED ( "INCORRECT RESULT FOR N10 / N5" );
242          END IF;
243
244          IF IDENT (N11) / IDENT (N5) /= I2 THEN
245               FAILED ( "INCORRECT RESULT FOR IDENT (N11) " &
246                        "/ IDENT (N5)" );
247          END IF;
248
249          IF "/" (LEFT => IDENT (N11), RIGHT => IDENT (N5)) /=
250                 I2 THEN
251               FAILED ( "INCORRECT RESULT FOR ""/"" (LEFT => " &
252                        "IDENT (N11), RIGHT => IDENT (N5))" );
253          END IF;
254
255          IF N12 / N5 /= I2 THEN
256               FAILED ( "INCORRECT RESULT FOR N12 / N5" );
257          END IF;
258
259
260          IF IDENT (N13) / IDENT (N5) /= I2 THEN
261               FAILED ( "INCORRECT RESULT FOR IDENT (N13) " &
262                        "/ IDENT (N5)" );
263          END IF;
264
265          IF N14 / N5 /= I2 THEN
266               FAILED ( "INCORRECT RESULT FOR N14 / N5" );
267          END IF;
268
269          IF "/" (LEFT => N14, RIGHT => N5) /= I2 THEN
270               FAILED ( "INCORRECT RESULT FOR ""/"" (LEFT => N14, " &
271                        "RIGHT => N5)" );
272          END IF;
273
274          IF I0 / I5 /= (-I0) THEN
275               FAILED ( "INCORRECT RESULT FOR I0 / I5" );
276          END IF;
277
278          IF "/" (LEFT => I0, RIGHT => I5) /= (-I0) THEN
279               FAILED ( "INCORRECT RESULT FOR ""/"" (LEFT => I0, " &
280                        "RIGHT => I5)" );
281          END IF;
282
283          IF (-IDENT (I0)) / IDENT (I5) /= I0 THEN
284               FAILED ( "INCORRECT RESULT FOR (-IDENT (I0)) / " &
285                        "IDENT (I5)" );
286          END IF;
287
288     END;
289
290     RESULT;
291END C45502B;
292