| -- C45282B.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. |
| --* |
| -- CHECK THAT IN AND NOT IN ARE EVALUATED CORRECTLY FOR : |
| -- D) ACCESS TO RECORD, PRIVATE, AND LIMITED PRIVATE TYPES WITH |
| -- DISCRIMINANTS (WITH AND WITHOUT DEFAULT VALUES), WHERE THE |
| -- TYPE MARK DENOTES A CONSTRAINED AND UNCONSTRAINED TYPE; |
| -- E) ACCESS TO TASK TYPES. |
| |
| -- TBN 8/8/86 |
| |
| WITH REPORT; USE REPORT; |
| PROCEDURE C45282B IS |
| |
| SUBTYPE INT IS INTEGER RANGE 1 .. 5; |
| |
| PACKAGE P IS |
| TYPE PRI_REC1 (D : INT) IS PRIVATE; |
| TYPE PRI_REC2 (D : INT := 2) IS PRIVATE; |
| FUNCTION INIT_PREC1 (A : INT; B : STRING) RETURN PRI_REC1; |
| FUNCTION INIT_PREC2 (A : INT; B : STRING) RETURN PRI_REC2; |
| TYPE LIM_REC1 (D : INT) IS LIMITED PRIVATE; |
| TYPE ACC_LIM1 IS ACCESS LIM_REC1; |
| SUBTYPE ACC_SUB_LIM1 IS ACC_LIM1 (2); |
| PROCEDURE ASSIGN_LIM1 (A : ACC_LIM1; B : INT; C : STRING); |
| TYPE LIM_REC2 (D : INT := 2) IS LIMITED PRIVATE; |
| TYPE ACC_LIM2 IS ACCESS LIM_REC2; |
| SUBTYPE ACC_SUB_LIM2 IS ACC_LIM2 (2); |
| PROCEDURE ASSIGN_LIM2 (A : ACC_LIM2; B : INT; C : STRING); |
| PRIVATE |
| TYPE PRI_REC1 (D : INT) IS |
| RECORD |
| STR : STRING (1 .. D); |
| END RECORD; |
| TYPE PRI_REC2 (D : INT := 2) IS |
| RECORD |
| STR : STRING (1 .. D); |
| END RECORD; |
| TYPE LIM_REC1 (D : INT) IS |
| RECORD |
| STR : STRING (1 .. D); |
| END RECORD; |
| TYPE LIM_REC2 (D : INT := 2) IS |
| RECORD |
| STR : STRING (1 .. D); |
| END RECORD; |
| END P; |
| |
| USE P; |
| |
| TYPE DIS_REC1 (D : INT) IS |
| RECORD |
| STR : STRING (1 .. D); |
| END RECORD; |
| TYPE DIS_REC2 (D : INT := 5) IS |
| RECORD |
| STR : STRING (D .. 8); |
| END RECORD; |
| |
| TYPE ACC1_REC1 IS ACCESS DIS_REC1; |
| SUBTYPE ACC2_REC1 IS ACC1_REC1 (2); |
| TYPE ACC1_REC2 IS ACCESS DIS_REC2; |
| SUBTYPE ACC2_REC2 IS ACC1_REC2 (2); |
| REC1 : ACC1_REC1; |
| REC2 : ACC2_REC1; |
| REC3 : ACC1_REC2; |
| REC4 : ACC2_REC2; |
| TYPE ACC_PREC1 IS ACCESS PRI_REC1; |
| SUBTYPE ACC_SREC1 IS ACC_PREC1 (2); |
| REC5 : ACC_PREC1; |
| REC6 : ACC_SREC1; |
| TYPE ACC_PREC2 IS ACCESS PRI_REC2; |
| SUBTYPE ACC_SREC2 IS ACC_PREC2 (2); |
| REC7 : ACC_PREC2; |
| REC8 : ACC_SREC2; |
| REC9 : ACC_LIM1; |
| REC10 : ACC_SUB_LIM1; |
| REC11 : ACC_LIM2; |
| REC12 : ACC_SUB_LIM2; |
| |
| TASK TYPE T IS |
| ENTRY E (X : INTEGER); |
| END T; |
| |
| TASK BODY T IS |
| BEGIN |
| ACCEPT E (X : INTEGER) DO |
| IF X /= IDENT_INT(1) THEN |
| FAILED ("INCORRECT VALUE PASSED TO TASK"); |
| END IF; |
| END E; |
| END T; |
| |
| PACKAGE BODY P IS |
| FUNCTION INIT_PREC1 (A : INT; B : STRING) RETURN PRI_REC1 IS |
| REC : PRI_REC1 (A); |
| BEGIN |
| REC := (A, B); |
| RETURN (REC); |
| END INIT_PREC1; |
| |
| FUNCTION INIT_PREC2 (A : INT; B : STRING) RETURN PRI_REC2 IS |
| REC : PRI_REC2; |
| BEGIN |
| REC := (A, B); |
| RETURN (REC); |
| END INIT_PREC2; |
| |
| PROCEDURE ASSIGN_LIM1 (A : ACC_LIM1; B : INT; C : STRING) IS |
| BEGIN |
| A.ALL := (B, C); |
| END ASSIGN_LIM1; |
| |
| PROCEDURE ASSIGN_LIM2 (A : ACC_LIM2; B : INT; C : STRING) IS |
| BEGIN |
| A.ALL := (B, C); |
| END ASSIGN_LIM2; |
| END P; |
| |
| BEGIN |
| |
| TEST ("C45282B", "CHECK THAT IN AND NOT IN ARE EVALUATED FOR " & |
| "ACCESS TYPES TO RECORD TYPES, PRIVATE TYPES, " & |
| "LIMITED PRIVATE TYPES WITH DISCRIMINANTS, AND " & |
| "TASK TYPES"); |
| |
| -- CASE D |
| ------------------------------------------------------------------------ |
| IF REC1 NOT IN ACC1_REC1 THEN |
| FAILED ("INCORRECT RESULTS FOR ACCESS TYPES - 1"); |
| END IF; |
| IF REC1 IN ACC2_REC1 THEN |
| NULL; |
| ELSE |
| FAILED ("INCORRECT RESULTS FOR ACCESS TYPES - 2"); |
| END IF; |
| IF REC2 NOT IN ACC1_REC1 THEN |
| FAILED ("INCORRECT RESULTS FOR ACCESS TYPES - 3"); |
| END IF; |
| REC1 := NEW DIS_REC1'(5, "12345"); |
| IF REC1 IN ACC1_REC1 THEN |
| NULL; |
| ELSE |
| FAILED ("INCORRECT RESULTS FOR ACCESS TYPES - 4"); |
| END IF; |
| IF REC1 IN ACC2_REC1 THEN |
| FAILED ("INCORRECT RESULTS FOR ACCESS TYPES - 5"); |
| END IF; |
| REC2 := NEW DIS_REC1'(2, "HI"); |
| IF REC2 IN ACC1_REC1 THEN |
| NULL; |
| ELSE |
| FAILED ("INCORRECT RESULTS FOR ACCESS TYPES - 6"); |
| END IF; |
| |
| ------------------------------------------------------------------------ |
| |
| IF REC3 IN ACC1_REC2 THEN |
| NULL; |
| ELSE |
| FAILED ("INCORRECT RESULTS FOR ACCESS TYPES - 7"); |
| END IF; |
| IF REC3 NOT IN ACC2_REC2 THEN |
| FAILED ("INCORRECT RESULTS FOR ACCESS TYPES - 8"); |
| END IF; |
| IF REC4 IN ACC1_REC2 THEN |
| NULL; |
| ELSE |
| FAILED ("INCORRECT RESULTS FOR ACCESS TYPES - 9"); |
| END IF; |
| REC3 := NEW DIS_REC2'(5, "5678"); |
| IF REC3 IN ACC1_REC2 THEN |
| NULL; |
| ELSE |
| FAILED ("INCORRECT RESULTS FOR ACCESS TYPES - 10"); |
| END IF; |
| IF REC3 IN ACC2_REC2 THEN |
| FAILED ("INCORRECT RESULTS FOR ACCESS TYPES - 11"); |
| END IF; |
| REC4 := NEW DIS_REC2'(2, "2345678"); |
| IF REC4 IN ACC1_REC2 THEN |
| NULL; |
| ELSE |
| FAILED ("INCORRECT RESULTS FOR ACCESS TYPES - 12"); |
| END IF; |
| IF REC4 NOT IN ACC2_REC2 THEN |
| FAILED ("INCORRECT RESULTS FOR ACCESS TYPES - 13"); |
| END IF; |
| |
| ------------------------------------------------------------------------ |
| |
| IF REC5 NOT IN ACC_PREC1 THEN |
| FAILED ("INCORRECT RESULTS FOR ACCESS TYPES - 14"); |
| END IF; |
| IF REC5 NOT IN ACC_SREC1 THEN |
| FAILED ("INCORRECT RESULTS FOR ACCESS TYPES - 15"); |
| END IF; |
| IF REC6 NOT IN ACC_PREC1 THEN |
| FAILED ("INCORRECT RESULTS FOR ACCESS TYPES - 16"); |
| END IF; |
| REC5 := NEW PRI_REC1'(INIT_PREC1 (5, "12345")); |
| IF REC5 IN ACC_PREC1 THEN |
| NULL; |
| ELSE |
| FAILED ("INCORRECT RESULTS FOR ACCESS TYPES - 17"); |
| END IF; |
| IF REC5 IN ACC_SREC1 THEN |
| FAILED ("INCORRECT RESULTS FOR ACCESS TYPES - 18"); |
| END IF; |
| REC6 := NEW PRI_REC1'(INIT_PREC1 (2, "HI")); |
| IF REC6 IN ACC_PREC1 THEN |
| NULL; |
| ELSE |
| FAILED ("INCORRECT RESULTS FOR ACCESS TYPES - 19"); |
| END IF; |
| |
| ------------------------------------------------------------------------ |
| |
| IF REC7 NOT IN ACC_PREC2 THEN |
| FAILED ("INCORRECT RESULTS FOR ACCESS TYPES - 20"); |
| END IF; |
| IF REC7 NOT IN ACC_SREC2 THEN |
| FAILED ("INCORRECT RESULTS FOR ACCESS TYPES - 21"); |
| END IF; |
| IF REC8 NOT IN ACC_PREC2 THEN |
| FAILED ("INCORRECT RESULTS FOR ACCESS TYPES - 22"); |
| END IF; |
| REC7 := NEW PRI_REC2'(INIT_PREC2 (5, "12345")); |
| IF REC7 IN ACC_PREC2 THEN |
| NULL; |
| ELSE |
| FAILED ("INCORRECT RESULTS FOR ACCESS TYPES - 23"); |
| END IF; |
| IF REC7 IN ACC_SREC2 THEN |
| FAILED ("INCORRECT RESULTS FOR ACCESS TYPES - 24"); |
| END IF; |
| REC8 := NEW PRI_REC2'(INIT_PREC2 (2, "HI")); |
| IF REC8 IN ACC_PREC2 THEN |
| NULL; |
| ELSE |
| FAILED ("INCORRECT RESULTS FOR ACCESS TYPES - 25"); |
| END IF; |
| |
| ------------------------------------------------------------------------ |
| |
| IF REC9 NOT IN ACC_LIM1 THEN |
| FAILED ("INCORRECT RESULTS FOR ACCESS TYPES - 26"); |
| END IF; |
| IF REC9 NOT IN ACC_SUB_LIM1 THEN |
| FAILED ("INCORRECT RESULTS FOR ACCESS TYPES - 27"); |
| END IF; |
| IF REC10 NOT IN ACC_LIM1 THEN |
| FAILED ("INCORRECT RESULTS FOR ACCESS TYPES - 28"); |
| END IF; |
| REC9 := NEW LIM_REC1 (5); |
| ASSIGN_LIM1 (REC9, 5, "12345"); |
| IF REC9 IN ACC_LIM1 THEN |
| NULL; |
| ELSE |
| FAILED ("INCORRECT RESULTS FOR ACCESS TYPES - 29"); |
| END IF; |
| IF REC9 IN ACC_SUB_LIM1 THEN |
| FAILED ("INCORRECT RESULTS FOR ACCESS TYPES - 30"); |
| END IF; |
| REC10 := NEW LIM_REC1 (2); |
| ASSIGN_LIM1 (REC10, 2, "12"); |
| IF REC10 IN ACC_LIM1 THEN |
| NULL; |
| ELSE |
| FAILED ("INCORRECT RESULTS FOR ACCESS TYPES - 31"); |
| END IF; |
| |
| ------------------------------------------------------------------------ |
| |
| IF REC11 NOT IN ACC_LIM2 THEN |
| FAILED ("INCORRECT RESULTS FOR ACCESS TYPES - 32"); |
| END IF; |
| IF REC11 NOT IN ACC_SUB_LIM2 THEN |
| FAILED ("INCORRECT RESULTS FOR ACCESS TYPES - 33"); |
| END IF; |
| IF REC12 NOT IN ACC_LIM2 THEN |
| FAILED ("INCORRECT RESULTS FOR ACCESS TYPES - 34"); |
| END IF; |
| REC11 := NEW LIM_REC2; |
| IF REC11 NOT IN ACC_SUB_LIM2 THEN |
| FAILED ("INCORRECT RESULTS FOR ACCESS TYPES - 35"); |
| END IF; |
| ASSIGN_LIM2 (REC11, 2, "12"); |
| IF REC11 IN ACC_LIM2 THEN |
| NULL; |
| ELSE |
| FAILED ("INCORRECT RESULTS FOR ACCESS TYPES - 36"); |
| END IF; |
| IF REC11 IN ACC_SUB_LIM2 THEN |
| NULL; |
| ELSE |
| FAILED ("INCORRECT RESULTS FOR ACCESS TYPES - 37"); |
| END IF; |
| REC12 := NEW LIM_REC2; |
| ASSIGN_LIM2 (REC12, 2, "12"); |
| IF REC12 IN ACC_LIM2 THEN |
| NULL; |
| ELSE |
| FAILED ("INCORRECT RESULTS FOR ACCESS TYPES - 38"); |
| END IF; |
| |
| -- CASE E |
| ------------------------------------------------------------------------ |
| DECLARE |
| TYPE ACC_TASK IS ACCESS T; |
| T1 : ACC_TASK; |
| BEGIN |
| IF T1 NOT IN ACC_TASK THEN |
| FAILED ("INCORRECT RESULTS FOR ACCESS TYPES - 39"); |
| END IF; |
| T1 := NEW T; |
| IF T1 IN ACC_TASK THEN |
| NULL; |
| ELSE |
| FAILED ("INCORRECT RESULTS FOR ACCESS TYPES - 38"); |
| END IF; |
| T1.E (1); |
| END; |
| |
| RESULT; |
| END C45282B; |