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.
25 -- CHECK INSTANTIATIONS OF UNITS WITHIN GENERIC UNITS, E.G.,
26 -- TO SUPPORT ITERATORS. THIS TEST SPECIFICALLY CHECKS THAT A
27 -- NESTING LEVEL OF 2 IS SUPPORTED FOR GENERICS.
29 -- *** THIS IS THE MAIN PROGRAM. IT MUST BE COMPILED AFTER THE
30 -- *** SOURCE CODE IN FILES CC3019B0.ADA AND CC3019B1.ADA HAVE
34 -- EDWARD V. BERARD, 31 AUGUST 1990
37 WITH CC3019B1_STACK_CLASS
;
39 PROCEDURE CC3019B2M
IS
41 TYPE MONTH_TYPE
IS (JAN
, FEB
, MAR
, APR
, MAY
, JUN
, JUL
, AUG
,
43 TYPE DAY_TYPE
IS RANGE 1 .. 31 ;
44 TYPE YEAR_TYPE
IS RANGE 1904 .. 2050 ;
53 TODAY
: DATE
:= (MONTH
=> AUG
,
57 FIRST_DATE
: DATE
:= (MONTH
=> JUN
,
61 BIRTH_DATE
: DATE
:= (MONTH
=> OCT
,
65 WALL_DATE
: DATE
:= (MONTH
=> NOV
,
69 PROCEDURE ASSIGN
(THE_VALUE_OF_THIS_DATE
: IN OUT DATE
;
70 TO_THIS_DATE
: IN OUT DATE
) ;
72 FUNCTION IS_EQUAL
(LEFT
: IN DATE
;
73 RIGHT
: IN DATE
) RETURN BOOLEAN ;
76 NEW CC3019B1_STACK_CLASS
(ELEMENT
=> DATE
,
80 FIRST_DATE_STACK
: DATE_STACK
.STACK
;
81 SECOND_DATE_STACK
: DATE_STACK
.STACK
;
82 THIRD_DATE_STACK
: DATE_STACK
.STACK
;
84 FUNCTION "=" (LEFT
: IN DATE_STACK
.STACK
;
85 RIGHT
: IN DATE_STACK
.STACK
) RETURN BOOLEAN
86 RENAMES DATE_STACK
."=" ;
88 PROCEDURE ASSIGN
(THE_VALUE_OF_THIS_DATE
: IN OUT DATE
;
89 TO_THIS_DATE
: IN OUT DATE
) IS
93 TO_THIS_DATE
:= THE_VALUE_OF_THIS_DATE
;
97 FUNCTION IS_EQUAL
(LEFT
: IN DATE
;
98 RIGHT
: IN DATE
) RETURN BOOLEAN IS
102 RETURN (LEFT
.MONTH
= RIGHT
.MONTH
) AND
103 (LEFT
.DAY
= RIGHT
.DAY
) AND
104 (LEFT
.YEAR
= RIGHT
.YEAR
) ;
110 REPORT
.TEST
("CC3019B2M",
111 "CHECK INSTANTIATIONS OF UNITS WITHIN GENERIC " &
112 "UNITS, E.G., TO SUPPORT ITERATORS. THIS TEST " &
113 "SPECIFICALLY CHECKS THAT A NESTING LEVEL OF " &
114 "2 IS SUPPORTED FOR GENERICS.") ;
116 DATE_STACK
.CLEAR
(THIS_STACK
=> FIRST_DATE_STACK
) ;
117 IF DATE_STACK
.NUMBER_OF_ELEMENTS
118 (ON_THIS_STACK
=> FIRST_DATE_STACK
) /= 0 THEN
120 "IMPROPER VALUE RETURNED FROM NUMBER_OF_ELEMENTS - 1") ;
123 DATE_STACK
.PUSH
(THIS_ELEMENT
=> TODAY
,
124 ON_TO_THIS_STACK
=> FIRST_DATE_STACK
) ;
125 IF DATE_STACK
.NUMBER_OF_ELEMENTS
126 (ON_THIS_STACK
=> FIRST_DATE_STACK
) /= 1 THEN
128 "IMPROPER VALUE RETURNED FROM NUMBER_OF_ELEMENTS - 2") ;
131 DATE_STACK
.PUSH
(THIS_ELEMENT
=> FIRST_DATE
,
132 ON_TO_THIS_STACK
=> FIRST_DATE_STACK
) ;
133 IF DATE_STACK
.NUMBER_OF_ELEMENTS
134 (ON_THIS_STACK
=> FIRST_DATE_STACK
) /= 2 THEN
136 "IMPROPER VALUE RETURNED FROM NUMBER_OF_ELEMENTS - 3") ;
139 DATE_STACK
.PUSH
(THIS_ELEMENT
=> BIRTH_DATE
,
140 ON_TO_THIS_STACK
=> FIRST_DATE_STACK
) ;
141 IF DATE_STACK
.NUMBER_OF_ELEMENTS
142 (ON_THIS_STACK
=> FIRST_DATE_STACK
) /= 3 THEN
144 "IMPROPER VALUE RETURNED FROM NUMBER_OF_ELEMENTS - 4") ;
147 DATE_STACK
.POP
(THIS_ELEMENT
=> STORE_DATE
,
148 OFF_THIS_STACK
=> FIRST_DATE_STACK
) ;
149 IF DATE_STACK
.NUMBER_OF_ELEMENTS
150 (ON_THIS_STACK
=> FIRST_DATE_STACK
) /= 2 THEN
152 "IMPROPER VALUE RETURNED FROM NUMBER_OF_ELEMENTS - 5") ;
155 IF STORE_DATE
/= BIRTH_DATE
THEN
157 "IMPROPER VALUE REMOVED FROM STACK - 1") ;
160 DATE_STACK
.CLEAR
(THIS_STACK
=> SECOND_DATE_STACK
) ;
161 IF DATE_STACK
.NUMBER_OF_ELEMENTS
162 (ON_THIS_STACK
=> SECOND_DATE_STACK
) /= 0 THEN
164 "IMPROPER VALUE RETURNED FROM NUMBER_OF_ELEMENTS - 6") ;
167 DATE_STACK
.COPY
(THIS_STACK
=> FIRST_DATE_STACK
,
168 TO_THIS_STACK
=> SECOND_DATE_STACK
) ;
170 IF FIRST_DATE_STACK
/= SECOND_DATE_STACK
THEN
172 "PROBLEMS WITH COPY OR TEST FOR EQUALITY") ;
175 DATE_STACK
.POP
(THIS_ELEMENT
=> STORE_DATE
,
176 OFF_THIS_STACK
=> SECOND_DATE_STACK
) ;
177 DATE_STACK
.PUSH
(THIS_ELEMENT
=> WALL_DATE
,
178 ON_TO_THIS_STACK
=> SECOND_DATE_STACK
) ;
179 IF FIRST_DATE_STACK
= SECOND_DATE_STACK
THEN
181 "PROBLEMS WITH POP OR TEST FOR EQUALITY") ;
184 UNDERFLOW_EXCEPTION_TEST
:
186 BEGIN -- UNDERFLOW_EXCEPTION_TEST
188 DATE_STACK
.CLEAR
(THIS_STACK
=> THIRD_DATE_STACK
) ;
189 DATE_STACK
.POP
(THIS_ELEMENT
=> STORE_DATE
,
190 OFF_THIS_STACK
=> THIRD_DATE_STACK
) ;
191 REPORT
.FAILED
("UNDERFLOW EXCEPTION NOT RAISED") ;
195 WHEN DATE_STACK
.UNDERFLOW
=> NULL ; -- CORRECT EXCEPTION
198 REPORT
.FAILED
("INCORRECT EXCEPTION RAISED IN " &
199 "UNDERFLOW EXCEPTION TEST") ;
201 END UNDERFLOW_EXCEPTION_TEST
;
203 OVERFLOW_EXCEPTION_TEST
:
205 BEGIN -- OVERFLOW_EXCEPTION_TEST
207 DATE_STACK
.CLEAR
(THIS_STACK
=> THIRD_DATE_STACK
) ;
208 FOR INDEX
IN 1 .. 10 LOOP
209 DATE_STACK
.PUSH
( THIS_ELEMENT
=> TODAY
,
210 ON_TO_THIS_STACK
=> THIRD_DATE_STACK
) ;
213 DATE_STACK
.PUSH
(THIS_ELEMENT
=> TODAY
,
214 ON_TO_THIS_STACK
=> THIRD_DATE_STACK
) ;
215 REPORT
.FAILED
("OVERFLOW EXCEPTION NOT RAISED") ;
219 WHEN DATE_STACK
.OVERFLOW
=> NULL ; -- CORRECT EXCEPTION
222 REPORT
.FAILED
("INCORRECT EXCEPTION RAISED IN " &
223 "OVERFLOW EXCEPTION TEST") ;
225 END OVERFLOW_EXCEPTION_TEST
;
231 TYPE DATE_TABLE
IS ARRAY (POSITIVE RANGE 1 .. 10) OF DATE
;
233 FIRST_DATE_TABLE
: DATE_TABLE
;
235 TABLE_INDEX
: POSITIVE := 1 ;
237 PROCEDURE SHOW_DATES
(THIS_DATE
: IN DATE
;
238 CONTINUE
: OUT BOOLEAN) ;
240 PROCEDURE STORE_DATES
(THIS_DATE
: IN DATE
;
241 CONTINUE
: OUT BOOLEAN) ;
243 PROCEDURE SHOW_DATE_ITERATE
IS NEW
244 DATE_STACK
.ITERATE
(PROCESS
=> SHOW_DATES
) ;
246 PROCEDURE STORE_DATE_ITERATE
IS NEW
247 DATE_STACK
.ITERATE
(PROCESS
=> STORE_DATES
) ;
249 PROCEDURE SHOW_DATES
(THIS_DATE
: IN DATE
;
250 CONTINUE
: OUT BOOLEAN) IS
253 REPORT
.COMMENT
("THE MONTH IS " &
254 MONTH_TYPE
'IMAGE (THIS_DATE
.MONTH
)) ;
255 REPORT
.COMMENT
("THE DAY IS " &
256 DAY_TYPE
'IMAGE (THIS_DATE
.DAY
)) ;
257 REPORT
.COMMENT
("THE YEAR IS " &
258 YEAR_TYPE
'IMAGE (THIS_DATE
.YEAR
)) ;
264 PROCEDURE STORE_DATES
(THIS_DATE
: IN DATE
;
265 CONTINUE
: OUT BOOLEAN) IS
268 FIRST_DATE_TABLE
(TABLE_INDEX
) := THIS_DATE
;
269 TABLE_INDEX
:= TABLE_INDEX
+ 1 ;
277 REPORT
.COMMENT
("CONTENTS OF THE FIRST STACK") ;
278 SHOW_DATE_ITERATE
(OVER_THIS_STACK
=> FIRST_DATE_STACK
) ;
280 REPORT
.COMMENT
("CONTENTS OF THE SECOND STACK") ;
281 SHOW_DATE_ITERATE
(OVER_THIS_STACK
=> SECOND_DATE_STACK
) ;
283 STORE_DATE_ITERATE
(OVER_THIS_STACK
=> FIRST_DATE_STACK
) ;
284 IF (FIRST_DATE_TABLE
(1) /= TODAY
) OR
285 (FIRST_DATE_TABLE
(2) /= FIRST_DATE
) THEN
286 REPORT
.FAILED
("PROBLEMS WITH ITERATION - 1") ;
290 STORE_DATE_ITERATE
(OVER_THIS_STACK
=> SECOND_DATE_STACK
) ;
291 IF (FIRST_DATE_TABLE
(1) /= TODAY
) OR
292 (FIRST_DATE_TABLE
(2) /= WALL_DATE
) THEN
293 REPORT
.FAILED
("PROBLEMS WITH ITERATION - 2") ;