-- C64106A.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 UNCONSTRAINED RECORD, PRIVATE, LIMITED PRIVATE, AND ARRAY -- FORMAL PARAMETERS USE THE CONSTRAINTS OF ACTUAL PARAMETERS. -- SUBTESTS ARE: -- (A) RECORD TYPE, UNCONSTRAINED ACTUALS, DEFAULTS. -- (B) PRIVATE TYPE, CONSTRAINED ACTUALS, NO DEFAULTS. -- (C) LIMITED PRIVATE TYPE, UNCONSTRAINED ACTUALS, NO DEFAULTS. -- (D) ARRAY TYPE, CONSTRAINED ACTUALS, DEFAULTS. -- DAS 1/15/81 -- JBG 5/16/83 -- CPP 5/22/84 WITH REPORT; PROCEDURE C64106A IS USE REPORT; BEGIN TEST ("C64106A", "CHECK USE OF ACTUAL CONSTRAINTS BY " & "UNCONSTRAINED FORMAL PARAMETERS"); DECLARE -- (A) PACKAGE PKG IS SUBTYPE INT IS INTEGER RANGE 0..100; TYPE RECTYPE (CONSTRAINT : INT := 80) IS RECORD INTFIELD : INTEGER; STRFIELD : STRING (1..CONSTRAINT); END RECORD; REC1 : RECTYPE := (10,10,"0123456789"); REC2 : RECTYPE := (17,7,"C64106A.........."); REC3 : RECTYPE := (1,1,"A"); REC4 : RECTYPE; -- 80 PROCEDURE CHK_RECTYPE1 (REC1 : IN RECTYPE := (2,0,"AB"); REC2 : OUT RECTYPE; REC3 : IN OUT RECTYPE); PROCEDURE CHK_RECTYPE2 (REC : OUT RECTYPE); END PKG; PACKAGE BODY PKG IS PROCEDURE CHK_RECTYPE1 (REC1 : IN RECTYPE := (2,0,"AB"); REC2 : OUT RECTYPE; REC3 : IN OUT RECTYPE) IS BEGIN IF (REC1.CONSTRAINT /= IDENT_INT(10)) THEN FAILED ("RECORD TYPE IN PARAMETER DID " & "NOT USE CONSTRAINT OF ACTUAL"); END IF; IF (REC2.CONSTRAINT /= IDENT_INT(17)) THEN FAILED ("RECORD TYPE OUT PARAMETER DID " & "NOT USE CONSTRAINT OF ACTUAL"); END IF; IF (REC3.CONSTRAINT /= IDENT_INT(1)) THEN FAILED ("RECORD TYPE IN OUT PARAMETER DID " & "NOT USE CONSTRAINT OF ACTUAL"); END IF; REC2 := PKG.REC2; END CHK_RECTYPE1; PROCEDURE CHK_RECTYPE2 (REC : OUT RECTYPE) IS BEGIN IF (REC.CONSTRAINT /= IDENT_INT(80)) THEN FAILED ("RECORD TYPE OUT PARAMETER DID " & "NOT USE CONSTRAINT OF " & "UNINITIALIZED ACTUAL"); END IF; REC := (10,10,"9876543210"); END CHK_RECTYPE2; END PKG; BEGIN -- (A) PKG.CHK_RECTYPE1 (PKG.REC1, PKG.REC2, PKG.REC3); PKG.CHK_RECTYPE2 (PKG.REC4); END; -- (A) --------------------------------------------- B : DECLARE -- (B) PACKAGE PKG IS SUBTYPE INT IS INTEGER RANGE 0..100; TYPE RECTYPE (CONSTRAINT : INT := 80) IS PRIVATE; PROCEDURE CHK_RECTYPE1 (REC1 : IN RECTYPE; REC2 : OUT RECTYPE; REC3 : IN OUT RECTYPE); PROCEDURE CHK_RECTYPE2 (REC : OUT RECTYPE); PRIVATE TYPE RECTYPE (CONSTRAINT : INT := 80) IS RECORD INTFIELD : INTEGER; STRFIELD : STRING (1..CONSTRAINT); END RECORD; END PKG; REC1 : PKG.RECTYPE(10); REC2 : PKG.RECTYPE(17); REC3 : PKG.RECTYPE(1); REC4 : PKG.RECTYPE(10); PACKAGE BODY PKG IS PROCEDURE CHK_RECTYPE1 (REC1 : IN RECTYPE; REC2 : OUT RECTYPE; REC3 : IN OUT RECTYPE) IS BEGIN IF (REC1.CONSTRAINT /= IDENT_INT(10)) THEN FAILED ("PRIVATE TYPE IN PARAMETER DID " & "NOT USE CONSTRAINT OF ACTUAL"); END IF; IF (REC2.CONSTRAINT /= IDENT_INT(17)) THEN FAILED ("PRIVATE TYPE OUT PARAMETER DID " & "NOT USE CONSTRAINT OF ACTUAL"); END IF; IF (REC3.CONSTRAINT /= IDENT_INT(1)) THEN FAILED ("PRIVATE TYPE IN OUT PARAMETER DID " & "NOT USE CONSTRAINT OF ACTUAL"); END IF; REC2 := B.REC2; END CHK_RECTYPE1; PROCEDURE CHK_RECTYPE2 (REC : OUT RECTYPE) IS BEGIN IF (REC.CONSTRAINT /= IDENT_INT(10)) THEN FAILED ("PRIVATE TYPE OUT PARAMETER DID " & "NOT USE CONSTRAINT OF " & "UNINITIALIZED ACTUAL"); END IF; REC := (10,10,"9876543210"); END CHK_RECTYPE2; BEGIN REC1 := (10,10,"0123456789"); REC2 := (17,7,"C64106A.........."); REC3 := (1,1,"A"); END PKG; BEGIN -- (B) PKG.CHK_RECTYPE1 (REC1, REC2, REC3); PKG.CHK_RECTYPE2 (REC4); END B; -- (B) --------------------------------------------- C : DECLARE -- (C) PACKAGE PKG IS SUBTYPE INT IS INTEGER RANGE 0..100; TYPE RECTYPE (CONSTRAINT : INT := 80) IS LIMITED PRIVATE; PROCEDURE CHK_RECTYPE1 (REC1 : IN RECTYPE; REC2 : OUT RECTYPE; REC3 : IN OUT RECTYPE); PROCEDURE CHK_RECTYPE2 (REC : OUT RECTYPE); PRIVATE TYPE RECTYPE (CONSTRAINT : INT := 80) IS RECORD INTFIELD : INTEGER; STRFIELD : STRING (1..CONSTRAINT); END RECORD; END PKG; REC1 : PKG.RECTYPE; -- 10 REC2 : PKG.RECTYPE; -- 17 REC3 : PKG.RECTYPE; -- 1 REC4 : PKG.RECTYPE; -- 80 PACKAGE BODY PKG IS PROCEDURE CHK_RECTYPE1 (REC1 : IN RECTYPE; REC2 : OUT RECTYPE; REC3 : IN OUT RECTYPE) IS BEGIN IF (REC1.CONSTRAINT /= IDENT_INT(10)) THEN FAILED ("LIMITED PRIVATE TYPE IN PARAMETER " & "DID NOT USE CONSTRAINT OF " & "ACTUAL"); END IF; IF (REC2.CONSTRAINT /= IDENT_INT(17)) THEN FAILED ("LIMITED PRIVATE TYPE OUT PARAMETER " & "DID NOT USE CONSTRAINT OF " & "ACTUAL"); END IF; IF (REC3.CONSTRAINT /= IDENT_INT(1)) THEN FAILED ("LIMITED PRIVATE TYPE IN OUT " & "PARAMETER DID NOT USE " & "CONSTRAINT OF ACTUAL"); END IF; REC2 := C.REC2; END CHK_RECTYPE1; PROCEDURE CHK_RECTYPE2 (REC : OUT RECTYPE) IS BEGIN IF (REC.CONSTRAINT /= IDENT_INT(80)) THEN FAILED ("LIMITED PRIVATE TYPE OUT " & "PARAMETER DID NOT USE " & "CONSTRAINT OF UNINITIALIZED ACTUAL"); END IF; REC := (10,10,"9876543210"); END CHK_RECTYPE2; BEGIN REC1 := (10,10,"0123456789"); REC2 := (17,7,"C64106A.........."); REC3 := (1,1,"A"); END PKG; BEGIN -- (C) PKG.CHK_RECTYPE1 (REC1, REC2, REC3); PKG.CHK_RECTYPE2 (REC4); END C; -- (C) --------------------------------------------- D : DECLARE -- (D) TYPE ATYPE IS ARRAY (INTEGER RANGE <>, POSITIVE RANGE <>) OF CHARACTER; A1, A2, A3 : ATYPE(-1..1, 4..5) := (('A','B'), ('C','D'), ('E','F')); A4 : ATYPE(-1..1, 4..5); CA1 : CONSTANT ATYPE(8..9, -7..INTEGER'FIRST) := (8..9 => (-7..INTEGER'FIRST => 'A')); S1 : STRING(1..INTEGER'FIRST) := ""; S2 : STRING(-5..-7) := ""; S3 : STRING(1..0) := ""; PROCEDURE CHK_ARRAY1 (A1 : IN ATYPE := CA1; A2 : OUT ATYPE; A3 : IN OUT ATYPE) IS BEGIN IF ((A1'FIRST(1) /= IDENT_INT(-1)) OR (A1'LAST(1) /= IDENT_INT(1)) OR (A1'FIRST(2) /= IDENT_INT(4)) OR (A1'LAST(2) /= IDENT_INT(5))) THEN FAILED ("ARRAY TYPE IN PARAMETER DID NOT " & "USE CONSTRAINTS OF ACTUAL"); END IF; IF ((A2'FIRST(1) /= IDENT_INT(-1)) OR (A2'LAST(1) /= IDENT_INT(1)) OR (A2'FIRST(2) /= IDENT_INT(4)) OR (A2'LAST(2) /= IDENT_INT(5))) THEN FAILED ("ARRAY TYPE OUT PARAMETER DID NOT USE" & "CONSTRAINTS OF ACTUAL"); END IF; IF ((A3'FIRST(1) /= IDENT_INT(-1)) OR (A3'LAST(1) /= IDENT_INT(1)) OR (A3'FIRST(2) /= IDENT_INT(4)) OR (A3'LAST(2) /= IDENT_INT(5))) THEN FAILED ("ARRAY TYPE IN OUT PARAMETER DID NOT " & "USE CONSTRAINTS OF ACTUAL"); END IF; A2 := D.A2; END CHK_ARRAY1; PROCEDURE CHK_ARRAY2 (A4 : OUT ATYPE) IS BEGIN IF ((A4'FIRST(1) /= IDENT_INT(-1)) OR (A4'LAST(1) /= IDENT_INT(1)) OR (A4'FIRST(2) /= IDENT_INT(4)) OR (A4'LAST(2) /= IDENT_INT(5))) THEN FAILED ("ARRAY TYPE OUT PARAMETER DID NOT " & "USE CONSTRAINTS OF UNINITIALIZED " & "ACTUAL"); END IF; A4 := A2; END CHK_ARRAY2; PROCEDURE CHK_STRING (S1 : IN STRING; S2 : IN OUT STRING; S3 : OUT STRING) IS BEGIN IF ((S1'FIRST /= IDENT_INT(1)) OR (S1'LAST /= IDENT_INT(INTEGER'FIRST))) THEN FAILED ("STRING TYPE IN PARAMETER DID NOT " & "USE CONSTRAINTS OF ACTUAL NULL " & "STRING"); END IF; IF ((S2'FIRST /= IDENT_INT(-5)) OR (S2'LAST /= IDENT_INT(-7))) THEN FAILED ("STRING TYPE IN OUT PARAMETER DID NOT " & "USE CONSTRAINTS OF ACTUAL NULL STRING"); END IF; IF ((S3'FIRST /= IDENT_INT(1)) OR (S3'LAST /= IDENT_INT(0))) THEN FAILED ("STRING TYPE OUT PARAMETER DID NOT " & "USE CONSTRAINTS OF ACTUAL NULL STRING"); END IF; S3 := ""; END CHK_STRING; BEGIN -- (D) CHK_ARRAY1 (A1, A2, A3); CHK_ARRAY2 (A4); CHK_STRING (S1, S2, S3); END D; -- (D) RESULT; END C64106A;