| -- CC1311B.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 IF PARAMETERS OF DEFAULT AND FORMAL SUBPROGRAMS HAVE |
| -- THE SAME TYPE BUT NOT THE SAME SUBTYPE, THE PARAMETER SUBTYPES OF |
| -- THE SUBPROGRAM DENOTED BY THE DEFAULT ARE USED INSTEAD OF |
| -- SUBTYPES SPECIFIED IN THE FORMAL SUBPROGRAM DECLARATION. |
| |
| -- HISTORY: |
| -- RJW 06/11/86 CREATED ORIGINAL TEST. |
| -- DHH 10/20/86 CORRECTED RANGE ERRORS. |
| -- PWN 01/31/95 REMOVED INCONSISTENCIES WITH ADA 9X. |
| -- PWN 10/27/95 REMOVED CHECKS AGAINST ARRAY SLIDING RULES THAT |
| -- HAVE BEEN RELAXED. |
| -- PWN 10/25/96 RESTORED CHECKS WITH NEW ADA 95 EXPECTED RESULTS. |
| |
| WITH REPORT; USE REPORT; |
| |
| PROCEDURE CC1311B IS |
| |
| BEGIN |
| TEST ("CC1311B", "CHECK THAT IF PARAMETERS OF DEFAULT AND " & |
| "FORMAL SUBPROGRAMS HAVE THE SAME TYPE BUT " & |
| "NOT THE SAME SUBTYPE, THE PARAMETER SUBTYPES " & |
| "OF THE SUBPROGRAM DENOTED BY THE DEFAULT ARE " & |
| "USED INSTEAD OF SUBTYPES SPECIFIED IN THE " & |
| "FORMAL SUBPROGRAM DECLARATION" ); |
| |
| DECLARE |
| TYPE NUMBERS IS (ZERO, ONE ,TWO); |
| SUBTYPE ZERO_TWO IS NUMBERS; |
| SUBTYPE ZERO_ONE IS NUMBERS RANGE ZERO .. ONE; |
| |
| FUNCTION FSUB (X : ZERO_ONE) RETURN ZERO_ONE IS |
| BEGIN |
| RETURN NUMBERS'VAL (IDENT_INT (NUMBERS'POS (ONE))); |
| END FSUB; |
| |
| GENERIC |
| WITH FUNCTION F (X : ZERO_TWO := TWO) RETURN ZERO_TWO |
| IS FSUB; |
| FUNCTION FUNC RETURN ZERO_TWO; |
| |
| FUNCTION FUNC RETURN ZERO_TWO IS |
| BEGIN |
| RETURN F; |
| EXCEPTION |
| WHEN CONSTRAINT_ERROR => |
| RETURN ZERO; |
| WHEN OTHERS => |
| FAILED ( "WRONG EXCEPTION RAISED WITH " & |
| "NFUNC1" ); |
| RETURN ZERO; |
| END FUNC; |
| |
| FUNCTION NFUNC1 IS NEW FUNC; |
| |
| BEGIN |
| IF NFUNC1 = ONE THEN |
| FAILED ( "NO EXCEPTION RAISED WITH NFUNC1" ); |
| END IF; |
| END; |
| |
| DECLARE |
| TYPE GENDER IS (MALE, FEMALE); |
| |
| TYPE PERSON (SEX : GENDER) IS |
| RECORD |
| CASE SEX IS |
| WHEN MALE => |
| BEARDED : BOOLEAN; |
| WHEN FEMALE => |
| CHILDREN : INTEGER; |
| END CASE; |
| END RECORD; |
| |
| SUBTYPE MAN IS PERSON (SEX => MALE); |
| SUBTYPE TESTWRITER IS PERSON (FEMALE); |
| |
| ROSA : TESTWRITER := (FEMALE, 4); |
| |
| FUNCTION F (X : MAN) RETURN PERSON IS |
| TOM : PERSON (MALE) := (MALE, FALSE); |
| BEGIN |
| IF EQUAL (3, 3) THEN |
| RETURN X; |
| ELSE |
| RETURN TOM; |
| END IF; |
| END F; |
| |
| GENERIC |
| TYPE T IS PRIVATE; |
| X1 : T; |
| WITH FUNCTION F (X : T) RETURN T IS <> ; |
| PACKAGE PKG IS END PKG; |
| |
| PACKAGE BODY PKG IS |
| BEGIN |
| IF F(X1) = X1 THEN |
| FAILED ( "NO EXCEPTION RAISED WITH " & |
| "FUNCTION 'F' AND PACKAGE " & |
| "'PKG' - 1" ); |
| ELSE |
| FAILED ( "NO EXCEPTION RAISED WITH " & |
| "FUNCTION 'F' AND PACKAGE " & |
| "'PKG' - 2" ); |
| END IF; |
| EXCEPTION |
| WHEN CONSTRAINT_ERROR => |
| NULL; |
| WHEN OTHERS => |
| FAILED ( "WRONG EXCEPTION RAISED WITH " & |
| "FUNCTION 'F' AND PACKAGE 'PKG'" ); |
| END PKG; |
| |
| PACKAGE NPKG IS NEW PKG (TESTWRITER, ROSA); |
| |
| BEGIN |
| COMMENT ( "PACKAGE BODY ELABORATED - 1" ); |
| END; |
| |
| DECLARE |
| TYPE VECTOR IS ARRAY (POSITIVE RANGE <>) OF INTEGER; |
| SUBTYPE SUBV1 IS VECTOR (1 .. 5); |
| SUBTYPE SUBV2 IS VECTOR (2 .. 6); |
| |
| V1 : SUBV1 := (1, 2, 3, 4, 5); |
| |
| FUNCTION FSUB (Y : SUBV2) RETURN VECTOR IS |
| Z : SUBV2; |
| BEGIN |
| FOR I IN Y'RANGE LOOP |
| Z (I) := IDENT_INT (Y (I)); |
| END LOOP; |
| RETURN Z; |
| END; |
| |
| GENERIC |
| WITH FUNCTION F (X : SUBV1 := V1) RETURN SUBV1 IS FSUB; |
| PROCEDURE PROC; |
| |
| PROCEDURE PROC IS |
| BEGIN |
| IF F = V1 THEN |
| COMMENT ( "NO EXCEPTION RAISED WITH " & |
| "FUNCTION 'F' AND PROCEDURE " & |
| "'PROC' - 1" ); |
| ELSE |
| COMMENT ( "NO EXCEPTION RAISED WITH " & |
| "FUNCTION 'F' AND PROCEDURE " & |
| "'PROC' - 2" ); |
| END IF; |
| EXCEPTION |
| WHEN CONSTRAINT_ERROR => |
| FAILED ( "CONSTRAINT_ERROR RAISED WITH " & |
| "FUNCTION 'F' AND PROCEDURE " & |
| "'PROC'" ); |
| WHEN OTHERS => |
| FAILED ( "WRONG EXCEPTION RAISED WITH " & |
| "FUNCTION 'F' AND PROCEDURE " & |
| "'PROC'" ); |
| END PROC; |
| |
| PROCEDURE NPROC IS NEW PROC; |
| BEGIN |
| NPROC; |
| END; |
| |
| DECLARE |
| |
| TYPE ACC IS ACCESS STRING; |
| |
| SUBTYPE INDEX1 IS INTEGER RANGE 1 .. 5; |
| SUBTYPE INDEX2 IS INTEGER RANGE 2 .. 6; |
| |
| SUBTYPE ACC1 IS ACC (INDEX1); |
| SUBTYPE ACC2 IS ACC (INDEX2); |
| |
| AC2 : ACC2 := NEW STRING'(2 .. 6 => 'A'); |
| AC : ACC; |
| |
| PROCEDURE P (RESULTS : OUT ACC1; X : ACC1) IS |
| BEGIN |
| RESULTS := NULL; |
| END P; |
| |
| GENERIC |
| WITH PROCEDURE P1 (RESULTS : OUT ACC2; X : ACC2 := AC2) |
| IS P; |
| FUNCTION FUNC RETURN ACC; |
| |
| FUNCTION FUNC RETURN ACC IS |
| RESULTS : ACC; |
| BEGIN |
| P1 (RESULTS); |
| RETURN RESULTS; |
| EXCEPTION |
| WHEN CONSTRAINT_ERROR => |
| RETURN NEW STRING'("ABCDE"); |
| WHEN OTHERS => |
| FAILED ( "WRONG EXCEPTION RAISED WITH " & |
| "NFUNC2" ); |
| RETURN NULL; |
| END FUNC; |
| |
| FUNCTION NFUNC2 IS NEW FUNC; |
| |
| BEGIN |
| AC := NFUNC2; |
| IF AC = NULL OR ELSE AC.ALL /= "ABCDE" THEN |
| FAILED ( "NO OR WRONG EXCEPTION RAISED WITH NFUNC2" ); |
| END IF; |
| END; |
| |
| DECLARE |
| SUBTYPE FLOAT1 IS FLOAT RANGE -1.0 .. 0.0; |
| SUBTYPE FLOAT2 IS FLOAT RANGE 0.0 .. 1.0; |
| |
| PROCEDURE PSUB (RESULTS : OUT FLOAT2; X : FLOAT2) IS |
| BEGIN |
| IF EQUAL (3, 3) THEN |
| RESULTS := X; |
| ELSE |
| RESULTS := 0.0; |
| END IF; |
| END PSUB; |
| |
| GENERIC |
| WITH PROCEDURE P (RESULTS : OUT FLOAT1; |
| X : FLOAT1 := -0.0625) IS PSUB; |
| PACKAGE PKG IS END PKG; |
| |
| PACKAGE BODY PKG IS |
| RESULTS : FLOAT1; |
| BEGIN |
| P (RESULTS); |
| IF RESULTS = 1.0 THEN |
| FAILED ( "NO EXCEPTION RAISED WITH " & |
| "PROCEDURE 'P' AND PACKAGE " & |
| "'PKG' - 1" ); |
| ELSE |
| FAILED ( "NO EXCEPTION RAISED WITH " & |
| "PROCEDURE 'P' AND PACKAGE " & |
| "'PKG' - 2" ); |
| END IF; |
| EXCEPTION |
| WHEN CONSTRAINT_ERROR => |
| NULL; |
| WHEN OTHERS => |
| FAILED ( "WRONG EXCEPTION RAISED WITH " & |
| "PROCEDURE 'P' AND PACKAGE 'PKG'" ); |
| END PKG; |
| |
| PACKAGE NPKG IS NEW PKG; |
| BEGIN |
| COMMENT ( "PACKAGE BODY ELABORATED - 2" ); |
| END; |
| |
| DECLARE |
| TYPE FIXED IS DELTA 0.125 RANGE -1.0 .. 1.0; |
| SUBTYPE FIXED1 IS FIXED RANGE -0.5 .. 0.0; |
| SUBTYPE FIXED2 IS FIXED RANGE 0.0 .. 0.5; |
| |
| PROCEDURE P (RESULTS : OUT FIXED1; X : FIXED1) IS |
| BEGIN |
| IF EQUAL (3, 3) THEN |
| RESULTS := X; |
| ELSE |
| RESULTS := X; |
| END IF; |
| END P; |
| |
| GENERIC |
| TYPE F IS DELTA <>; |
| F1 : F; |
| WITH PROCEDURE P (RESULTS : OUT F; X : F) IS <> ; |
| PROCEDURE PROC; |
| |
| PROCEDURE PROC IS |
| RESULTS : F; |
| BEGIN |
| P (RESULTS, F1); |
| IF RESULTS = 0.0 THEN |
| FAILED ( "NO EXCEPTION RAISED WITH " & |
| "PROCEDURE 'P' AND PROCEDURE " & |
| "'PROC' - 1" ); |
| ELSE |
| FAILED ( "NO EXCEPTION RAISED WITH " & |
| "PROCEDURE 'P' AND PROCEDURE " & |
| "'PROC' - 2" ); |
| END IF; |
| EXCEPTION |
| WHEN CONSTRAINT_ERROR => |
| NULL; |
| WHEN OTHERS => |
| FAILED ( "WRONG EXCEPTION RAISED WITH " & |
| "PROCEDURE 'P' AND PROCEDURE " & |
| "'PROC'" ); |
| END PROC; |
| |
| PROCEDURE NPROC IS NEW PROC (FIXED2, 0.125); |
| |
| BEGIN |
| NPROC; |
| END; |
| |
| RESULT; |
| |
| END CC1311B; |