| -- CC3017B.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 AN INSTANCE OF A GENERIC PROCEDURE MUST DECLARE A |
| -- PROCEDURE AND THAT AN INSTANCE OF A GENERIC FUNCTION MUST |
| -- DECLARE A FUNCTION. CHECK THAT CONSTRAINT_ERROR IS NOT RAISED |
| -- IF THE DEFAULT VALUE FOR A FORMAL PARAMETER DOES NOT SATISFY |
| -- THE CONSTRAINTS OF THE SUBTYPE_INDICATION WHEN THE |
| -- DECLARATION IS ELABORATED, ONLY WHEN THE DEFAULT IS USED. |
| |
| -- SUBTESTS ARE: |
| -- (A) ARRAY PARAMETERS CONSTRAINED WITH NONSTATIC BOUNDS AND |
| -- INITIALIZED WITH A STATIC AGGREGATE. |
| -- (B) A SCALAR PARAMETER WITH NON-STATIC RANGE CONSTRAINTS |
| -- INITIALIZED WITH A STATIC VALUE. |
| -- (C) A RECORD PARAMETER WHOSE COMPONENTS HAVE NON-STATIC |
| -- CONSTRAINTS INITIALIZED WITH A STATIC AGGREGATE. |
| -- (D) AN ARRAY PARAMETER CONSTRAINED WITH STATIC BOUNDS ON SUB- |
| -- SCRIPTS AND NON-STATIC BOUNDS ON COMPONENTS, INITIALIZED |
| -- WITH A STATIC AGGREGATE. |
| -- (E) A RECORD PARAMETER WITH A NON-STATIC CONSTRAINT |
| -- INITIALIZED WITH A STATIC AGGREGATE. |
| |
| -- EDWARD V. BERARD, 7 AUGUST 1990 |
| |
| WITH REPORT; |
| |
| PROCEDURE CC3017B IS |
| |
| BEGIN |
| |
| REPORT.TEST ("CC3017B", "CHECK THAT AN INSTANCE OF A GENERIC " & |
| "PROCEDURE MUST DECLARE A PROCEDURE AND THAT AN " & |
| "INSTANCE OF A GENERIC FUNCTION MUST DECLARE A " & |
| "FUNCTION. CHECK THAT CONSTRAINT_ERROR IS NOT " & |
| "RAISED IF AN INITIALIZATION VALUE DOES NOT SATISFY " & |
| "CONSTRAINTS ON A FORMAL PARAMETER"); |
| |
| -------------------------------------------------- |
| |
| NONSTAT_ARRAY_PARMS: |
| |
| DECLARE |
| |
| -- (A) ARRAY PARAMETERS CONSTRAINED WITH NONSTATIC BOUNDS AND |
| -- INITIALIZED WITH A STATIC AGGREGATE. |
| |
| TYPE NUMBER IS RANGE 1 .. 100 ; |
| |
| GENERIC |
| |
| TYPE INTEGER_TYPE IS RANGE <> ; |
| LOWER : IN INTEGER_TYPE ; |
| UPPER : IN INTEGER_TYPE ; |
| |
| PROCEDURE PA (FIRST : IN INTEGER_TYPE ; |
| SECOND : IN INTEGER_TYPE) ; |
| |
| PROCEDURE PA (FIRST : IN INTEGER_TYPE ; |
| SECOND : IN INTEGER_TYPE) IS |
| |
| TYPE A1 IS ARRAY (INTEGER_TYPE RANGE LOWER .. FIRST, |
| INTEGER_TYPE RANGE LOWER .. SECOND) |
| OF INTEGER_TYPE; |
| |
| PROCEDURE PA1 (A : A1 := ((LOWER,UPPER),(UPPER,UPPER))) |
| IS |
| BEGIN |
| REPORT.FAILED ("BODY OF PA1 EXECUTED"); |
| EXCEPTION |
| WHEN OTHERS => |
| REPORT.FAILED ("EXCEPTION RAISED IN PA1"); |
| END PA1; |
| |
| BEGIN -- PA |
| PA1; |
| EXCEPTION |
| WHEN CONSTRAINT_ERROR => |
| NULL; |
| WHEN OTHERS => |
| REPORT.FAILED ("WRONG EXCEPTION RAISED - PA1"); |
| END PA; |
| |
| PROCEDURE NEW_PA IS NEW PA (INTEGER_TYPE => NUMBER, |
| LOWER => 1, |
| UPPER => 50) ; |
| |
| BEGIN -- NONSTAT_ARRAY_PARMS |
| |
| NEW_PA (FIRST => NUMBER (25), |
| SECOND => NUMBER (75)); |
| |
| EXCEPTION |
| WHEN OTHERS => |
| REPORT.FAILED ("EXCEPTION RAISED IN CALL TO NEW_PA"); |
| |
| END NONSTAT_ARRAY_PARMS ; |
| |
| -------------------------------------------------- |
| |
| SCALAR_NON_STATIC: |
| |
| DECLARE |
| |
| -- (B) A SCALAR PARAMETER WITH NON-STATIC RANGE CONSTRAINTS |
| -- INITIALIZED WITH A STATIC VALUE. |
| |
| TYPE NUMBER IS RANGE 1 .. 100 ; |
| |
| GENERIC |
| |
| TYPE INTEGER_TYPE IS RANGE <> ; |
| STATIC_VALUE : IN INTEGER_TYPE ; |
| |
| PROCEDURE PB (LOWER : IN INTEGER_TYPE ; |
| UPPER : IN INTEGER_TYPE) ; |
| |
| PROCEDURE PB (LOWER : IN INTEGER_TYPE ; |
| UPPER : IN INTEGER_TYPE) IS |
| |
| SUBTYPE INT IS INTEGER_TYPE RANGE LOWER .. UPPER ; |
| |
| PROCEDURE PB1 (I : INT := STATIC_VALUE) IS |
| BEGIN -- PB1 |
| REPORT.FAILED ("BODY OF PB1 EXECUTED"); |
| EXCEPTION |
| WHEN OTHERS => |
| REPORT.FAILED ("EXCEPTION RAISED IN PB1"); |
| END PB1; |
| |
| BEGIN -- PB |
| PB1; |
| EXCEPTION |
| WHEN CONSTRAINT_ERROR => |
| NULL; |
| WHEN OTHERS => |
| REPORT.FAILED ("WRONG EXCEPTION RAISED - PB1"); |
| END PB; |
| |
| PROCEDURE NEW_PB IS NEW PB (INTEGER_TYPE => NUMBER, |
| STATIC_VALUE => 20) ; |
| |
| BEGIN -- SCALAR_NON_STATIC |
| |
| NEW_PB (LOWER => NUMBER (25), |
| UPPER => NUMBER (75)); |
| |
| EXCEPTION |
| WHEN OTHERS => |
| REPORT.FAILED ("EXCEPTION RAISED IN CALL TO NEW_PB"); |
| END SCALAR_NON_STATIC ; |
| |
| -------------------------------------------------- |
| |
| REC_NON_STAT_COMPS: |
| |
| DECLARE |
| |
| -- (C) A RECORD PARAMETER WHOSE COMPONENTS HAVE NON-STATIC |
| -- CONSTRAINTS INITIALIZED WITH A STATIC AGGREGATE. |
| |
| TYPE NUMBER IS RANGE 1 .. 100 ; |
| |
| GENERIC |
| |
| TYPE INTEGER_TYPE IS RANGE <> ; |
| F_STATIC_VALUE : IN INTEGER_TYPE ; |
| S_STATIC_VALUE : IN INTEGER_TYPE ; |
| T_STATIC_VALUE : IN INTEGER_TYPE ; |
| L_STATIC_VALUE : IN INTEGER_TYPE ; |
| |
| PROCEDURE PC (LOWER : IN INTEGER_TYPE ; |
| UPPER : IN INTEGER_TYPE) ; |
| |
| PROCEDURE PC (LOWER : IN INTEGER_TYPE ; |
| UPPER : IN INTEGER_TYPE) IS |
| |
| SUBTYPE SUBINTEGER_TYPE IS INTEGER_TYPE |
| RANGE LOWER .. UPPER ; |
| TYPE AR1 IS ARRAY (INTEGER RANGE 1..3) OF |
| SUBINTEGER_TYPE ; |
| TYPE REC IS |
| RECORD |
| FIRST : SUBINTEGER_TYPE ; |
| SECOND : AR1 ; |
| END RECORD; |
| |
| PROCEDURE PC1 (R : REC := (F_STATIC_VALUE, |
| (S_STATIC_VALUE, |
| T_STATIC_VALUE, |
| L_STATIC_VALUE))) IS |
| BEGIN -- PC1 |
| REPORT.FAILED ("BODY OF PC1 EXECUTED"); |
| EXCEPTION |
| WHEN OTHERS => |
| REPORT.FAILED ("EXCEPTION RAISED IN PC1"); |
| END PC1; |
| |
| BEGIN -- PC |
| PC1; |
| EXCEPTION |
| WHEN CONSTRAINT_ERROR => |
| NULL; |
| WHEN OTHERS => |
| REPORT.FAILED ("WRONG EXCEPTION RAISED - PC1"); |
| END PC; |
| |
| PROCEDURE NEW_PC IS NEW PC (INTEGER_TYPE => NUMBER, |
| F_STATIC_VALUE => 15, |
| S_STATIC_VALUE => 19, |
| T_STATIC_VALUE => 85, |
| L_STATIC_VALUE => 99) ; |
| |
| BEGIN -- REC_NON_STAT_COMPS |
| NEW_PC (LOWER => 20, |
| UPPER => 80); |
| EXCEPTION |
| WHEN OTHERS => |
| REPORT.FAILED ("EXCEPTION RAISED IN CALL TO NEW_PC"); |
| END REC_NON_STAT_COMPS ; |
| |
| -------------------------------------------------- |
| |
| FIRST_STATIC_ARRAY: |
| |
| DECLARE |
| |
| -- (D) AN ARRAY PARAMETER CONSTRAINED WITH STATIC BOUNDS ON SUB- |
| -- SCRIPTS AND NON-STATIC BOUNDS ON COMPONENTS, INITIALIZED |
| -- WITH A STATIC AGGREGATE. |
| |
| TYPE NUMBER IS RANGE 1 .. 100 ; |
| |
| GENERIC |
| |
| TYPE INTEGER_TYPE IS RANGE <> ; |
| F_STATIC_VALUE : IN INTEGER_TYPE ; |
| S_STATIC_VALUE : IN INTEGER_TYPE ; |
| T_STATIC_VALUE : IN INTEGER_TYPE ; |
| L_STATIC_VALUE : IN INTEGER_TYPE ; |
| A_STATIC_VALUE : IN INTEGER_TYPE ; |
| B_STATIC_VALUE : IN INTEGER_TYPE ; |
| C_STATIC_VALUE : IN INTEGER_TYPE ; |
| D_STATIC_VALUE : IN INTEGER_TYPE ; |
| |
| PROCEDURE P1D (LOWER : IN INTEGER_TYPE ; |
| UPPER : IN INTEGER_TYPE) ; |
| |
| PROCEDURE P1D (LOWER : IN INTEGER_TYPE ; |
| UPPER : IN INTEGER_TYPE) IS |
| |
| SUBTYPE SUBINTEGER_TYPE IS INTEGER_TYPE |
| RANGE LOWER .. UPPER ; |
| |
| TYPE A1 IS ARRAY (INTEGER_TYPE RANGE |
| F_STATIC_VALUE .. S_STATIC_VALUE, |
| INTEGER_TYPE RANGE |
| T_STATIC_VALUE .. L_STATIC_VALUE) |
| OF SUBINTEGER_TYPE ; |
| |
| PROCEDURE P1D1 (A : A1 := |
| ((A_STATIC_VALUE, B_STATIC_VALUE), |
| (C_STATIC_VALUE, D_STATIC_VALUE))) IS |
| BEGIN -- P1D1 |
| REPORT.FAILED ("BODY OF P1D1 EXECUTED"); |
| EXCEPTION |
| WHEN OTHERS => |
| REPORT.FAILED ("EXCEPTION RAISED IN P1D1"); |
| END P1D1; |
| |
| BEGIN -- P1D |
| P1D1 ; |
| EXCEPTION |
| WHEN CONSTRAINT_ERROR => |
| NULL; |
| WHEN OTHERS => |
| REPORT.FAILED ("WRONG EXCEPTION RAISED - P1D1"); |
| END P1D; |
| |
| PROCEDURE NEW_P1D IS NEW P1D (INTEGER_TYPE => NUMBER, |
| F_STATIC_VALUE => 21, |
| S_STATIC_VALUE => 37, |
| T_STATIC_VALUE => 67, |
| L_STATIC_VALUE => 79, |
| A_STATIC_VALUE => 11, |
| B_STATIC_VALUE => 88, |
| C_STATIC_VALUE => 87, |
| D_STATIC_VALUE => 13) ; |
| |
| BEGIN -- FIRST_STATIC_ARRAY |
| NEW_P1D (LOWER => 10, |
| UPPER => 90); |
| EXCEPTION |
| WHEN OTHERS => |
| REPORT.FAILED ("EXCEPTION RAISED IN CALL TO NEW_P1D"); |
| END FIRST_STATIC_ARRAY ; |
| |
| -------------------------------------------------- |
| |
| SECOND_STATIC_ARRAY: |
| |
| DECLARE |
| |
| -- (D) AN ARRAY PARAMETER CONSTRAINED WITH STATIC BOUNDS ON SUB- |
| -- SCRIPTS AND NON-STATIC BOUNDS ON COMPONENTS, INITIALIZED |
| -- WITH A STATIC AGGREGATE. |
| |
| TYPE NUMBER IS RANGE 1 .. 100 ; |
| |
| GENERIC |
| |
| TYPE INTEGER_TYPE IS RANGE <> ; |
| F_STATIC_VALUE : IN INTEGER_TYPE ; |
| S_STATIC_VALUE : IN INTEGER_TYPE ; |
| T_STATIC_VALUE : IN INTEGER_TYPE ; |
| L_STATIC_VALUE : IN INTEGER_TYPE ; |
| A_STATIC_VALUE : IN INTEGER_TYPE ; |
| B_STATIC_VALUE : IN INTEGER_TYPE ; |
| |
| PROCEDURE P2D (LOWER : IN INTEGER_TYPE ; |
| UPPER : IN INTEGER_TYPE) ; |
| |
| PROCEDURE P2D (LOWER : IN INTEGER_TYPE ; |
| UPPER : IN INTEGER_TYPE) IS |
| |
| SUBTYPE SUBINTEGER_TYPE IS INTEGER_TYPE |
| RANGE LOWER .. UPPER ; |
| |
| TYPE A1 IS ARRAY (INTEGER_TYPE RANGE |
| F_STATIC_VALUE .. S_STATIC_VALUE, |
| INTEGER_TYPE RANGE |
| T_STATIC_VALUE .. L_STATIC_VALUE) |
| OF SUBINTEGER_TYPE ; |
| |
| PROCEDURE P2D1 (A : A1 := |
| (F_STATIC_VALUE .. S_STATIC_VALUE => |
| (A_STATIC_VALUE, B_STATIC_VALUE))) IS |
| BEGIN -- P2D1 |
| REPORT.FAILED ("BODY OF P2D1 EXECUTED"); |
| EXCEPTION |
| WHEN OTHERS => |
| REPORT.FAILED ("EXCEPTION RAISED IN P2D1"); |
| END P2D1; |
| |
| BEGIN -- P2D |
| P2D1; |
| EXCEPTION |
| WHEN CONSTRAINT_ERROR => |
| NULL; |
| WHEN OTHERS => |
| REPORT.FAILED ("WRONG EXCEPTION RAISED - P2D1"); |
| END P2D; |
| |
| PROCEDURE NEW_P2D IS NEW P2D (INTEGER_TYPE => NUMBER, |
| F_STATIC_VALUE => 21, |
| S_STATIC_VALUE => 37, |
| T_STATIC_VALUE => 67, |
| L_STATIC_VALUE => 79, |
| A_STATIC_VALUE => 7, |
| B_STATIC_VALUE => 93) ; |
| |
| BEGIN -- SECOND_STATIC_ARRAY |
| NEW_P2D (LOWER => 5, |
| UPPER => 95); |
| EXCEPTION |
| WHEN OTHERS => |
| REPORT.FAILED ("EXCEPTION RAISED IN CALL TO NEW_P2D"); |
| END SECOND_STATIC_ARRAY ; |
| |
| -------------------------------------------------- |
| |
| REC_NON_STATIC_CONS: |
| |
| DECLARE |
| |
| -- (E) A RECORD PARAMETER WITH A NON-STATIC CONSTRAINT |
| -- INITIALIZED WITH A STATIC AGGREGATE. |
| |
| TYPE NUMBER IS RANGE 1 .. 100 ; |
| |
| GENERIC |
| |
| TYPE INTEGER_TYPE IS RANGE <> ; |
| F_STATIC_VALUE : IN INTEGER_TYPE ; |
| S_STATIC_VALUE : IN INTEGER_TYPE ; |
| T_STATIC_VALUE : IN INTEGER_TYPE ; |
| L_STATIC_VALUE : IN INTEGER_TYPE ; |
| D_STATIC_VALUE : IN INTEGER_TYPE ; |
| |
| PROCEDURE PE (LOWER : IN INTEGER_TYPE ; |
| UPPER : IN INTEGER_TYPE) ; |
| |
| PROCEDURE PE (LOWER : IN INTEGER_TYPE ; |
| UPPER : IN INTEGER_TYPE) IS |
| |
| SUBTYPE SUBINTEGER_TYPE IS INTEGER_TYPE |
| RANGE LOWER .. UPPER ; |
| TYPE AR1 IS ARRAY (INTEGER RANGE 1..3) OF |
| SUBINTEGER_TYPE ; |
| |
| TYPE REC (DISCRIM : SUBINTEGER_TYPE) IS |
| RECORD |
| FIRST : SUBINTEGER_TYPE ; |
| SECOND : AR1 ; |
| END RECORD ; |
| |
| SUBTYPE REC4 IS REC (LOWER) ; |
| |
| PROCEDURE PE1 (R : REC4 := (D_STATIC_VALUE, |
| F_STATIC_VALUE, |
| (S_STATIC_VALUE, |
| T_STATIC_VALUE, |
| L_STATIC_VALUE))) IS |
| BEGIN -- PE1 |
| REPORT.FAILED ("BODY OF PE1 EXECUTED"); |
| EXCEPTION |
| WHEN OTHERS => |
| REPORT.FAILED ("EXCEPTION RAISED IN PE1"); |
| END PE1; |
| |
| BEGIN -- PE |
| PE1; |
| EXCEPTION |
| WHEN CONSTRAINT_ERROR => |
| NULL; |
| WHEN OTHERS => |
| REPORT.FAILED ("WRONG EXCEPTION RAISED - PE1"); |
| END PE; |
| |
| PROCEDURE NEW_PE IS NEW PE (INTEGER_TYPE => NUMBER, |
| F_STATIC_VALUE => 37, |
| S_STATIC_VALUE => 21, |
| T_STATIC_VALUE => 67, |
| L_STATIC_VALUE => 79, |
| D_STATIC_VALUE => 44) ; |
| |
| BEGIN -- REC_NON_STATIC_CONS |
| NEW_PE (LOWER => 2, |
| UPPER => 99); |
| EXCEPTION |
| WHEN OTHERS => |
| REPORT.FAILED ("EXCEPTION RAISED IN CALL TO NEW_PE"); |
| END REC_NON_STATIC_CONS ; |
| |
| -------------------------------------------------- |
| |
| REPORT.RESULT; |
| |
| END CC3017B; |