blob: b9fb50b1b90d82834a09706e0c144cca28d86829 [file] [log] [blame]
-- CC3605A.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 SOME DIFFERENCES BETWEEN THE FORMAL AND THE
-- ACTUAL SUBPROGRAMS DO NOT INVALIDATE A MATCH.
-- 1) CHECK DIFFERENT PARAMETER NAMES.
-- 2) CHECK DIFFERENT PARAMETER CONSTRAINTS.
-- 3) CHECK ONE PARAMETER CONSTRAINED AND THE OTHER
-- UNCONSTRAINED (WITH ARRAY, RECORD, ACCESS, AND
-- PRIVATE TYPES).
-- 4) CHECK PRESENCE OR ABSENCE OF AN EXPLICIT "IN" MODE
-- INDICATOR.
-- 5) DIFFERENT TYPE MARKS USED TO SPECIFY THE TYPE OF
-- PARAMETERS.
-- HISTORY:
-- LDC 10/04/88 CREATED ORIGINAL TEST.
PACKAGE CC3605A_PACK IS
SUBTYPE INT IS INTEGER RANGE -100 .. 100;
TYPE PRI_TYPE (SIZE : INT) IS PRIVATE;
SUBTYPE PRI_CONST IS PRI_TYPE (2);
PRIVATE
TYPE ARR_TYPE IS ARRAY (INTEGER RANGE <>) OF BOOLEAN;
TYPE PRI_TYPE (SIZE : INT) IS
RECORD
SUB_A : ARR_TYPE (1 .. SIZE);
END RECORD;
END CC3605A_PACK;
WITH REPORT;
USE REPORT;
WITH CC3605A_PACK;
USE CC3605A_PACK;
PROCEDURE CC3605A IS
SUBTYPE ZERO_TO_TEN IS INTEGER
RANGE IDENT_INT (0) .. IDENT_INT (10);
SUBTYPE ONE_TO_FIVE IS INTEGER
RANGE IDENT_INT (1) .. IDENT_INT (5);
SUBPRG_ACT : BOOLEAN := FALSE;
BEGIN
TEST
("CC3605A", "CHECK THAT SOME DIFFERENCES BETWEEN THE " &
"FORMAL AND THE ACTUAL PARAMETERS DO NOT " &
"INVALIDATE A MATCH");
----------------------------------------------------------------------
-- DIFFERENT PARAMETER NAMES
----------------------------------------------------------------------
DECLARE
PROCEDURE ACT_PROC (DIFF_NAME_PARM : ONE_TO_FIVE) IS
BEGIN
SUBPRG_ACT := TRUE;
END ACT_PROC;
GENERIC
WITH PROCEDURE PASSED_PROC (PARM : ONE_TO_FIVE);
PROCEDURE GEN_PROC;
PROCEDURE GEN_PROC IS
BEGIN
PASSED_PROC (ONE_TO_FIVE'FIRST);
END GEN_PROC;
PROCEDURE INST_PROC IS NEW GEN_PROC (ACT_PROC);
BEGIN
INST_PROC;
IF NOT SUBPRG_ACT THEN
FAILED
("DIFFERENT PARAMETER NAMES MADE MATCH INVALID");
END IF;
END;
----------------------------------------------------------------------
-- DIFFERENT PARAMETER CONSTRAINTS
----------------------------------------------------------------------
DECLARE
PROCEDURE ACT_PROC (PARM : ONE_TO_FIVE) IS
BEGIN
SUBPRG_ACT := TRUE;
END ACT_PROC;
GENERIC
WITH PROCEDURE PASSED_PROC (PARM : ZERO_TO_TEN);
PROCEDURE GEN_PROC;
PROCEDURE GEN_PROC IS
BEGIN
PASSED_PROC (ONE_TO_FIVE'FIRST);
END GEN_PROC;
PROCEDURE INST_PROC IS NEW GEN_PROC (ACT_PROC);
BEGIN
SUBPRG_ACT := FALSE;
INST_PROC;
IF NOT SUBPRG_ACT THEN
FAILED
("DIFFERENT PARAMETER CONSTRAINTS MADE MATCH " &
"INVALID");
END IF;
END;
----------------------------------------------------------------------
-- ONE PARAMETER CONSTRAINED (ARRAY)
----------------------------------------------------------------------
DECLARE
TYPE ARR_TYPE IS ARRAY (INTEGER RANGE <>) OF BOOLEAN;
SUBTYPE ARR_CONST IS ARR_TYPE (ONE_TO_FIVE'FIRST ..
ONE_TO_FIVE'LAST);
PASSED_PARM : ARR_CONST := (OTHERS => TRUE);
PROCEDURE ACT_PROC (PARM : ARR_CONST) IS
BEGIN
SUBPRG_ACT := TRUE;
END ACT_PROC;
GENERIC
WITH PROCEDURE PASSED_PROC (PARM : ARR_TYPE);
PROCEDURE GEN_PROC;
PROCEDURE GEN_PROC IS
BEGIN
PASSED_PROC (PASSED_PARM);
END GEN_PROC;
PROCEDURE INST_PROC IS NEW GEN_PROC (ACT_PROC);
BEGIN
SUBPRG_ACT := FALSE;
INST_PROC;
IF NOT SUBPRG_ACT THEN
FAILED
("ONE ARRAY PARAMETER CONSTRAINED MADE MATCH " &
"INVALID");
END IF;
END;
----------------------------------------------------------------------
-- ONE PARAMETER CONSTRAINED (RECORDS)
----------------------------------------------------------------------
DECLARE
TYPE REC_TYPE (BOL : BOOLEAN) IS
RECORD
SUB_A : INTEGER;
CASE BOL IS
WHEN TRUE =>
DSCR_A : INTEGER;
WHEN FALSE =>
DSCR_B : BOOLEAN;
END CASE;
END RECORD;
SUBTYPE REC_CONST IS REC_TYPE (TRUE);
PASSED_PARM : REC_CONST := (TRUE, 1, 2);
PROCEDURE ACT_PROC (PARM : REC_CONST) IS
BEGIN
SUBPRG_ACT := TRUE;
END ACT_PROC;
GENERIC
WITH PROCEDURE PASSED_PROC (PARM : REC_TYPE);
PROCEDURE GEN_PROC;
PROCEDURE GEN_PROC IS
BEGIN
PASSED_PROC (PASSED_PARM);
END GEN_PROC;
PROCEDURE INST_PROC IS NEW GEN_PROC (ACT_PROC);
BEGIN
SUBPRG_ACT := FALSE;
INST_PROC;
IF NOT SUBPRG_ACT THEN
FAILED
("ONE RECORD PARAMETER CONSTRAINED MADE MATCH " &
"INVALID");
END IF;
END;
----------------------------------------------------------------------
-- ONE PARAMETER CONSTRAINED (ACCESS)
----------------------------------------------------------------------
DECLARE
TYPE ARR_TYPE IS ARRAY (INTEGER RANGE <>) OF BOOLEAN;
SUBTYPE ARR_CONST IS ARR_TYPE (ONE_TO_FIVE'FIRST ..
ONE_TO_FIVE'LAST);
TYPE ARR_ACC_TYPE IS ACCESS ARR_TYPE;
SUBTYPE ARR_ACC_CONST IS ARR_ACC_TYPE (1 .. 3);
PASSED_PARM : ARR_ACC_TYPE := NULL;
PROCEDURE ACT_PROC (PARM : ARR_ACC_CONST) IS
BEGIN
SUBPRG_ACT := TRUE;
END ACT_PROC;
GENERIC
WITH PROCEDURE PASSED_PROC (PARM : ARR_ACC_TYPE);
PROCEDURE GEN_PROC;
PROCEDURE GEN_PROC IS
BEGIN
PASSED_PROC (PASSED_PARM);
END GEN_PROC;
PROCEDURE INST_PROC IS NEW GEN_PROC (ACT_PROC);
BEGIN
SUBPRG_ACT := FALSE;
INST_PROC;
IF NOT SUBPRG_ACT THEN
FAILED
("ONE ACCESS PARAMETER CONSTRAINED MADE MATCH " &
"INVALID");
END IF;
END;
----------------------------------------------------------------------
-- ONE PARAMETER CONSTRAINED (PRIVATE)
----------------------------------------------------------------------
DECLARE
PASSED_PARM : PRI_CONST;
PROCEDURE ACT_PROC (PARM : PRI_CONST) IS
BEGIN
SUBPRG_ACT := TRUE;
END ACT_PROC;
GENERIC
WITH PROCEDURE PASSED_PROC (PARM : PRI_TYPE);
PROCEDURE GEN_PROC;
PROCEDURE GEN_PROC IS
BEGIN
PASSED_PROC (PASSED_PARM);
END GEN_PROC;
PROCEDURE INST_PROC IS NEW GEN_PROC (ACT_PROC);
BEGIN
SUBPRG_ACT := FALSE;
INST_PROC;
IF NOT SUBPRG_ACT THEN
FAILED
("ONE PRIVATE PARAMETER CONSTRAINED MADE MATCH " &
"INVALID");
END IF;
END;
----------------------------------------------------------------------
-- PRESENCE (OR ABSENCE) OF AN EXPLICIT "IN" MODE
----------------------------------------------------------------------
DECLARE
PROCEDURE ACT_PROC (PARM : INTEGER) IS
BEGIN
SUBPRG_ACT := TRUE;
END ACT_PROC;
GENERIC
WITH PROCEDURE PASSED_PROC (PARM : IN INTEGER);
PROCEDURE GEN_PROC;
PROCEDURE GEN_PROC IS
BEGIN
PASSED_PROC (1);
END GEN_PROC;
PROCEDURE INST_PROC IS NEW GEN_PROC (ACT_PROC);
BEGIN
SUBPRG_ACT := FALSE;
INST_PROC;
IF NOT SUBPRG_ACT THEN
FAILED
("PRESENCE OF AN EXPLICIT 'IN' MODE MADE MATCH " &
"INVALID");
END IF;
END;
----------------------------------------------------------------------
-- DIFFERENT TYPE MARKS
----------------------------------------------------------------------
DECLARE
SUBTYPE MARK_1_TYPE IS INTEGER;
SUBTYPE MARK_2_TYPE IS INTEGER;
PROCEDURE ACT_PROC (PARM1 : IN MARK_1_TYPE) IS
BEGIN
SUBPRG_ACT := TRUE;
END ACT_PROC;
GENERIC
WITH PROCEDURE PASSED_PROC (PARM2 : MARK_2_TYPE);
PROCEDURE GEN_PROC;
PROCEDURE GEN_PROC IS
BEGIN
PASSED_PROC (1);
END GEN_PROC;
PROCEDURE INST_PROC IS NEW GEN_PROC (ACT_PROC);
BEGIN
SUBPRG_ACT := FALSE;
INST_PROC;
IF NOT SUBPRG_ACT THEN
FAILED ("DIFFERENT TYPE MARKS MADE MATCH INVALID");
END IF;
END;
RESULT;
END CC3605A;