1-- C52102B.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 THE ASSIGNMENT OF OVERLAPPING SOURCE AND TARGET VARIABLES
26--    (INCLUDING ARRAYS AND SLICES IN VARIOUS COMBINATIONS) SATISFIES
27--    THE SEMANTICS OF "COPY" ASSIGNMENT.  (THIS TEST IS IN TWO PARTS,
28--    COVERING RESPECTIVELY STATIC AND DYNAMIC BOUNDS.)
29
30-- PART 2:  DYNAMIC BOUNDS
31
32
33-- RM 02/27/80
34-- SPS 2/18/83
35-- JBG 3/15/84
36-- JBG 6/9/84
37
38WITH REPORT;
39PROCEDURE  C52102B  IS
40
41     USE  REPORT;
42     IDENT_INT_0 : INTEGER := IDENT_INT(0);
43     IDENT_INT_1 : INTEGER := IDENT_INT (1);
44     IDENT_INT_2 : INTEGER := IDENT_INT (2);
45     IDENT_INT_3 : INTEGER := IDENT_INT (3);
46     IDENT_INT_4 : INTEGER := IDENT_INT (4);
47     IDENT_INT_5 : INTEGER := IDENT_INT (5);
48     IDENT_INT_6 : INTEGER := IDENT_INT (6);
49     IDENT_INT_8 : INTEGER := IDENT_INT (8);
50     IDENT_INT_9 : INTEGER := IDENT_INT (9);
51
52BEGIN
53
54
55     TEST( "C52102B" , "CHECK THAT THE ASSIGNMENT OF OVERLAPPING " &
56                       "SOURCE AND TARGET VARIABLES (INCLUDING " &
57                       "ARRAYS AND SLICES IN VARIOUS COMBINATIONS) " &
58                       "SATISFIES THE SEMANTICS OF ""COPY"" " &
59                       "ASSIGNMENT (PART 2: DYNAMIC BOUNDS)" );
60
61
62     -------------------------------------------------------------------
63     --------------------  ARRAYS OF INTEGERS  -------------------------
64
65     DECLARE
66          A   :   ARRAY( 1..IDENT_INT_4 ) OF INTEGER;
67
68     BEGIN
69          A   :=   (  11  ,  12  ,  13  ,  14  );
70          A   :=   (  1   , A(IDENT_INT_1) , A(IDENT_INT_2) ,
71                                              A(IDENT_INT_1) );
72          IF  A /= (  1   ,  11  ,  12  ,  11  )  THEN
73               FAILED( "WRONG VALUES  -  I1" );
74          END IF;
75
76          A   :=   (  11  ,  12  ,  13  ,  14  );
77          A   :=   ( A(IDENT_INT_4) , A(IDENT_INT_3) ,
78                                       A(IDENT_INT_4) ,  1   );
79          IF  A /= (  14  ,  13  ,  14  ,  1   )  THEN
80               FAILED( "WRONG VALUES  -  I2" );
81          END IF;
82
83     END;
84
85
86     DECLARE
87          A   :    ARRAY( -4..IDENT_INT_4 ) OF INTEGER;
88
89     BEGIN
90          A         :=  (  -4 , -3 , -2 , -1 , 100 , 1 , 2 , 3 , 4 );
91          A(-4..IDENT_INT_0)  :=  A(IDENT_INT_0..4);
92          IF    A   /=  ( 100 ,  1 ,  2 ,  3 ,  4  , 1 , 2 , 3 , 4 )
93          THEN
94               FAILED( "WRONG VALUES  -  I3" );
95          END IF;
96
97          A   :=  ( -4 , -3 , -2 , -1 , 100 ,  1 ,  2 ,  3 ,  4 );
98          A(IDENT_INT_0..4)   :=  A(-4..IDENT_INT_0);
99          IF    A   /=  ( -4 , -3 , -2 , -1 , -4  , -3 , -2 , -1 , 100 )
100          THEN
101               FAILED( "WRONG VALUES  -  I4" );
102          END IF;
103
104     END;
105
106
107     DECLARE
108          TYPE ARR IS ARRAY (INTEGER RANGE <>) OF INTEGER;
109          A   :  ARR (1..10);
110
111     BEGIN
112          A   :=  ( 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 );
113          A   :=  0  &  A(IDENT_INT_1..IDENT_INT_2)  &
114                        A(IDENT_INT_1..IDENT_INT_2)  &
115                         A(IDENT_INT_1..IDENT_INT_5);
116          IF   A  /=  ( 0 , 1 , 2 , 1 , 2 , 1 , 2 , 3 , 4 , 5  )
117          THEN
118               FAILED( "WRONG VALUES  -  I5" );
119          END IF;
120
121          A   :=  ( 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 );
122          A   :=  A(IDENT_INT_6..IDENT_INT_9)  &
123                  A(IDENT_INT_8..IDENT_INT_9)  &
124                  A(IDENT_INT_8..IDENT_INT_9)  &  0  &  0;
125          IF   A  /=  ( 6 , 7 , 8 , 9 , 8 , 9 , 8 , 9 , 0 , 0  )
126          THEN
127               FAILED( "WRONG VALUES  -  I6" );
128          END IF;
129
130     END;
131
132
133     -------------------------------------------------------------------
134     --------------------  ARRAYS OF BOOLEANS  -------------------------
135
136     DECLARE
137          A   :    ARRAY( 1..4 ) OF BOOLEAN;
138
139     BEGIN
140          A   :=   (  FALSE , TRUE , TRUE , FALSE );
141          A   :=   (  TRUE  , A(IDENT_INT_1) , A(IDENT_INT_2) ,
142                                                A(IDENT_INT_1)  );
143          IF  A /= (  TRUE , FALSE , TRUE , FALSE )
144          THEN
145               FAILED( "WRONG VALUES  -  B1" );
146          END IF;
147
148          A   :=   (  FALSE , TRUE , TRUE , FALSE );
149          A   :=   (  A(IDENT_INT_4)  , A(IDENT_INT_3) ,
150                                         A(IDENT_INT_4) ,  TRUE );
151          IF  A /= (  FALSE , TRUE , FALSE,  TRUE )
152          THEN
153               FAILED( "WRONG VALUES  -  B2" );
154          END IF;
155
156     END;
157
158
159     DECLARE
160          A   :    ARRAY( -IDENT_INT_4..4 ) OF BOOLEAN;
161
162     BEGIN
163          A  := (FALSE,FALSE,FALSE,FALSE,FALSE,TRUE, TRUE, TRUE,TRUE);
164          A(-IDENT_INT_4..IDENT_INT_0)  :=  A(IDENT_INT_0..4);
165          IF A /= (FALSE, TRUE, TRUE, TRUE, TRUE,TRUE, TRUE, TRUE,TRUE)
166          THEN
167               FAILED( "WRONG VALUES  -  B3" );
168          END IF;
169
170          A  := (FALSE,FALSE,FALSE,FALSE, TRUE,TRUE, TRUE, TRUE,TRUE);
171          A(IDENT_INT_0..4)   :=  A(-4..IDENT_INT_0);
172          IF A /= (FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE)
173          THEN
174               FAILED( "WRONG VALUES  -  B4" );
175          END IF;
176
177     END;
178
179
180     DECLARE
181          TYPE B_ARR IS ARRAY (INTEGER RANGE <>) OF BOOLEAN;
182          A  :  B_ARR (1..10);
183
184     BEGIN
185          A := (TRUE,FALSE,TRUE,FALSE,TRUE,FALSE,TRUE,FALSE,TRUE,FALSE);
186          A :=  FALSE  &  A(IDENT_INT_1..IDENT_INT_2)  &
187                          A(IDENT_INT_1..IDENT_INT_2)  &
188                          A(IDENT_INT_1..IDENT_INT_5);
189          IF A/=(FALSE,TRUE,FALSE,TRUE,FALSE,TRUE,FALSE,TRUE,FALSE,TRUE)
190          THEN
191               FAILED( "WRONG VALUES  -  B5" );
192          END IF;
193
194          A := (TRUE,FALSE,TRUE,FALSE,TRUE,FALSE,TRUE,FALSE,TRUE,FALSE);
195          A :=  A(IDENT_INT_6..IDENT_INT_9)  &
196                A(IDENT_INT_8..IDENT_INT_9)  &
197                A(IDENT_INT_8..IDENT_INT_9)  &      FALSE  &  TRUE;
198          IF A/=(FALSE,TRUE,FALSE,TRUE,FALSE,TRUE,FALSE,TRUE,FALSE,TRUE)
199          THEN
200               FAILED( "WRONG VALUES  -  B6" );
201          END IF;
202
203     END;
204
205
206     -------------------------------------------------------------------
207     --------------------  CHARACTER STRINGS  --------------------------
208
209     DECLARE
210          A   :    STRING( 1..4 );
211
212     BEGIN
213          A   :=   "ARGH";
214          A   :=   (  'Q' , A(IDENT_INT_1) , A(IDENT_INT_2) ,
215                                              A(IDENT_INT_1) );
216          IF  A /= "QARA"  THEN
217               FAILED( "WRONG VALUES  -  C1" );
218          END IF;
219
220          A   :=   "ARGH";
221          A   :=   ( A(IDENT_INT_4) , A(IDENT_INT_3) ,
222                     A(IDENT_INT_4) , 'X' );
223          IF  A /= "HGHX"  THEN
224               FAILED( "WRONG VALUES  -  C2" );
225          END IF;
226
227     END;
228
229
230     DECLARE
231          A   :    STRING( IDENT_INT(96)..104 );
232
233     BEGIN
234          A   :=  "APHRODITE";
235          A(IDENT_INT(96)..IDENT_INT(100))  :=  A(IDENT_INT(100)..
236                                                  IDENT_INT(104));
237          IF  A  /=  "ODITEDITE"   THEN
238               FAILED( "WRONG VALUES  -  C3" );
239          END IF;
240
241          A   :=  "APHRODITE";
242          A(IDENT_INT(100)..IDENT_INT(104)) :=  A(IDENT_INT(96)..
243                                                  IDENT_INT(100)) ;
244          IF  A  /=  "APHRAPHRO"   THEN
245               FAILED( "WRONG VALUES  -  C4" );
246          END IF;
247
248     END;
249
250
251     DECLARE
252          TYPE CH_ARR IS ARRAY (INTEGER RANGE <>) OF CHARACTER;
253          A  :  CH_ARR (IDENT_INT_1..9);
254
255     BEGIN
256          A   :=  "CAMBRIDGE";
257          A   :=  'S'  &  A(IDENT_INT_1..IDENT_INT_2)  &
258                          A(IDENT_INT_1..IDENT_INT_2)  &
259                          A(IDENT_INT_1..IDENT_INT_4);
260          IF  A  /=  "SCACACAMB"  THEN
261               FAILED( "WRONG VALUES  -  C5" );
262          END IF;
263
264          A   :=  "CAMBRIDGE";
265          A   :=  A(IDENT_INT_8..IDENT_INT_8)  &
266                  A(IDENT_INT_6..IDENT_INT_8)  &
267                  A(IDENT_INT_6..IDENT_INT_8)  &  "EA";
268          IF  A  /=  "GIDGIDGEA"  THEN
269               FAILED( "WRONG VALUES  -  C6" );
270          END IF;
271
272     END;
273
274
275     RESULT;
276
277
278END C52102B;
279