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