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