1-- CD2D11A.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-- OBJECTIVE:
26--     CHECK THAT IF A SMALL SPECIFICATION IS GIVEN FOR A
27--     FIXED POINT TYPE, THEN ARITHMETIC OPERATIONS ON VALUES OF THE
28--     TYPE ARE NOT AFFECTED BY THE REPRESENTATION CLAUSE.
29
30-- HISTORY:
31--     BCB 09/01/87  CREATED ORIGINAL TEST.
32--     PWB 05/11/89  CHANGED EXTENSION FROM '.DEP' TO '.ADA'.
33
34WITH REPORT; USE REPORT;
35PROCEDURE CD2D11A IS
36
37     BASIC_SMALL : CONSTANT := 2.0 ** (-4);
38
39     TYPE BASIC_TYPE IS DELTA 2.0 ** (-4) RANGE -4.0 .. 4.0;
40
41     TYPE CHECK_TYPE IS DELTA 1.0 RANGE -4.0 .. 4.0;
42
43     FOR CHECK_TYPE'SMALL USE BASIC_SMALL;
44
45     CNEG1 : CHECK_TYPE := -3.5;
46     CNEG2 : CHECK_TYPE := CHECK_TYPE (-1.0/3.0);
47     CPOS1 : CHECK_TYPE := CHECK_TYPE (4.0/6.0);
48     CPOS2 : CHECK_TYPE :=  3.5;
49     CZERO : CHECK_TYPE;
50
51     TYPE ARRAY_TYPE IS ARRAY (0 .. 3) OF CHECK_TYPE;
52     CHARRAY : ARRAY_TYPE :=
53          (-3.5, CHECK_TYPE (-1.0/3.0), CHECK_TYPE (4.0/6.0), 3.5);
54
55     TYPE REC_TYPE IS RECORD
56          COMPN1 : CHECK_TYPE := -3.5;
57          COMPN2 : CHECK_TYPE := CHECK_TYPE (-1.0/3.0);
58          COMPP1 : CHECK_TYPE := CHECK_TYPE (4.0/6.0);
59          COMPP2 : CHECK_TYPE :=  3.5;
60     END RECORD;
61
62     CHREC : REC_TYPE;
63
64     FUNCTION IDENT (FX : CHECK_TYPE) RETURN CHECK_TYPE IS
65     BEGIN
66          IF EQUAL (3, 3) THEN
67               RETURN FX;
68          ELSE
69               RETURN 0.0;
70          END IF;
71     END IDENT;
72
73     PROCEDURE PROC (N1_IN, P1_IN      :        CHECK_TYPE;
74                     N2_INOUT,P2_INOUT : IN OUT CHECK_TYPE;
75                     CZOUT             :    OUT CHECK_TYPE) IS
76     BEGIN
77
78          IF IDENT (N1_IN) + P1_IN NOT IN
79                  -2.875 .. -2.8125 OR
80             P2_INOUT  - IDENT (P1_IN) NOT IN
81                  2.8125 .. 2.875 THEN
82               FAILED ("INCORRECT RESULTS FOR " &
83                       "BINARY ADDING OPERATORS - 1");
84          END IF;
85
86          IF +IDENT (N2_INOUT) NOT IN -0.375 .. -0.3125 OR
87             IDENT (-P1_IN) NOT IN -0.6875 .. -0.625 THEN
88               FAILED ("INCORRECT RESULTS FOR " &
89                       "UNARY ADDING OPERATORS - 1");
90          END IF;
91
92          IF CHECK_TYPE (N1_IN * IDENT (P1_IN)) NOT IN
93               -2.4375 .. -2.1875 OR
94             CHECK_TYPE (IDENT (N2_INOUT) / P2_INOUT) NOT IN
95               -0.125 .. -0.0625 THEN
96               FAILED ("INCORRECT RESULTS FOR " &
97                       "MULTIPLYING OPERATORS - 1");
98          END IF;
99
100          IF ABS IDENT (N2_INOUT) NOT IN 0.3125 .. 0.375 OR
101             IDENT (ABS P1_IN) NOT IN 0.625 .. 0.6875 THEN
102               FAILED ("INCORRECT RESULTS FOR " &
103                       "ABSOLUTE VALUE OPERATORS - 1");
104          END IF;
105
106          CZOUT := 0.0;
107
108     END PROC;
109
110BEGIN
111     TEST ("CD2D11A", "CHECK THAT IF A SMALL SPECIFICATION IS " &
112                      "GIVEN FOR AN FIXED POINT TYPE, THEN " &
113                      "ARITHMETIC OPERATIONS ON VALUES OF THE " &
114                      "TYPE ARE NOT AFFECTED BY THE REPRESENTATION " &
115                      "CLAUSE");
116
117     PROC (CNEG1, CPOS1, CNEG2, CPOS2, CZERO);
118
119     IF IDENT (CZERO) /= 0.0 THEN
120          FAILED ("INCORRECT VALUE FOR OUT PARAMETER");
121     END IF;
122
123     IF IDENT (CNEG1) + CPOS1 NOT IN -2.875 .. -2.8125 OR
124        CPOS2  - IDENT (CPOS1) NOT IN 2.8125 .. 2.875 THEN
125          FAILED ("INCORRECT RESULTS FOR BINARY ADDING OPERATORS - 2");
126     END IF;
127
128     IF +IDENT (CNEG2) NOT IN -0.375 .. -0.3125 OR
129        IDENT (-CPOS1) NOT IN -0.6875 .. -0.625 THEN
130          FAILED ("INCORRECT RESULTS FOR UNARY ADDING OPERATORS - 2");
131     END IF;
132
133     IF CHECK_TYPE (CNEG1 * IDENT (CPOS1)) NOT IN -2.4375 .. -2.1875 OR
134        CHECK_TYPE (IDENT (CNEG2) / CPOS2) NOT IN
135               -0.125 .. -0.0625 THEN
136          FAILED ("INCORRECT RESULTS FOR MULTIPLYING OPERATORS - 2");
137     END IF;
138
139     IF ABS IDENT (CNEG2) NOT IN 0.3125 .. 0.375 OR
140        IDENT (ABS CPOS1) NOT IN 0.625 .. 0.6875 THEN
141          FAILED ("INCORRECT RESULTS FOR ABSOLUTE VALUE " &
142                  "OPERATORS - 2");
143     END IF;
144
145     IF IDENT (CPOS1) NOT IN 0.625 .. 0.6875 OR
146            CNEG2 IN -0.25 .. 0.0 OR
147            IDENT (CNEG2) IN -1.0 .. -0.4375 THEN
148          FAILED ("INCORRECT RESULTS FOR MEMBERSHIP OPERATORS - 2");
149     END IF;
150
151     IF IDENT (CHARRAY (0)) + CHARRAY (2) NOT IN
152             -2.875 .. -2.8125 OR
153        CHARRAY (3)  - IDENT (CHARRAY (2)) NOT IN
154             2.8125 .. 2.875 THEN
155          FAILED ("INCORRECT RESULTS FOR BINARY ADDING OPERATORS - 3");
156     END IF;
157
158     IF +IDENT (CHARRAY (1)) NOT IN -0.375 .. -0.3125 OR
159        IDENT (-CHARRAY (2)) NOT IN -0.6875 .. -0.625 THEN
160          FAILED ("INCORRECT RESULTS FOR UNARY ADDING OPERATORS - 3");
161     END IF;
162
163     IF CHECK_TYPE (CHARRAY (0) * IDENT (CHARRAY (2))) NOT IN
164          -2.4375 .. -2.1875 OR
165        CHECK_TYPE (IDENT (CHARRAY (1)) / CHARRAY (3)) NOT IN
166          -0.125 .. -0.0625 THEN
167          FAILED ("INCORRECT RESULTS FOR MULTIPLYING OPERATORS - 3");
168     END IF;
169
170     IF ABS IDENT (CHARRAY (1)) NOT IN 0.3125 .. 0.375 OR
171        IDENT (ABS CHARRAY (2)) NOT IN 0.625 .. 0.6875 THEN
172          FAILED ("INCORRECT RESULTS FOR ABSOLUTE VALUE " &
173                  "OPERATORS - 3");
174     END IF;
175
176     IF IDENT (CHARRAY (2)) NOT IN 0.625 .. 0.6875 OR
177            CHARRAY (1) IN -0.25 .. 0.0 OR
178            IDENT (CHARRAY (1)) IN -1.0 .. -0.4375 THEN
179          FAILED ("INCORRECT RESULTS FOR MEMBERSHIP OPERATORS - 3");
180     END IF;
181
182     IF IDENT (CHREC.COMPN1) + CHREC.COMPP1 NOT IN
183             -2.875 .. -2.8125 OR
184        CHREC.COMPP2  - IDENT (CHREC.COMPP1) NOT IN
185             2.8125 .. 2.875 THEN
186          FAILED ("INCORRECT RESULTS FOR BINARY ADDING OPERATORS - 4");
187     END IF;
188
189     IF +IDENT (CHREC.COMPN2) NOT IN -0.375 .. -0.3125 OR
190        IDENT (-CHREC.COMPP1) NOT IN -0.6875 .. -0.625 THEN
191          FAILED ("INCORRECT RESULTS FOR UNARY ADDING OPERATORS - 4");
192     END IF;
193
194     IF CHECK_TYPE (CHREC.COMPN1 * IDENT (CHREC.COMPP1)) NOT IN
195          -2.4375 .. -2.1875 OR
196        CHECK_TYPE (IDENT (CHREC.COMPN2) / CHREC.COMPP2) NOT IN
197          -0.125 .. -0.0625 THEN
198          FAILED ("INCORRECT RESULTS FOR MULTIPLYING OPERATORS - 4");
199     END IF;
200
201     IF ABS IDENT (CHREC.COMPN2) NOT IN 0.3125 .. 0.375 OR
202        IDENT (ABS CHREC.COMPP1) NOT IN 0.625 .. 0.6875 THEN
203          FAILED ("INCORRECT RESULTS FOR ABSOLUTE VALUE " &
204                  "OPERATORS - 4");
205     END IF;
206
207     IF IDENT (CHREC.COMPP1) NOT IN 0.625 .. 0.6875 OR
208           CHREC.COMPN2 IN -0.25 .. 0.0 OR
209           IDENT (CHREC.COMPN2) IN -1.0 .. -0.4375 THEN
210          FAILED ("INCORRECT RESULTS FOR MEMBERSHIP OPERATORS - 4");
211     END IF;
212
213     RESULT;
214END CD2D11A;
215