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.
26 -- CHECK, WHEN DERIVING FROM A FORMAL TYPE, THAT ALL THE PREDEFINED
27 -- OPERATIONS ASSOCIATED WITH THE CLASS OF THE FORMAL TYPE ARE
28 -- DECLARED FOR THE DERIVED TYPE.
31 -- BCB 04/04/88 CREATED ORIGINAL TEST.
33 WITH REPORT
; USE REPORT
;
34 WITH SYSTEM
; USE SYSTEM
;
39 TYPE FORM
IS RANGE <>;
41 TYPE DER_FORM
IS NEW FORM
;
42 FUNCTION IDENT_DER
(X
: DER_FORM
) RETURN DER_FORM
;
43 FUNCTION IDENT_ADR
(Y
: ADDRESS
) RETURN ADDRESS
;
48 DER_FORM_BASE_FIRST
: DER_FORM
;
49 DER_FORM_FIRST
: DER_FORM
;
50 DER_FORM_LAST
: DER_FORM
;
51 DER_FORM_SIZE
: DER_FORM
;
52 DER_FORM_WIDTH
: DER_FORM
;
53 DER_FORM_POS
: DER_FORM
;
54 DER_FORM_VAL
: DER_FORM
;
55 DER_FORM_SUCC
: DER_FORM
;
56 DER_FORM_PRED
: DER_FORM
;
57 DER_FORM_IMAGE
: STRING(1..5);
58 DER_FORM_VALUE
: DER_FORM
;
59 DER_VAR_SIZE
: DER_FORM
;
60 DER_VAR_ADDRESS
: ADDRESS
;
61 DER_EQUAL
, DER_UNEQUAL
: DER_FORM
;
62 DER_GREATER
: DER_FORM
;
63 DER_MOD
, DER_REM
: DER_FORM
;
64 DER_ABS
, DER_EXP
: DER_FORM
;
66 FUNCTION IDENT_DER
(X
: DER_FORM
) RETURN DER_FORM
IS
73 FUNCTION IDENT_ADR
(Y
: ADDRESS
) RETURN ADDRESS
IS
82 TEST
("CC1227A", "CHECK, WHEN DERIVING FROM A FORMAL TYPE, " &
83 "THAT ALL THE PREDEFINED OPERATIONS " &
84 "ASSOCIATED WITH THE CLASS OF THE FORMAL " &
85 "TYPE ARE DECLARED FOR THE DERIVED TYPE");
87 DER_VAR
:= IDENT_DER
(1);
90 FAILED
("IMPROPER VALUE FROM ASSIGNMENT OPERATION");
93 IF DER_VAR
NOT IN DER_FORM
THEN
94 FAILED
("IMPROPER RESULT FROM MEMBERSHIP TEST");
97 DER_VAR
:= DER_FORM
'(2);
99 IF DER_VAR /= IDENT_DER(2) THEN
100 FAILED ("IMPROPER RESULT FROM QUALIFICATION");
103 DER_VAR := DER_FORM(INT);
105 IF DER_VAR /= IDENT_DER(5) THEN
106 FAILED ("IMPROPER RESULT FROM EXPLICIT CONVERSION - " &
110 DER_VAR := DER_FORM(3.0);
112 IF DER_VAR /= IDENT_DER(3) THEN
113 FAILED ("IMPROPER RESULT FROM EXPLICIT CONVERSION - " &
119 IF DER_VAR /= IDENT_DER(1000) THEN
120 FAILED ("IMPROPER RESULT FROM IMPLICIT CONVERSION");
123 DER_FORM_BASE_FIRST := DER_FORM'BASE'FIRST
;
125 DER_FORM_FIRST
:= DER_FORM
'FIRST;
127 IF DER_FORM_BASE_FIRST
/= IDENT_DER
(DER_FORM_FIRST
) THEN
128 FAILED
("IMPROPER VALUE FOR DER_FORM'BASE'FIRST");
131 IF DER_FORM_FIRST
/= IDENT_DER
(DER_FORM
'FIRST) THEN
132 FAILED
("IMPROPER VALUE FOR DER_FORM'FIRST");
135 DER_FORM_LAST
:= DER_FORM
'LAST;
137 IF DER_FORM_LAST
/= IDENT_DER
(DER_FORM
'LAST) THEN
138 FAILED
("IMPROPER VALUE FOR DER_FORM'LAST");
141 DER_FORM_SIZE
:= DER_FORM
(DER_FORM
'SIZE);
143 IF DER_FORM_SIZE
/= IDENT_DER
(DER_FORM
(DER_FORM
'SIZE)) THEN
144 FAILED
("IMPROPER VALUE FOR DER_FORM'SIZE");
147 DER_FORM_WIDTH
:= DER_FORM
(DER_FORM
'WIDTH);
149 IF DER_FORM_WIDTH
/= IDENT_DER
(DER_FORM
(DER_FORM
'WIDTH)) THEN
150 FAILED
("IMPROPER VALUE FOR DER_FORM'WIDTH");
153 DER_FORM_POS
:= DER_FORM
(DER_FORM
'POS(DER_VAR
));
155 IF DER_FORM_POS
/= IDENT_DER
(DER_FORM
(DER_FORM
'POS(DER_VAR
)))
156 THEN FAILED
("IMPROPER VALUE FOR DER_FORM'POS(DER_VAR)");
159 DER_FORM_VAL
:= DER_FORM
'VAL(DER_VAR
);
161 IF DER_FORM_VAL
/= IDENT_DER
(DER_FORM
'VAL(DER_VAR
)) THEN
162 FAILED
("IMPROPER VALUE FOR DER_FORM'VAL(DER_VAR)");
165 DER_FORM_SUCC
:= DER_FORM
'SUCC(DER_VAR
);
167 IF DER_FORM_SUCC
/= IDENT_DER
(DER_FORM
'SUCC(DER_VAR
)) THEN
168 FAILED
("IMPROPER VALUE FOR DER_FORM'SUCC(DER_VAR)");
171 DER_FORM_PRED
:= DER_FORM
'PRED(DER_VAR
);
173 IF DER_FORM_PRED
/= IDENT_DER
(DER_FORM
'PRED(DER_VAR
)) THEN
174 FAILED
("IMPROPER VALUE FOR DER_FORM'PRED(DER_VAR)");
177 DER_FORM_IMAGE
:= DER_FORM
'IMAGE(DER_VAR
);
179 IF DER_FORM_IMAGE
(2..5) /= "1000" THEN
180 FAILED
("IMPROPER VALUE FOR DER_FORM'IMAGE(DER_VAR)");
183 DER_FORM_VALUE
:= DER_FORM
'VALUE(DER_FORM_IMAGE
);
185 IF DER_FORM_VALUE
/= IDENT_DER
(1000) THEN
186 FAILED
("IMPROPER VALUE FOR DER_FORM'VALUE" &
190 DER_VAR_SIZE
:= DER_FORM
(DER_VAR
'SIZE);
192 IF DER_VAR_SIZE
/= IDENT_DER
(DER_FORM
(DER_VAR
'SIZE)) THEN
193 FAILED
("IMPROPER VALUE FOR DER_VAR'SIZE");
196 DER_VAR_ADDRESS
:= DER_VAR
'ADDRESS;
198 IF DER_VAR_ADDRESS
/= IDENT_ADR
(DER_VAR
'ADDRESS) THEN
199 FAILED
("IMPROPER VALUE FOR DER_VAR'ADDRESS");
202 DER_EQUAL
:= IDENT_DER
(1000);
204 IF DER_VAR
/= DER_EQUAL
THEN
205 FAILED
("IMPROPER RESULT FROM INEQUALITY OPERATOR");
208 DER_UNEQUAL
:= IDENT_DER
(500);
210 IF DER_VAR
= DER_UNEQUAL
THEN
211 FAILED
("IMPROPER RESULT FROM EQUALITY OPERATOR");
214 IF DER_VAR
< DER_UNEQUAL
THEN
215 FAILED
("IMPROPER RESULT FROM LESS THAN OPERATOR");
218 IF DER_VAR
<= DER_UNEQUAL
THEN
219 FAILED
("IMPROPER RESULT FROM LESS THAN OR EQUAL TO " &
223 DER_GREATER
:= IDENT_DER
(1500);
225 IF DER_VAR
> DER_GREATER
THEN
226 FAILED
("IMPROPER RESULT FROM GREATER THAN OPERATOR");
229 IF DER_VAR
>= DER_GREATER
THEN
230 FAILED
("IMPROPER RESULT FROM GREATER THAN OR EQUAL " &
234 DER_VAR
:= DER_VAR
+ DER_EQUAL
;
236 IF DER_VAR
/= IDENT_DER
(2000) THEN
237 FAILED
("IMPROPER RESULT FROM ADDITION OPERATOR");
240 DER_VAR
:= DER_VAR
- DER_EQUAL
;
242 IF DER_VAR
/= IDENT_DER
(1000) THEN
243 FAILED
("IMPROPER RESULT FROM SUBTRACTION OPERATOR");
246 DER_VAR
:= DER_VAR
* IDENT_DER
(2);
248 IF DER_VAR
/= IDENT_DER
(2000) THEN
249 FAILED
("IMPROPER RESULT FROM MULTIPLICATION OPERATOR");
252 DER_VAR
:= DER_VAR
/ IDENT_DER
(2);
254 IF DER_VAR
/= IDENT_DER
(1000) THEN
255 FAILED
("IMPROPER RESULT FROM DIVISION OPERATOR");
258 DER_MOD
:= DER_GREATER
MOD DER_VAR
;
260 IF DER_MOD
/= IDENT_DER
(500) THEN
261 FAILED
("IMPROPER RESULT FROM MOD OPERATOR");
264 DER_REM
:= DER_GREATER
REM DER_VAR
;
266 IF DER_REM
/= IDENT_DER
(500) THEN
267 FAILED
("IMPROPER RESULT FROM REM OPERATOR");
270 DER_ABS
:= ABS(IDENT_DER
(-1500));
272 IF DER_ABS
/= IDENT_DER
(DER_GREATER
) THEN
273 FAILED
("IMPROPER RESULT FROM ABS OPERATOR");
276 DER_EXP
:= IDENT_DER
(2) ** IDENT_INT
(2);
278 IF DER_EXP
/= IDENT_DER
(4) THEN
279 FAILED
("IMPROPER RESULT FROM EXPONENTIATION OPERATOR");
285 PACKAGE PACK
IS NEW P
(INTEGER);