| -- CC3225A.ADA |
| |
| -- Grant of Unlimited Rights |
| -- |
| -- Under contracts F33600-87-D-0337, F33600-84-D-0280, MDA903-79-C-0687, |
| -- F08630-91-C-0015, and DCA100-97-D-0025, the U.S. Government obtained |
| -- unlimited rights in the software and documentation contained herein. |
| -- Unlimited rights are defined in DFAR 252.227-7013(a)(19). By making |
| -- this public release, the Government intends to confer upon all |
| -- recipients unlimited rights equal to those held by the Government. |
| -- These rights include rights to use, duplicate, release or disclose the |
| -- released technical data and computer software in whole or in part, in |
| -- any manner and for any purpose whatsoever, and to have or permit others |
| -- to do so. |
| -- |
| -- DISCLAIMER |
| -- |
| -- ALL MATERIALS OR INFORMATION HEREIN RELEASED, MADE AVAILABLE OR |
| -- DISCLOSED ARE AS IS. THE GOVERNMENT MAKES NO EXPRESS OR IMPLIED |
| -- WARRANTY AS TO ANY MATTER WHATSOEVER, INCLUDING THE CONDITIONS OF THE |
| -- SOFTWARE, DOCUMENTATION OR OTHER INFORMATION RELEASED, MADE AVAILABLE |
| -- OR DISCLOSED, OR THE OWNERSHIP, MERCHANTABILITY, OR FITNESS FOR A |
| -- PARTICULAR PURPOSE OF SAID MATERIAL. |
| --* |
| -- OBJECTIVE: |
| -- CHECK THAT A FORMAL ACCESS TYPE DENOTES ITS ACTUAL |
| -- PARAMETER, AND THAT OPERATIONS OF THE FORMAL TYPE ARE THOSE |
| -- IDENTIFIED WITH THE CORRESPONDING OPERATIONS OF THE ACTUAL TYPE. |
| |
| -- HISTORY: |
| -- DHH 10/21/88 CREATED ORIGINAL TEST. |
| -- PWN 02/02/95 REMOVED INCONSISTENCIES WITH ADA 9X. |
| |
| WITH REPORT; USE REPORT; |
| PROCEDURE CC3225A IS |
| |
| GENERIC |
| TYPE NODE IS PRIVATE; |
| TYPE T IS ACCESS NODE; |
| PACKAGE P IS |
| SUBTYPE SUB_T IS T; |
| PAC_VAR : SUB_T; |
| END P; |
| |
| BEGIN |
| TEST ("CC3225A", "CHECK THAT A FORMAL ACCESS TYPE DENOTES ITS " & |
| "ACTUAL PARAMETER, AND THAT OPERATIONS OF THE " & |
| "FORMAL TYPE ARE THOSE IDENTIFIED WITH THE " & |
| "CORRESPONDING OPERATIONS OF THE ACTUAL TYPE"); |
| |
| DECLARE |
| SUBTYPE INT IS INTEGER RANGE 1 .. 3; |
| TYPE ARR IS ARRAY(1 .. 3) OF INTEGER; |
| TYPE ACC_ARR IS ACCESS ARR; |
| |
| Q : ACC_ARR := NEW ARR; |
| |
| PACKAGE P1 IS NEW P (ARR, ACC_ARR); |
| USE P1; |
| |
| BEGIN |
| PAC_VAR := NEW ARR'(1, 2, 3); |
| IF PAC_VAR'FIRST /= Q'FIRST THEN |
| FAILED("'FIRST ATTRIBUTE FAILED"); |
| END IF; |
| IF PAC_VAR'LAST /= Q'LAST THEN |
| FAILED("'LAST ATTRIBUTE FAILED"); |
| END IF; |
| IF PAC_VAR'FIRST(1) /= Q'FIRST(1) THEN |
| FAILED("'FIRST(N) ATTRIBUTE FAILED"); |
| END IF; |
| IF NOT (PAC_VAR'LAST(1) = Q'LAST(1)) THEN |
| FAILED("'LAST(N) ATTRIBUTE FAILED"); |
| END IF; |
| IF 2 NOT IN PAC_VAR'RANGE THEN |
| FAILED("'RANGE ATTRIBUTE FAILED"); |
| END IF; |
| IF 3 NOT IN PAC_VAR'RANGE(1) THEN |
| FAILED("'RANGE(N) ATTRIBUTE FAILED"); |
| END IF; |
| IF PAC_VAR'LENGTH /= Q'LENGTH THEN |
| FAILED("'LENGTH ATTRIBUTE FAILED"); |
| END IF; |
| IF PAC_VAR'LENGTH(1) /= Q'LENGTH(1) THEN |
| FAILED("'LENGTH(N) ATTRIBUTE FAILED"); |
| END IF; |
| |
| PAC_VAR.ALL := (1, 2, 3); |
| IF IDENT_INT(3) /= PAC_VAR(3) THEN |
| FAILED("ASSIGNMENT FAILED"); |
| END IF; |
| |
| IF SUB_T'(PAC_VAR) NOT IN SUB_T THEN |
| FAILED("QUALIFIED EXPRESSION FAILED"); |
| END IF; |
| |
| Q.ALL := PAC_VAR.ALL; |
| IF SUB_T(Q) = PAC_VAR THEN |
| FAILED("EXPLICIT CONVERSION FAILED"); |
| END IF; |
| IF Q(1) /= PAC_VAR(1) THEN |
| FAILED("INDEXING FAILED"); |
| END IF; |
| IF (1, 2) /= PAC_VAR(1 .. 2) THEN |
| FAILED("SLICE FAILED"); |
| END IF; |
| IF (1, 2) & PAC_VAR(3) /= PAC_VAR.ALL THEN |
| FAILED("CATENATION FAILED"); |
| END IF; |
| END; |
| |
| DECLARE |
| TASK TYPE TSK IS |
| ENTRY ONE; |
| END TSK; |
| |
| GENERIC |
| TYPE T IS ACCESS TSK; |
| PACKAGE P IS |
| SUBTYPE SUB_T IS T; |
| PAC_VAR : SUB_T; |
| END P; |
| |
| TYPE ACC_TSK IS ACCESS TSK; |
| |
| PACKAGE P1 IS NEW P(ACC_TSK); |
| USE P1; |
| |
| GLOBAL : INTEGER := 5; |
| |
| TASK BODY TSK IS |
| BEGIN |
| ACCEPT ONE DO |
| GLOBAL := 1; |
| END ONE; |
| END; |
| BEGIN |
| PAC_VAR := NEW TSK; |
| PAC_VAR.ONE; |
| IF GLOBAL /= 1 THEN |
| FAILED("TASK ENTRY SELECTION FAILED"); |
| END IF; |
| END; |
| |
| DECLARE |
| TYPE REC IS |
| RECORD |
| I : INTEGER; |
| B : BOOLEAN; |
| END RECORD; |
| |
| TYPE ACC_REC IS ACCESS REC; |
| |
| PACKAGE P1 IS NEW P (REC, ACC_REC); |
| USE P1; |
| |
| BEGIN |
| PAC_VAR := NEW REC'(4, (PAC_VAR IN ACC_REC)); |
| IF PAC_VAR.I /= IDENT_INT(4) AND NOT PAC_VAR.B THEN |
| FAILED("RECORD COMPONENT SELECTION FAILED"); |
| END IF; |
| END; |
| |
| DECLARE |
| TYPE REC(B : BOOLEAN := FALSE) IS |
| RECORD |
| NULL; |
| END RECORD; |
| |
| TYPE ACC_REC IS ACCESS REC; |
| |
| PACKAGE P1 IS NEW P (REC, ACC_REC); |
| USE P1; |
| |
| BEGIN |
| PAC_VAR := NEW REC'(B => PAC_VAR IN ACC_REC); |
| IF NOT PAC_VAR.B THEN |
| FAILED("DISCRIMINANT SELECTION FAILED"); |
| END IF; |
| END; |
| |
| RESULT; |
| END CC3225A; |