1-- CC3605A.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-- OBJECTIVE: 26-- CHECK THAT SOME DIFFERENCES BETWEEN THE FORMAL AND THE 27-- ACTUAL SUBPROGRAMS DO NOT INVALIDATE A MATCH. 28-- 1) CHECK DIFFERENT PARAMETER NAMES. 29-- 2) CHECK DIFFERENT PARAMETER CONSTRAINTS. 30-- 3) CHECK ONE PARAMETER CONSTRAINED AND THE OTHER 31-- UNCONSTRAINED (WITH ARRAY, RECORD, ACCESS, AND 32-- PRIVATE TYPES). 33-- 4) CHECK PRESENCE OR ABSENCE OF AN EXPLICIT "IN" MODE 34-- INDICATOR. 35-- 5) DIFFERENT TYPE MARKS USED TO SPECIFY THE TYPE OF 36-- PARAMETERS. 37 38-- HISTORY: 39-- LDC 10/04/88 CREATED ORIGINAL TEST. 40 41PACKAGE CC3605A_PACK IS 42 43 SUBTYPE INT IS INTEGER RANGE -100 .. 100; 44 45 TYPE PRI_TYPE (SIZE : INT) IS PRIVATE; 46 47 SUBTYPE PRI_CONST IS PRI_TYPE (2); 48 49PRIVATE 50 51 TYPE ARR_TYPE IS ARRAY (INTEGER RANGE <>) OF BOOLEAN; 52 53 TYPE PRI_TYPE (SIZE : INT) IS 54 RECORD 55 SUB_A : ARR_TYPE (1 .. SIZE); 56 END RECORD; 57 58END CC3605A_PACK; 59 60 61WITH REPORT; 62USE REPORT; 63WITH CC3605A_PACK; 64USE CC3605A_PACK; 65 66PROCEDURE CC3605A IS 67 68 SUBTYPE ZERO_TO_TEN IS INTEGER 69 RANGE IDENT_INT (0) .. IDENT_INT (10); 70 71 SUBTYPE ONE_TO_FIVE IS INTEGER 72 RANGE IDENT_INT (1) .. IDENT_INT (5); 73 74 SUBPRG_ACT : BOOLEAN := FALSE; 75BEGIN 76 TEST 77 ("CC3605A", "CHECK THAT SOME DIFFERENCES BETWEEN THE " & 78 "FORMAL AND THE ACTUAL PARAMETERS DO NOT " & 79 "INVALIDATE A MATCH"); 80 81---------------------------------------------------------------------- 82-- DIFFERENT PARAMETER NAMES 83---------------------------------------------------------------------- 84 85 DECLARE 86 87 PROCEDURE ACT_PROC (DIFF_NAME_PARM : ONE_TO_FIVE) IS 88 BEGIN 89 SUBPRG_ACT := TRUE; 90 END ACT_PROC; 91 92 GENERIC 93 94 WITH PROCEDURE PASSED_PROC (PARM : ONE_TO_FIVE); 95 96 PROCEDURE GEN_PROC; 97 98 PROCEDURE GEN_PROC IS 99 BEGIN 100 PASSED_PROC (ONE_TO_FIVE'FIRST); 101 END GEN_PROC; 102 103 PROCEDURE INST_PROC IS NEW GEN_PROC (ACT_PROC); 104 BEGIN 105 INST_PROC; 106 IF NOT SUBPRG_ACT THEN 107 FAILED 108 ("DIFFERENT PARAMETER NAMES MADE MATCH INVALID"); 109 END IF; 110 END; 111 112---------------------------------------------------------------------- 113-- DIFFERENT PARAMETER CONSTRAINTS 114---------------------------------------------------------------------- 115 116 DECLARE 117 118 PROCEDURE ACT_PROC (PARM : ONE_TO_FIVE) IS 119 BEGIN 120 SUBPRG_ACT := TRUE; 121 END ACT_PROC; 122 123 GENERIC 124 125 WITH PROCEDURE PASSED_PROC (PARM : ZERO_TO_TEN); 126 127 PROCEDURE GEN_PROC; 128 129 PROCEDURE GEN_PROC IS 130 BEGIN 131 PASSED_PROC (ONE_TO_FIVE'FIRST); 132 END GEN_PROC; 133 134 PROCEDURE INST_PROC IS NEW GEN_PROC (ACT_PROC); 135 BEGIN 136 SUBPRG_ACT := FALSE; 137 INST_PROC; 138 IF NOT SUBPRG_ACT THEN 139 FAILED 140 ("DIFFERENT PARAMETER CONSTRAINTS MADE MATCH " & 141 "INVALID"); 142 END IF; 143 END; 144 145---------------------------------------------------------------------- 146-- ONE PARAMETER CONSTRAINED (ARRAY) 147---------------------------------------------------------------------- 148 149 DECLARE 150 151 TYPE ARR_TYPE IS ARRAY (INTEGER RANGE <>) OF BOOLEAN; 152 153 SUBTYPE ARR_CONST IS ARR_TYPE (ONE_TO_FIVE'FIRST .. 154 ONE_TO_FIVE'LAST); 155 156 PASSED_PARM : ARR_CONST := (OTHERS => TRUE); 157 158 PROCEDURE ACT_PROC (PARM : ARR_CONST) IS 159 BEGIN 160 SUBPRG_ACT := TRUE; 161 END ACT_PROC; 162 163 GENERIC 164 165 WITH PROCEDURE PASSED_PROC (PARM : ARR_TYPE); 166 167 PROCEDURE GEN_PROC; 168 169 PROCEDURE GEN_PROC IS 170 BEGIN 171 PASSED_PROC (PASSED_PARM); 172 END GEN_PROC; 173 174 PROCEDURE INST_PROC IS NEW GEN_PROC (ACT_PROC); 175 BEGIN 176 SUBPRG_ACT := FALSE; 177 INST_PROC; 178 IF NOT SUBPRG_ACT THEN 179 FAILED 180 ("ONE ARRAY PARAMETER CONSTRAINED MADE MATCH " & 181 "INVALID"); 182 END IF; 183 END; 184 185---------------------------------------------------------------------- 186-- ONE PARAMETER CONSTRAINED (RECORDS) 187---------------------------------------------------------------------- 188 189 DECLARE 190 191 TYPE REC_TYPE (BOL : BOOLEAN) IS 192 RECORD 193 SUB_A : INTEGER; 194 CASE BOL IS 195 WHEN TRUE => 196 DSCR_A : INTEGER; 197 198 WHEN FALSE => 199 DSCR_B : BOOLEAN; 200 201 END CASE; 202 END RECORD; 203 204 SUBTYPE REC_CONST IS REC_TYPE (TRUE); 205 206 PASSED_PARM : REC_CONST := (TRUE, 1, 2); 207 208 PROCEDURE ACT_PROC (PARM : REC_CONST) IS 209 BEGIN 210 SUBPRG_ACT := TRUE; 211 END ACT_PROC; 212 213 GENERIC 214 215 WITH PROCEDURE PASSED_PROC (PARM : REC_TYPE); 216 217 PROCEDURE GEN_PROC; 218 219 PROCEDURE GEN_PROC IS 220 BEGIN 221 PASSED_PROC (PASSED_PARM); 222 END GEN_PROC; 223 224 PROCEDURE INST_PROC IS NEW GEN_PROC (ACT_PROC); 225 BEGIN 226 SUBPRG_ACT := FALSE; 227 INST_PROC; 228 IF NOT SUBPRG_ACT THEN 229 FAILED 230 ("ONE RECORD PARAMETER CONSTRAINED MADE MATCH " & 231 "INVALID"); 232 END IF; 233 END; 234 235---------------------------------------------------------------------- 236-- ONE PARAMETER CONSTRAINED (ACCESS) 237---------------------------------------------------------------------- 238 239 DECLARE 240 241 TYPE ARR_TYPE IS ARRAY (INTEGER RANGE <>) OF BOOLEAN; 242 243 SUBTYPE ARR_CONST IS ARR_TYPE (ONE_TO_FIVE'FIRST .. 244 ONE_TO_FIVE'LAST); 245 246 TYPE ARR_ACC_TYPE IS ACCESS ARR_TYPE; 247 248 SUBTYPE ARR_ACC_CONST IS ARR_ACC_TYPE (1 .. 3); 249 250 PASSED_PARM : ARR_ACC_TYPE := NULL; 251 252 PROCEDURE ACT_PROC (PARM : ARR_ACC_CONST) IS 253 BEGIN 254 SUBPRG_ACT := TRUE; 255 END ACT_PROC; 256 257 GENERIC 258 259 WITH PROCEDURE PASSED_PROC (PARM : ARR_ACC_TYPE); 260 261 PROCEDURE GEN_PROC; 262 263 PROCEDURE GEN_PROC IS 264 BEGIN 265 PASSED_PROC (PASSED_PARM); 266 END GEN_PROC; 267 268 PROCEDURE INST_PROC IS NEW GEN_PROC (ACT_PROC); 269 BEGIN 270 SUBPRG_ACT := FALSE; 271 INST_PROC; 272 IF NOT SUBPRG_ACT THEN 273 FAILED 274 ("ONE ACCESS PARAMETER CONSTRAINED MADE MATCH " & 275 "INVALID"); 276 END IF; 277 END; 278 279---------------------------------------------------------------------- 280-- ONE PARAMETER CONSTRAINED (PRIVATE) 281---------------------------------------------------------------------- 282 283 DECLARE 284 PASSED_PARM : PRI_CONST; 285 286 PROCEDURE ACT_PROC (PARM : PRI_CONST) IS 287 BEGIN 288 SUBPRG_ACT := TRUE; 289 END ACT_PROC; 290 291 GENERIC 292 293 WITH PROCEDURE PASSED_PROC (PARM : PRI_TYPE); 294 295 PROCEDURE GEN_PROC; 296 297 PROCEDURE GEN_PROC IS 298 BEGIN 299 PASSED_PROC (PASSED_PARM); 300 END GEN_PROC; 301 302 PROCEDURE INST_PROC IS NEW GEN_PROC (ACT_PROC); 303 BEGIN 304 SUBPRG_ACT := FALSE; 305 INST_PROC; 306 IF NOT SUBPRG_ACT THEN 307 FAILED 308 ("ONE PRIVATE PARAMETER CONSTRAINED MADE MATCH " & 309 "INVALID"); 310 END IF; 311 END; 312 313---------------------------------------------------------------------- 314-- PRESENCE (OR ABSENCE) OF AN EXPLICIT "IN" MODE 315---------------------------------------------------------------------- 316 317 DECLARE 318 319 PROCEDURE ACT_PROC (PARM : INTEGER) IS 320 BEGIN 321 SUBPRG_ACT := TRUE; 322 END ACT_PROC; 323 324 GENERIC 325 326 WITH PROCEDURE PASSED_PROC (PARM : IN INTEGER); 327 328 PROCEDURE GEN_PROC; 329 330 PROCEDURE GEN_PROC IS 331 BEGIN 332 PASSED_PROC (1); 333 END GEN_PROC; 334 335 PROCEDURE INST_PROC IS NEW GEN_PROC (ACT_PROC); 336 BEGIN 337 SUBPRG_ACT := FALSE; 338 INST_PROC; 339 IF NOT SUBPRG_ACT THEN 340 FAILED 341 ("PRESENCE OF AN EXPLICIT 'IN' MODE MADE MATCH " & 342 "INVALID"); 343 END IF; 344 END; 345 346---------------------------------------------------------------------- 347-- DIFFERENT TYPE MARKS 348---------------------------------------------------------------------- 349 350 DECLARE 351 352 SUBTYPE MARK_1_TYPE IS INTEGER; 353 354 SUBTYPE MARK_2_TYPE IS INTEGER; 355 356 PROCEDURE ACT_PROC (PARM1 : IN MARK_1_TYPE) IS 357 BEGIN 358 SUBPRG_ACT := TRUE; 359 END ACT_PROC; 360 361 GENERIC 362 363 WITH PROCEDURE PASSED_PROC (PARM2 : MARK_2_TYPE); 364 365 PROCEDURE GEN_PROC; 366 367 PROCEDURE GEN_PROC IS 368 BEGIN 369 PASSED_PROC (1); 370 END GEN_PROC; 371 372 PROCEDURE INST_PROC IS NEW GEN_PROC (ACT_PROC); 373 BEGIN 374 SUBPRG_ACT := FALSE; 375 INST_PROC; 376 IF NOT SUBPRG_ACT THEN 377 FAILED ("DIFFERENT TYPE MARKS MADE MATCH INVALID"); 378 END IF; 379 END; 380 RESULT; 381END CC3605A; 382