blob: 535cea40dec493416edffb016a8ab828cd578e27 [file] [log] [blame]
-- C95087A.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.
-- GLH 7/19/85
-- JRK 8/23/85
WITH REPORT; USE REPORT;
PROCEDURE C95087A IS
BEGIN
TEST ("C95087A", "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,"C95087A..........");
REC3 : RECTYPE := (1,1,"A");
REC4 : RECTYPE; -- 80.
TASK T1 IS
ENTRY E1 (REC1 : IN RECTYPE := (2,0,"AB");
REC2 : OUT RECTYPE;
REC3 : IN OUT RECTYPE);
END T1;
TASK T2 IS
ENTRY E2 (REC : OUT RECTYPE);
END T2;
END PKG;
PACKAGE BODY PKG IS
TASK BODY T1 IS
BEGIN
ACCEPT E1 (REC1 : IN RECTYPE := (2,0,"AB");
REC2 : OUT RECTYPE;
REC3 : IN OUT RECTYPE) DO
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 E1;
END T1;
TASK BODY T2 IS
BEGIN
ACCEPT E2 (REC : OUT RECTYPE) DO
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 E2;
END T2;
END PKG;
BEGIN -- (A)
PKG.T1.E1 (PKG.REC1, PKG.REC2, PKG.REC3);
PKG.T2.E2 (PKG.REC4);
END; -- (A)
---------------------------------------------
B : DECLARE -- (B)
PACKAGE PKG IS
SUBTYPE INT IS INTEGER RANGE 0..100;
TYPE RECTYPE (CONSTRAINT : INT := 80) IS PRIVATE;
TASK T1 IS
ENTRY E1 (REC1 : IN RECTYPE;
REC2 : OUT RECTYPE;
REC3 : IN OUT RECTYPE);
END T1;
TASK T2 IS
ENTRY E2 (REC : OUT RECTYPE);
END T2;
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
TASK BODY T1 IS
BEGIN
ACCEPT E1 (REC1 : IN RECTYPE;
REC2 : OUT RECTYPE;
REC3 : IN OUT RECTYPE) DO
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 E1;
END T1;
TASK BODY T2 IS
BEGIN
ACCEPT E2 (REC : OUT RECTYPE) DO
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 E2;
END T2;
BEGIN
REC1 := (10,10,"0123456789");
REC2 := (17,7,"C95087A..........");
REC3 := (1,1,"A");
END PKG;
BEGIN -- (B)
PKG.T1.E1 (REC1, REC2, REC3);
PKG.T2.E2 (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;
TASK T1 IS
ENTRY E1 (REC1 : IN RECTYPE;
REC2 : OUT RECTYPE;
REC3 : IN OUT RECTYPE);
END T1;
TASK T2 IS
ENTRY E2 (REC : OUT RECTYPE);
END T2;
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
TASK BODY T1 IS
BEGIN
ACCEPT E1 (REC1 : IN RECTYPE;
REC2 : OUT RECTYPE;
REC3 : IN OUT RECTYPE) DO
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 E1;
END T1;
TASK BODY T2 IS
BEGIN
ACCEPT E2 (REC : OUT RECTYPE) DO
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 E2;
END T2;
BEGIN
REC1 := (10,10,"0123456789");
REC2 := (17,7,"C95087A..........");
REC3 := (1,1,"A");
END PKG;
BEGIN -- (C)
PKG.T1.E1 (REC1, REC2, REC3);
PKG.T2.E2 (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) := "";
TASK T1 IS
ENTRY E1 (A1 : IN ATYPE := CA1;
A2 : OUT ATYPE;
A3 : IN OUT ATYPE);
END T1;
TASK T2 IS
ENTRY E2 (A4 : OUT ATYPE);
END T2;
TASK T3 IS
ENTRY E3 (S1 : IN STRING;
S2 : IN OUT STRING;
S3 : OUT STRING);
END T3;
TASK BODY T1 IS
BEGIN
ACCEPT E1 (A1 : IN ATYPE := CA1; A2 : OUT ATYPE;
A3 : IN OUT ATYPE) DO
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 E1;
END T1;
TASK BODY T2 IS
BEGIN
ACCEPT E2 (A4 : OUT ATYPE) DO
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 E2;
END T2;
TASK BODY T3 IS
BEGIN
ACCEPT E3 (S1 : IN STRING;
S2 : IN OUT STRING;
S3 : OUT STRING) DO
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 E3;
END T3;
BEGIN -- (D)
T1.E1 (A1, A2, A3);
T2.E2 (A4);
T3.E3 (S1, S2, S3);
END D; -- (D)
RESULT;
END C95087A;