1-- C4A011A.ADA
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-- CHECK THAT NONSTATIC UNIVERSAL REAL EXPRESSIONS ARE EVALUATED WITH
26-- THE ACCURACY OF THE MOST PRECISE PREDEFINED FLOATING POINT TYPE
27-- (I. E., THE TYPE FOR WHICH 'DIGITS EQUALS SYSTEM.MAX_DIGITS).
28
29-- RJW 8/4/86
30
31WITH SYSTEM; USE SYSTEM;
32WITH REPORT; USE REPORT;
33
34PROCEDURE C4A011A IS
35
36     TYPE MAX_FLOAT IS DIGITS MAX_DIGITS;
37
38     C5L : CONSTANT := 16#0.AAAA8#;
39     C5U : CONSTANT := 16#0.AAAAC#;
40
41     C6L : CONSTANT := 16#0.AAAAA8#;
42     C6U : CONSTANT := 16#0.AAAAB0#;
43
44     C7L : CONSTANT := 16#0.AAAAAA8#;
45     C7U : CONSTANT := 16#0.AAAAAB0#;
46
47     C8L : CONSTANT := 16#0.AAAAAAA#;
48     C8U : CONSTANT := 16#0.AAAAAAB#;
49
50     C9L : CONSTANT := 16#0.AAAAAAAA#;
51     C9U : CONSTANT := 16#0.AAAAAAAC#;
52
53     C10L : CONSTANT := 16#0.AAAAAAAAA#;
54     C10U : CONSTANT := 16#0.AAAAAAAAC#;
55
56     C11L : CONSTANT := 16#0.AAAAAAAAA8#;
57     C11U : CONSTANT := 16#0.AAAAAAAAAC#;
58
59     C12L : CONSTANT := 16#0.AAAAAAAAAA8#;
60     C12U : CONSTANT := 16#0.AAAAAAAAAB0#;
61
62     C13L : CONSTANT := 16#0.AAAAAAAAAAA8#;
63     C13U : CONSTANT := 16#0.AAAAAAAAAAB0#;
64
65     C14L : CONSTANT := 16#0.AAAAAAAAAAAA#;
66     C14U : CONSTANT := 16#0.AAAAAAAAAAAB#;
67
68     C15L : CONSTANT := 16#0.AAAAAAAAAAAAA#;
69     C15U : CONSTANT := 16#0.AAAAAAAAAAAAC#;
70
71     C16L : CONSTANT := 16#0.AAAAAAAAAAAAAA#;
72     C16U : CONSTANT := 16#0.AAAAAAAAAAAAAC#;
73
74     C17L : CONSTANT := 16#0.AAAAAAAAAAAAAA8#;
75     C17U : CONSTANT := 16#0.AAAAAAAAAAAAAAC#;
76
77     C18L : CONSTANT := 16#0.AAAAAAAAAAAAAAA8#;
78     C18U : CONSTANT := 16#0.AAAAAAAAAAAAAAB0#;
79
80     C19L : CONSTANT := 16#0.AAAAAAAAAAAAAAAA8#;
81     C19U : CONSTANT := 16#0.AAAAAAAAAAAAAAAB0#;
82
83     C20L : CONSTANT := 16#0.AAAAAAAAAAAAAAAAA#;
84     C20U : CONSTANT := 16#0.AAAAAAAAAAAAAAAAB#;
85
86     C21L : CONSTANT := 16#0.AAAAAAAAAAAAAAAAAA#;
87     C21U : CONSTANT := 16#0.AAAAAAAAAAAAAAAAAC#;
88
89     C22L : CONSTANT := 16#0.AAAAAAAAAAAAAAAAAAA#;
90     C22U : CONSTANT := 16#0.AAAAAAAAAAAAAAAAAAC#;
91
92     C23L : CONSTANT := 16#0.AAAAAAAAAAAAAAAAAAA8#;
93     C23U : CONSTANT := 16#0.AAAAAAAAAAAAAAAAAAAC#;
94
95     C24L : CONSTANT := 16#0.AAAAAAAAAAAAAAAAAAAA8#;
96     C24U : CONSTANT := 16#0.AAAAAAAAAAAAAAAAAAAB0#;
97
98     C25L : CONSTANT := 16#0.AAAAAAAAAAAAAAAAAAAAA8#;
99     C25U : CONSTANT := 16#0.AAAAAAAAAAAAAAAAAAAAB0#;
100
101     C26L : CONSTANT := 16#0.AAAAAAAAAAAAAAAAAAAAAA#;
102     C26U : CONSTANT := 16#0.AAAAAAAAAAAAAAAAAAAAAB#;
103
104     C27L : CONSTANT := 16#0.AAAAAAAAAAAAAAAAAAAAAAA#;
105     C27U : CONSTANT := 16#0.AAAAAAAAAAAAAAAAAAAAAAC#;
106
107     C28L : CONSTANT := 16#0.AAAAAAAAAAAAAAAAAAAAAAAA#;
108     C28U : CONSTANT := 16#0.AAAAAAAAAAAAAAAAAAAAAAAC#;
109
110     C29L : CONSTANT := 16#0.AAAAAAAAAAAAAAAAAAAAAAAA8#;
111     C29U : CONSTANT := 16#0.AAAAAAAAAAAAAAAAAAAAAAAAC#;
112
113     C30L : CONSTANT := 16#0.AAAAAAAAAAAAAAAAAAAAAAAAA8#;
114     C30U : CONSTANT := 16#0.AAAAAAAAAAAAAAAAAAAAAAAAB0#;
115
116     C31L : CONSTANT := 16#0.AAAAAAAAAAAAAAAAAAAAAAAAAA#;
117     C31U : CONSTANT := 16#0.AAAAAAAAAAAAAAAAAAAAAAAAAB#;
118
119     C32L : CONSTANT := 16#0.AAAAAAAAAAAAAAAAAAAAAAAAAAA#;
120     C32U : CONSTANT := 16#0.AAAAAAAAAAAAAAAAAAAAAAAAAAB#;
121
122     C33L : CONSTANT := 16#0.AAAAAAAAAAAAAAAAAAAAAAAAAAAA#;
123     C33U : CONSTANT := 16#0.AAAAAAAAAAAAAAAAAAAAAAAAAAAC#;
124
125     C34L : CONSTANT := 16#0.AAAAAAAAAAAAAAAAAAAAAAAAAAAA8#;
126     C34U : CONSTANT := 16#0.AAAAAAAAAAAAAAAAAAAAAAAAAAAAC#;
127
128     C35L : CONSTANT := 16#0.AAAAAAAAAAAAAAAAAAAAAAAAAAAAA8#;
129     C35U : CONSTANT := 16#0.AAAAAAAAAAAAAAAAAAAAAAAAAAAAAC#;
130
131BEGIN
132
133     TEST ( "C4A011A", "CHECK THAT NONSTATIC UNIVERSAL REAL " &
134                       "EXPRESSIONS ARE EVALUATED WITH THE " &
135                       "ACCURACY OF THE MOST PRECISE PREDEFINED " &
136                       "FLOATING POINT TYPE (I. E., THE TYPE FOR " &
137                       "WHICH 'DIGITS EQUALS SYSTEM.MAX_DIGITS" );
138
139     CASE MAX_DIGITS IS
140          WHEN 5 =>
141               IF (2.0 * INTEGER'POS (IDENT_INT (1))) / 3.0 NOT IN
142                  C5L ..  C5U THEN
143                    FAILED ( "INCORRECT ACCURACY FOR A MAX_DIGITS " &
144                             "VALUE OF 5" );
145               END IF;
146          WHEN 6 =>
147               IF (2.0 * INTEGER'POS (IDENT_INT (1))) / 3.0 NOT IN
148                  C6L ..  C6U THEN
149                    FAILED ( "INCORRECT ACCURACY FOR A MAX_DIGITS " &
150                             "VALUE OF 6" );
151               END IF;
152          WHEN 7 =>
153               IF (2.0 * INTEGER'POS (IDENT_INT (1))) / 3.0 NOT IN
154                  C7L ..  C7U THEN
155                    FAILED ( "INCORRECT ACCURACY FOR A MAX_DIGITS " &
156                             "VALUE OF 7" );
157               END IF;
158          WHEN 8 =>
159               IF (2.0 * INTEGER'POS (IDENT_INT (1))) / 3.0 NOT IN
160                  C8L ..  C8U THEN
161                    FAILED ( "INCORRECT ACCURACY FOR A MAX_DIGITS " &
162                             "VALUE OF 8" );
163               END IF;
164          WHEN 9 =>
165               IF (2.0 * INTEGER'POS (IDENT_INT (1))) / 3.0 NOT IN
166                  C9L ..  C9U THEN
167                    FAILED ( "INCORRECT ACCURACY FOR A MAX_DIGITS " &
168                             "VALUE OF 9" );
169               END IF;
170          WHEN 10 =>
171               IF (2.0 * INTEGER'POS (IDENT_INT (1))) / 3.0 NOT IN
172                  C10L ..  C10U THEN
173                    FAILED ( "INCORRECT ACCURACY FOR A MAX_DIGITS " &
174                             "VALUE OF 10" );
175               END IF;
176          WHEN 11 =>
177               IF (2.0 * INTEGER'POS (IDENT_INT (1))) / 3.0 NOT IN
178                  C11L ..  C11U THEN
179                    FAILED ( "INCORRECT ACCURACY FOR A MAX_DIGITS " &
180                             "VALUE OF 11" );
181               END IF;
182          WHEN 12 =>
183               IF (2.0 * INTEGER'POS (IDENT_INT (1))) / 3.0 NOT IN
184                  C12L ..  C12U THEN
185                    FAILED ( "INCORRECT ACCURACY FOR A MAX_DIGITS " &
186                             "VALUE OF 12" );
187               END IF;
188          WHEN 13 =>
189               IF (2.0 * INTEGER'POS (IDENT_INT (1))) / 3.0 NOT IN
190                  C13L ..  C13U THEN
191                    FAILED ( "INCORRECT ACCURACY FOR A MAX_DIGITS " &
192                             "VALUE OF 13" );
193               END IF;
194          WHEN 14 =>
195               IF (2.0 * INTEGER'POS (IDENT_INT (1))) / 3.0 NOT IN
196                  C14L ..  C14U THEN
197                    FAILED ( "INCORRECT ACCURACY FOR A MAX_DIGITS " &
198                             "VALUE OF 14" );
199               END IF;
200          WHEN 15 =>
201               IF (2.0 * INTEGER'POS (IDENT_INT (1))) / 3.0 NOT IN
202                  C15L ..  C15U THEN
203                    FAILED ( "INCORRECT ACCURACY FOR A MAX_DIGITS " &
204                             "VALUE OF 15" );
205               END IF;
206          WHEN 16 =>
207               IF (2.0 * INTEGER'POS (IDENT_INT (1))) / 3.0 NOT IN
208                  C16L ..  C16U THEN
209                    FAILED ( "INCORRECT ACCURACY FOR A MAX_DIGITS " &
210                             "VALUE OF 16" );
211               END IF;
212          WHEN 17 =>
213               IF (2.0 * INTEGER'POS (IDENT_INT (1))) / 3.0 NOT IN
214                  C17L ..  C17U THEN
215                    FAILED ( "INCORRECT ACCURACY FOR A MAX_DIGITS " &
216                             "VALUE OF 17" );
217               END IF;
218          WHEN 18 =>
219               IF (2.0 * INTEGER'POS (IDENT_INT (1))) / 3.0 NOT IN
220                  C18L ..  C18U THEN
221                    FAILED ( "INCORRECT ACCURACY FOR A MAX_DIGITS " &
222                             "VALUE OF 18" );
223               END IF;
224          WHEN 19 =>
225               IF (2.0 * INTEGER'POS (IDENT_INT (1))) / 3.0 NOT IN
226                  C19L ..  C19U THEN
227                    FAILED ( "INCORRECT ACCURACY FOR A MAX_DIGITS " &
228                             "VALUE OF 19" );
229               END IF;
230          WHEN 20 =>
231               IF (2.0 * INTEGER'POS (IDENT_INT (1))) / 3.0 NOT IN
232                  C20L ..  C20U THEN
233                    FAILED ( "INCORRECT ACCURACY FOR A MAX_DIGITS " &
234                             "VALUE OF 20" );
235               END IF;
236          WHEN 21 =>
237               IF (2.0 * INTEGER'POS (IDENT_INT (1))) / 3.0 NOT IN
238                  C21L ..  C21U THEN
239                    FAILED ( "INCORRECT ACCURACY FOR A MAX_DIGITS " &
240                             "VALUE OF 21" );
241               END IF;
242          WHEN 22 =>
243               IF (2.0 * INTEGER'POS (IDENT_INT (1))) / 3.0 NOT IN
244                  C22L ..  C22U THEN
245                    FAILED ( "INCORRECT ACCURACY FOR A MAX_DIGITS " &
246                             "VALUE OF 22" );
247               END IF;
248          WHEN 23 =>
249               IF (2.0 * INTEGER'POS (IDENT_INT (1))) / 3.0 NOT IN
250                  C23L ..  C23U THEN
251                    FAILED ( "INCORRECT ACCURACY FOR A MAX_DIGITS " &
252                             "VALUE OF 23" );
253               END IF;
254          WHEN 24 =>
255               IF (2.0 * INTEGER'POS (IDENT_INT (1))) / 3.0 NOT IN
256                  C24L ..  C24U THEN
257                    FAILED ( "INCORRECT ACCURACY FOR A MAX_DIGITS " &
258                             "VALUE OF 24" );
259               END IF;
260          WHEN 25 =>
261               IF (2.0 * INTEGER'POS (IDENT_INT (1))) / 3.0 NOT IN
262                  C25L ..  C25U THEN
263                    FAILED ( "INCORRECT ACCURACY FOR A MAX_DIGITS " &
264                             "VALUE OF 25" );
265               END IF;
266          WHEN 26 =>
267               IF (2.0 * INTEGER'POS (IDENT_INT (1))) / 3.0 NOT IN
268                  C26L ..  C26U THEN
269                    FAILED ( "INCORRECT ACCURACY FOR A MAX_DIGITS " &
270                             "VALUE OF 26" );
271               END IF;
272          WHEN 27 =>
273               IF (2.0 * INTEGER'POS (IDENT_INT (1))) / 3.0 NOT IN
274                  C27L ..  C27U THEN
275                    FAILED ( "INCORRECT ACCURACY FOR A MAX_DIGITS " &
276                             "VALUE OF 27" );
277               END IF;
278          WHEN 28 =>
279               IF (2.0 * INTEGER'POS (IDENT_INT (1))) / 3.0 NOT IN
280                  C28L ..  C28U THEN
281                    FAILED ( "INCORRECT ACCURACY FOR A MAX_DIGITS " &
282                             "VALUE OF 28" );
283               END IF;
284          WHEN 29 =>
285               IF (2.0 * INTEGER'POS (IDENT_INT (1))) / 3.0 NOT IN
286                  C29L ..  C29U THEN
287                    FAILED ( "INCORRECT ACCURACY FOR A MAX_DIGITS " &
288                             "VALUE OF 29" );
289               END IF;
290          WHEN 30 =>
291               IF (2.0 * INTEGER'POS (IDENT_INT (1))) / 3.0 NOT IN
292                  C30L ..  C30U THEN
293                    FAILED ( "INCORRECT ACCURACY FOR A MAX_DIGITS " &
294                             "VALUE OF 30" );
295               END IF;
296          WHEN 31 =>
297               IF (2.0 * INTEGER'POS (IDENT_INT (1))) / 3.0 NOT IN
298                  C31L ..  C31U THEN
299                    FAILED ( "INCORRECT ACCURACY FOR A MAX_DIGITS " &
300                             "VALUE OF 31" );
301               END IF;
302          WHEN 32 =>
303               IF (2.0 * INTEGER'POS (IDENT_INT (1))) / 3.0 NOT IN
304                  C32L ..  C32U THEN
305                    FAILED ( "INCORRECT ACCURACY FOR A MAX_DIGITS " &
306                             "VALUE OF 32" );
307               END IF;
308          WHEN 33 =>
309               IF (2.0 * INTEGER'POS (IDENT_INT (1))) / 3.0 NOT IN
310                  C33L ..  C33U THEN
311                    FAILED ( "INCORRECT ACCURACY FOR A MAX_DIGITS " &
312                             "VALUE OF 33" );
313               END IF;
314          WHEN 34 =>
315               IF (2.0 * INTEGER'POS (IDENT_INT (1))) / 3.0 NOT IN
316                  C34L ..  C34U THEN
317                    FAILED ( "INCORRECT ACCURACY FOR A MAX_DIGITS " &
318                             "VALUE OF 34" );
319               END IF;
320          WHEN 35 =>
321               IF (2.0 * INTEGER'POS (IDENT_INT (1))) / 3.0 NOT IN
322                  C35L ..  C35U THEN
323                    FAILED ( "INCORRECT ACCURACY FOR A MAX_DIGITS " &
324                             "VALUE OF 35" );
325               END IF;
326          WHEN OTHERS =>
327               NOT_APPLICABLE ( "MAX_DIGITS OUT OF RANGE OF TEST.  " &
328                                "MAX_DIGITS = " &
329                                 INTEGER'IMAGE (MAX_DIGITS));
330     END CASE;
331
332     RESULT;
333
334END C4A011A;
335