1-- C59002B.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 JUMPS OUT OF COMPOUND STATEMENTS (OTHER THAN
26--    ACCEPT STATEMENTS) ARE POSSIBLE AND ARE CORRECTLY PERFORMED.
27
28
29-- FLOW OF CONTROL:   A ->  B ->  C ->  D ->   E ->  F ->  G ->  H .
30--                    |     |     |     |      |     |     |
31--                    IF   LOOP   CASE  BLOCK  IF   LOOP   CASE
32--                                             LOOP CASE   BLOCK
33
34
35--          A : GOTO B              L111 -> L311
36--          FAILURE                 L121
37--          E : GOTO F              L131 -> L331
38
39--          FAILURE                 L100
40
41--          C : GOTO D              L211 -> L411
42--          FAILURE                 L221
43--          G : GOTO H              L231
44
45--          FAILURE                 L200
46
47--          B : GOTO C              L311 -> L211
48--          FAILURE                 L321
49--          F : GOTO G              L331
50
51--          FAILURE                 L300
52
53--          D : GOTO E              L411 -> L131
54--          FAILURE                 L421
55--          H :                     L431 -> (OUT)
56
57--          PRINT RESULTS
58
59
60-- RM 06/05/81
61-- SPS 3/8/83
62
63WITH REPORT;
64PROCEDURE  C59002B  IS
65
66     USE  REPORT ;
67
68BEGIN
69
70     TEST( "C59002B" , "CHECK THAT ONE CAN JUMP OUT OF COMPOUND STATE" &
71                       "MENTS" );
72
73
74     DECLARE
75
76          FLOW_STRING : STRING(1..8) := "XXXXXXXX" ;
77          INDEX       : INTEGER      :=  1 ;
78
79     BEGIN
80
81          << L111 >>
82
83          FLOW_STRING(INDEX) := 'A' ;
84          INDEX              := INDEX + 1 ;
85
86          IF  FALSE  THEN
87               FAILED( "WRONG 'IF' BRANCH" );
88          ELSE
89               GOTO  L311 ;
90          END IF;
91
92          << L121 >>
93
94          FAILED( "AT L121  -  WRONGLY" );
95
96          << L131 >>
97
98          FLOW_STRING(INDEX) := 'E' ;
99          INDEX              := INDEX + 1 ;
100
101          IF  FALSE  THEN
102               FAILED( "WRONG 'IF' BRANCH" );
103          ELSE
104               FOR  J  IN  1..1  LOOP
105                    GOTO  L331 ;
106               END LOOP;
107          END IF;
108
109          << L100 >>
110
111          FAILED( "AT L100  -  WRONGLY" );
112
113          << L211 >>
114
115          FLOW_STRING(INDEX) := 'C' ;
116          INDEX              := INDEX + 1 ;
117
118          CASE  2  IS
119               WHEN  1  =>
120                    FAILED( "WRONG 'CASE' BRANCH" );
121               WHEN  OTHERS  =>
122                    GOTO  L411 ;
123          END CASE;
124
125          << L221 >>
126
127          FAILED( "AT L221  -  WRONGLY" );
128
129          << L231 >>
130
131          FLOW_STRING(INDEX) := 'G' ;
132          INDEX              := INDEX + 1 ;
133
134          CASE  2  IS
135               WHEN  1  =>
136                    FAILED( "WRONG 'CASE' BRANCH" );
137               WHEN  OTHERS  =>
138                    DECLARE
139                    BEGIN
140                         GOTO  L431 ;
141                    END ;
142          END CASE;
143
144          << L200 >>
145
146          FAILED( "AT L200  -  WRONGLY" );
147
148          << L311 >>
149
150          FLOW_STRING(INDEX) := 'B' ;
151          INDEX              := INDEX + 1 ;
152
153          FOR  I  IN  1..1  LOOP
154               GOTO  L211 ;
155          END LOOP;
156
157          << L321 >>
158
159          FAILED( "AT L321  -  WRONGLY" );
160
161          << L331 >>
162
163          FLOW_STRING(INDEX) := 'F' ;
164          INDEX              := INDEX + 1 ;
165
166          FOR  I  IN  1..1  LOOP
167               CASE  2  IS
168                    WHEN  1  =>
169                         FAILED( "WRONG 'CASE' BRANCH" );
170                    WHEN  OTHERS  =>
171                         GOTO  L231 ;
172               END CASE;
173          END LOOP;
174
175          << L300 >>
176
177          FAILED( "AT L300  -  WRONGLY" );
178
179          << L411 >>
180
181          FLOW_STRING(INDEX) := 'D' ;
182          INDEX              := INDEX + 1 ;
183
184          DECLARE
185               K : INTEGER := 17 ;
186          BEGIN
187               GOTO  L131 ;
188          END;
189
190          << L421 >>
191
192          FAILED( "AT L421  -  WRONGLY" );
193
194          << L431 >>
195
196          FLOW_STRING(INDEX) := 'H' ;
197
198
199          IF  FLOW_STRING /= "ABCDEFGH"  THEN
200               FAILED("WRONG FLOW OF CONTROL" );
201          END IF;
202
203     END ;
204
205
206     RESULT ;
207
208
209END C59002B;
210