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 THAT AN INSTANCE OF A GENERIC PROCEDURE MUST DECLARE A
27 -- PROCEDURE AND THAT AN INSTANCE OF A GENERIC FUNCTION MUST
28 -- DECLARE A FUNCTION. CHECK THAT SCALAR AND ACCESS PARAMETERS
32 -- (A) SCALAR PARAMETERS TO PROCEDURES.
33 -- (B) SCALAR PARAMETERS TO FUNCTIONS.
34 -- (C) ACCESS PARAMETERS TO PROCEDURES.
35 -- (D) ACCESS PARAMETERS TO FUNCTIONS.
38 -- EDWARD V. BERARD, 7 AUGUST 1990
39 -- CJJ 10/16/90 ADJUSTED LINES THAT WERE TOO LONG; REFORMATTED
40 -- HEADER TO CONFORM TO ACVC STANDARDS.
47 REPORT
.TEST
("CC3017C", "CHECK THAT AN INSTANCE OF A GENERIC " &
48 "PROCEDURE MUST DECLARE A PROCEDURE AND THAT AN " &
49 "INSTANCE OF A GENERIC FUNCTION MUST DECLARE A " &
50 "FUNCTION. CHECK THAT SCALAR AND ACCESS PARAMETERS " &
53 --------------------------------------------------
59 -- (A) SCALAR PARAMETERS TO PROCEDURES.
61 TYPE NUMBER
IS RANGE 0 .. 120 ;
67 TYPE SCALAR_ITEM
IS RANGE <> ;
69 PROCEDURE P
(P_IN
: IN SCALAR_ITEM
;
70 P_OUT
: OUT SCALAR_ITEM
;
71 P_IN_OUT
: IN OUT SCALAR_ITEM
) ;
73 PROCEDURE P
(P_IN
: IN SCALAR_ITEM
;
74 P_OUT
: OUT SCALAR_ITEM
;
75 P_IN_OUT
: IN OUT SCALAR_ITEM
) IS
81 STORE
:= P_IN
; -- SAVE VALUE OF P_IN AT PROC ENTRY.
84 IF (P_IN
/= STORE
) THEN
85 REPORT
.FAILED
("ASSIGNMENT TO SCALAR OUT " &
86 "PARAMETER CHANGES THE VALUE OF " &
88 STORE
:= P_IN
; -- RESET STORE FOR NEXT CASE.
91 P_IN_OUT
:= P_IN_OUT
+ 100;
92 IF (P_IN
/= STORE
) THEN
93 REPORT
.FAILED
("ASSIGNMENT TO SCALAR IN OUT " &
94 "PARAMETER CHANGES THE VALUE OF " &
96 STORE
:= P_IN
; -- RESET STORE FOR NEXT CASE.
100 IF (P_IN
/= STORE
) THEN
101 REPORT
.FAILED
("ASSIGNMENT TO SCALAR GLOBAL " &
102 "PARAMETER CHANGES THE VALUE OF " &
106 RAISE E
; -- CHECK EXCEPTION HANDLING.
109 PROCEDURE NEW_P
IS NEW P
(SCALAR_ITEM
=> NUMBER
) ;
111 BEGIN -- SCALAR_TO_PROCS
112 VALUE
:= 0; -- INITIALIZE VALUE SO VARIOUS CASES CAN BE DETECTED.
114 NEW_P
(P_IN
=> VALUE
,
118 REPORT
.FAILED
("EXCEPTION NOT RAISED - SCALARS TO PROCEDURES");
124 REPORT
.FAILED
("OUT ACTUAL SCALAR " &
125 "PARAMETER CHANGED GLOBAL VALUE");
127 REPORT
.FAILED
("IN OUT ACTUAL SCALAR " &
128 "PARAMETER CHANGED GLOBAL VALUE");
130 REPORT
.FAILED
("OUT AND IN OUT ACTUAL " &
131 "SCALAR PARAMETERS CHANGED " &
134 REPORT
.FAILED
("UNDETERMINED CHANGE TO " &
139 REPORT
.FAILED
("WRONG EXCEPTION RAISED - SCALARS TO PROCEDURES");
140 END SCALAR_TO_PROCS
;
142 --------------------------------------------------
148 -- (B) SCALAR PARAMETERS TO FUNCTIONS.
150 TYPE NUMBER
IS RANGE 0 .. 101 ;
156 TYPE ITEM
IS RANGE <> ;
158 FUNCTION F
(F_IN
: IN ITEM
) RETURN ITEM
;
160 FUNCTION F
(F_IN
: IN ITEM
) RETURN ITEM
IS
162 STORE
: ITEM
:= F_IN
;
167 IF (F_IN
/= STORE
) THEN
168 REPORT
.FAILED
("ASSIGNMENT TO SCALAR GLOBAL FUNCTION " &
169 "PARAMETER CHANGES THE VALUE OF " &
176 FUNCTION NEW_F
IS NEW F
(ITEM
=> NUMBER
) ;
178 BEGIN -- SCALAR_TO_FUNCS
180 SECOND
:= NEW_F
(FIRST
) ;
181 END SCALAR_TO_FUNCS
;
183 --------------------------------------------------
189 -- (C) ACCESS PARAMETERS TO PROCEDURES.
191 TYPE MONTH_TYPE
IS (JAN
, FEB
, MAR
, APR
, MAY
, JUN
, JUL
, AUG
,
192 SEP
, OCT
, NOV
, DEC
) ;
193 TYPE DAY_TYPE
IS RANGE 1 .. 31 ;
194 TYPE YEAR_TYPE
IS RANGE 1904 .. 2050 ;
201 TYPE DATE_ACCESS
IS ACCESS DATE
;
202 DATE_POINTER
: DATE_ACCESS
;
208 TYPE ITEM
IS PRIVATE ;
209 TYPE ACCESS_ITEM
IS ACCESS ITEM
;
211 PROCEDURE P
(P_IN
: IN ACCESS_ITEM
;
212 P_OUT
: OUT ACCESS_ITEM
;
213 P_IN_OUT
: IN OUT ACCESS_ITEM
) ;
215 PROCEDURE P
(P_IN
: IN ACCESS_ITEM
;
216 P_OUT
: OUT ACCESS_ITEM
;
217 P_IN_OUT
: IN OUT ACCESS_ITEM
) IS
219 STORE
: ACCESS_ITEM
;
223 STORE
:= P_IN
; -- SAVE VALUE OF P_IN AT PROC ENTRY.
225 DATE_POINTER
:= NEW DATE
'(YEAR => 1990,
228 IF (P_IN /= STORE) THEN
229 REPORT.FAILED ("ASSIGNMENT TO ACCESS GLOBAL " &
230 "PARAMETER CHANGES THE VALUE OF " &
232 STORE := P_IN; -- RESET STORE FOR NEXT CASE.
236 IF (P_IN /= STORE) THEN
237 REPORT.FAILED ("ASSIGNMENT TO ACCESS OUT " &
238 "PARAMETER CHANGES THE VALUE OF " &
240 STORE := P_IN; -- RESET STORE FOR NEXT CASE.
243 P_IN_OUT := NEW ITEM ;
244 IF (P_IN /= STORE) THEN
245 REPORT.FAILED ("ASSIGNMENT TO ACCESS IN OUT " &
246 "PARAMETER CHANGES THE VALUE OF " &
250 RAISE E; -- CHECK EXCEPTION HANDLING.
253 PROCEDURE NEW_P IS NEW P (ITEM => DATE,
254 ACCESS_ITEM => DATE_ACCESS) ;
256 BEGIN -- ACCESS_TO_PROCS
257 DATE_POINTER := NEW DATE'(MONTH
=> DEC
,
261 NEW_P
(P_IN
=> DATE_POINTER
,
262 P_OUT
=> DATE_POINTER
,
263 P_IN_OUT
=> DATE_POINTER
) ;
265 REPORT
.FAILED
("EXCEPTION NOT RAISED - ACCESS TO PROCEDURES");
268 IF (DATE_POINTER
.ALL /= (AUG
, 7, 1990)) THEN
269 REPORT
.FAILED
("OUT OR IN OUT ACTUAL PROCEDURE " &
270 "PARAMETER VALUE CHANGED DESPITE " &
274 REPORT
.FAILED
("WRONG EXCEPTION RAISED - ACCESS TO PROCEDURES");
275 END ACCESS_TO_PROCS
;
277 --------------------------------------------------
283 -- (D) ACCESS PARAMETERS TO FUNCTIONS.
285 TYPE MONTH_TYPE
IS (JAN
, FEB
, MAR
, APR
, MAY
, JUN
, JUL
, AUG
,
286 SEP
, OCT
, NOV
, DEC
) ;
287 TYPE DAY_TYPE
IS RANGE 1 .. 31 ;
288 TYPE YEAR_TYPE
IS RANGE 1904 .. 2050 ;
295 TYPE DATE_ACCESS
IS ACCESS DATE
;
296 DATE_POINTER
: DATE_ACCESS
;
297 NEXT_DATE
: DATE_ACCESS
;
301 TYPE ITEM
IS PRIVATE ;
302 TYPE ACCESS_ITEM
IS ACCESS ITEM
;
304 FUNCTION F
(F_IN
: IN ACCESS_ITEM
) RETURN ACCESS_ITEM
;
306 FUNCTION F
(F_IN
: IN ACCESS_ITEM
) RETURN ACCESS_ITEM
IS
308 STORE
: ACCESS_ITEM
:= F_IN
;
312 DATE_POINTER
:= NEW DATE
'(YEAR => 1990,
315 IF (F_IN /= STORE) THEN
316 REPORT.FAILED ("ASSIGNMENT TO ACCESS GLOBAL FUNCTION " &
317 "PARAMETER CHANGES THE VALUE OF " &
324 FUNCTION NEW_F IS NEW F (ITEM => DATE,
325 ACCESS_ITEM => DATE_ACCESS) ;
327 BEGIN -- ACCESS_TO_FUNCS
328 DATE_POINTER := NULL ;
329 NEXT_DATE := NEW_F(F_IN => DATE_POINTER) ;
330 END ACCESS_TO_FUNCS ;
332 --------------------------------------------------