-- CC1225A.TST -- 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, FOR A FORMAL ACCESS TYPE, THAT ALL ALLOWABLE OPERATIONS -- ARE IMPLICITLY DECLARED. -- MACRO SUBSTITUTION: -- $TASK_STORAGE_SIZE IS THE NUMBER OF STORAGE_UNITS REQUIRED FOR -- THE ACTIVATION OF A TASK. -- HISTORY: -- BCB 03/29/88 CREATED ORIGINAL TEST. -- RDH 04/09/90 ADDED 'STORAGE_SIZE CLAUSES. CHANGED EXTENSION TO -- 'TST'. -- LDC 09/26/90 REMOVED 'USE PACK' AFTER THE WITH SINCE IT ISN'T -- NEEDED, ADDED CHECK FOR NULL AFTER ASSIGMENT TO -- NULL, ADDED CHECKS FOR OTHER RELATION OPERATORS, -- CHANGED CHECK FOR 'ADDRESS TO A PROCEDURE CALL. -- LDC 10/13/90 CHANGED CHECK FOR 'SIZE TO ONLY CHECK FOR -- AVAILABILITY. CHANGED CHECK FOR 'ADDRESS TO A -- MEMBERSHIP TEST. -- PWN 01/31/95 REMOVED INCONSISTENCIES WITH ADA 9X. WITH REPORT; USE REPORT; WITH SYSTEM; USE SYSTEM; PROCEDURE CC1225A IS TASK_STORAGE_SIZE : CONSTANT := $TASK_STORAGE_SIZE; TYPE AI IS ACCESS INTEGER; TYPE ACCINTEGER IS ACCESS INTEGER; TYPE REC IS RECORD COMP : INTEGER; END RECORD; TYPE DISCREC (DISC : INTEGER := 1) IS RECORD COMPD : INTEGER; END RECORD; TYPE AREC IS ACCESS REC; TYPE ADISCREC IS ACCESS DISCREC; TYPE ARR IS ARRAY(1..2,1..2) OF INTEGER; TYPE ONEDIM IS ARRAY(1..10) OF INTEGER; TYPE AA IS ACCESS ARR; TYPE AONEDIM IS ACCESS ONEDIM; TYPE ENUM IS (ONE, TWO, THREE); TASK TYPE T IS ENTRY HERE(VAL : IN OUT INTEGER); END T; TYPE ATASK IS ACCESS T; TYPE ANOTHERTASK IS ACCESS T; FOR ANOTHERTASK'STORAGE_SIZE USE 2 * TASK_STORAGE_SIZE; TASK TYPE T1 IS ENTRY HERE1(ENUM)(VAL1 : IN OUT INTEGER); END T1; TYPE ATASK1 IS ACCESS T1; TASK BODY T IS BEGIN ACCEPT HERE(VAL : IN OUT INTEGER) DO VAL := VAL * 2; END HERE; END T; TASK BODY T1 IS BEGIN SELECT ACCEPT HERE1(ONE)(VAL1 : IN OUT INTEGER) DO VAL1 := VAL1 * 1; END HERE1; OR ACCEPT HERE1(TWO)(VAL1 : IN OUT INTEGER) DO VAL1 := VAL1 * 2; END HERE1; OR ACCEPT HERE1(THREE)(VAL1 : IN OUT INTEGER) DO VAL1 := VAL1 * 3; END HERE1; END SELECT; END T1; GENERIC TYPE FORM IS (<>); TYPE ACCFORM IS ACCESS FORM; TYPE ACC IS ACCESS INTEGER; TYPE ACCREC IS ACCESS REC; TYPE ACCDISCREC IS ACCESS DISCREC; TYPE ACCARR IS ACCESS ARR; TYPE ACCONE IS ACCESS ONEDIM; TYPE ACCTASK IS ACCESS T; TYPE ACCTASK1 IS ACCESS T1; TYPE ANOTHERTASK1 IS ACCESS T; PACKAGE P IS END P; PACKAGE BODY P IS AF : ACCFORM; TYPE DER_ACC IS NEW ACC; A, B : ACC; DERA : DER_ACC; R : ACCREC; DR : ACCDISCREC; C : ACCARR; D, E : ACCONE; F : ACCTASK; G : ACCTASK1; INT : INTEGER := 5; BEGIN TEST ("CC1225A", "CHECK, FOR A FORMAL ACCESS TYPE, THAT " & "ALL ALLOWABLE OPERATIONS ARE IMPLICITLY " & "DECLARED"); IF AF'ADDRESS NOT IN ADDRESS THEN FAILED ("IMPROPER RESULT FROM AF'ADDRESS TEST"); END IF; DECLARE AF_SIZE : INTEGER := ACCFORM'SIZE; BEGIN IF AF_SIZE NOT IN INTEGER THEN FAILED ("IMPROPER RESULT FROM AF'SIZE"); END IF; END; IF ANOTHERTASK1'STORAGE_SIZE < TASK_STORAGE_SIZE THEN FAILED ("IMPROPER VALUE FOR ANOTHERTASK1'STORAGE_SIZE"); END IF; B := NEW INTEGER'(25); A := B; IF A.ALL /= 25 THEN FAILED ("IMPROPER VALUE FOR ASSIGNMENT OF VARIABLE " & "OF A FORMAL ACCESS TYPE FROM ANOTHER " & "VARIABLE OF A FORMAL ACCESS TYPE"); END IF; A := NEW INTEGER'(10); IF A.ALL /= 10 THEN FAILED ("IMPROPER VALUE FOR VARIABLE OF FORMAL ACCESS " & "TYPE"); END IF; IF A NOT IN ACC THEN FAILED ("IMPROPER RESULT FROM MEMBERSHIP TEST"); END IF; B := ACC'(A); IF B.ALL /= 10 THEN FAILED ("IMPROPER VALUE FROM QUALIFICATION"); END IF; DERA := NEW INTEGER'(10); A := ACC(DERA); IF A.ALL /= IDENT_INT(10) THEN FAILED ("IMPROPER VALUE FROM EXPLICIT CONVERSION"); END IF; IF A.ALL > IDENT_INT(10) THEN FAILED ("IMPROPER VALUE USED IN LESS THAN"); END IF; IF A.ALL < IDENT_INT(10) THEN FAILED ("IMPROPER VALUE USED IN GREATER THAN"); END IF; IF A.ALL >= IDENT_INT(11) THEN FAILED ("IMPROPER VALUE USED IN LESS THAN OR EQUAL"); END IF; IF A.ALL <= IDENT_INT(9) THEN FAILED ("IMPROPER VALUE USED IN GREATER THAN OR EQUAL"); END IF; IF NOT (A.ALL + A.ALL = IDENT_INT(20)) THEN FAILED ("IMPROPER VALUE FROM ADDITION"); END IF; IF NOT (A.ALL - IDENT_INT(2) = IDENT_INT(8)) THEN FAILED ("IMPROPER VALUE FROM SUBTRACTION"); END IF; IF NOT (A.ALL * IDENT_INT(3) = IDENT_INT(30)) THEN FAILED ("IMPROPER VALUE FROM MULTIPLICATION"); END IF; IF NOT (A.ALL / IDENT_INT(3) = IDENT_INT(3)) THEN FAILED ("IMPROPER VALUE FROM DIVISION"); END IF; IF NOT (A.ALL MOD IDENT_INT(3) = IDENT_INT(1)) THEN FAILED ("IMPROPER VALUE FROM MODULO"); END IF; IF NOT (A.ALL REM IDENT_INT(7) = IDENT_INT(3)) THEN FAILED ("IMPROPER VALUE FROM REMAINDER"); END IF; IF NOT (A.ALL ** IDENT_INT(2) = IDENT_INT(100)) THEN FAILED ("IMPROPER VALUE FROM EXPONENTIATION"); END IF; IF NOT (+A.ALL = IDENT_INT(10)) THEN FAILED ("IMPROPER VALUE FROM IDENTITY"); END IF; IF NOT (-A.ALL = IDENT_INT(-10)) THEN FAILED ("IMPROPER VALUE FROM NEGATION"); END IF; A := NULL; IF A /= NULL THEN FAILED ("IMPROPER VALUE FROM ACCESS SET TO NULL"); END IF; IF A'ADDRESS NOT IN ADDRESS THEN FAILED ("IMPROPER RESULT FROM A'ADDRESS TEST"); END IF; DECLARE ACC_SIZE : INTEGER := ACC'SIZE; BEGIN IF ACC_SIZE NOT IN INTEGER THEN FAILED ("IMPROPER RESULT FROM ACC'SIZE"); END IF; END; R := NEW REC'(COMP => 5); IF NOT EQUAL(R.COMP,5) THEN FAILED ("IMPROPER VALUE FOR RECORD COMPONENT"); END IF; DR := NEW DISCREC'(DISC => 1, COMPD => 5); IF NOT EQUAL(DR.DISC,1) OR NOT EQUAL(DR.COMPD,5) THEN FAILED ("IMPROPER VALUES FOR DISCRIMINATED RECORD " & "COMPONENTS"); END IF; C := NEW ARR'(1 => (1,2), 2 => (3,4)); IF C(1,1) /= 1 OR C(1,2) /= 2 OR C(2,1) /= 3 OR C(2,2) /= 4 THEN FAILED ("IMPROPER ARRAY COMPONENT VALUES"); END IF; D := NEW ONEDIM'(1,2,3,4,5,6,7,8,9,10); E := NEW ONEDIM'(10,9,8,7,6,5,4,3,2,1); D(1..5) := E(1..5); IF D(1) /= 10 OR D(2) /= 9 OR D(3) /= 8 OR D(4) /= 7 OR D(5) /= 6 THEN FAILED ("IMPROPER RESULTS FROM SLICE ASSIGNMENT"); END IF; IF C'FIRST /= 1 OR C'FIRST(2) /= 1 THEN FAILED ("IMPROPER LOWER BOUNDS FOR CONSTRAINED ARRAY"); END IF; IF C'LAST /= 2 OR C'LAST(2) /= 2 THEN FAILED ("IMPROPER UPPER BOUNDS FOR CONSTRAINED ARRAY"); END IF; IF 1 NOT IN C'RANGE THEN FAILED ("IMPROPER RANGE FOR CONSTRAINED ARRAY - 1"); END IF; IF 1 NOT IN C'RANGE(2) THEN FAILED ("IMPROPER RANGE FOR CONSTRAINED ARRAY - 2"); END IF; IF C'LENGTH /= 2 THEN FAILED ("IMPROPER NUMBER OF VALUES FOR CONSTRAINED " & "ARRAY - 1"); END IF; IF C'LENGTH(2) /= 2 THEN FAILED ("IMPROPER NUMBER OF VALUES FOR CONSTRAINED " & "ARRAY - 2"); END IF; F := NEW T; F.HERE(INT); IF NOT EQUAL(INT,IDENT_INT(10)) THEN FAILED ("IMPROPER RESULTS FROM ENTRY SELECTION"); END IF; G := NEW T1; G.HERE1(TWO)(INT); IF NOT EQUAL(INT,IDENT_INT(20)) THEN FAILED ("IMPROPER RESULTS FROM FAMILY ENTRY SELECTION"); END IF; RESULT; END P; PACKAGE PACK IS NEW P(INTEGER,ACCINTEGER,AI,AREC,ADISCREC, AA,AONEDIM,ATASK,ATASK1,ANOTHERTASK); BEGIN NULL; END CC1225A;