blob: ce38abe55d11699c47684079eaf4ca1381bc17aa [file] [log] [blame]
-- CC1311A.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 THE DEFAULT EXPRESSIONS OF THE PARAMETERS OF A FORMAL
-- SUBPROGRAM ARE USED INSTEAD OF THE DEFAULTS (IF ANY) OF THE
-- ACTUAL SUBPROGRAM PARAMETER.
-- HISTORY:
-- RJW 06/05/86 CREATED ORIGINAL TEST.
-- VCL 08/18/87 CHANGED A COUPLE OF STATIC DEFAULT EXPRESSIONS FOR
-- FORMAL SUBPROGRAM PARAMETERS TO DYNAMIC
-- EXPRESSIONS VIA THE USE OF THE IDENTITY FUNCTION.
-- EDWARD V. BERARD 08/13/90
-- ADDED CHECKS FOR MULTI-DIMENSIONAL ARRAYS.
WITH REPORT ;
PROCEDURE CC1311A IS
TYPE NUMBERS IS (ZERO, ONE ,TWO);
SHORT_START : CONSTANT := -100 ;
SHORT_END : CONSTANT := 100 ;
TYPE SHORT_RANGE IS RANGE SHORT_START .. SHORT_END ;
SUBTYPE REALLY_SHORT IS SHORT_RANGE RANGE -9 .. 0 ;
TYPE MONTH_TYPE IS (JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG,
SEP, OCT, NOV, DEC) ;
SUBTYPE FIRST_HALF IS MONTH_TYPE RANGE JAN .. JUN ;
TYPE DAY_TYPE IS RANGE 1 .. 31 ;
TYPE YEAR_TYPE IS RANGE 1904 .. 2050 ;
TYPE DATE IS RECORD
MONTH : MONTH_TYPE ;
DAY : DAY_TYPE ;
YEAR : YEAR_TYPE ;
END RECORD ;
TODAY : DATE := (MONTH => AUG,
DAY => 8,
YEAR => 1990) ;
FIRST_DATE : DATE := (DAY => 6,
MONTH => JUN,
YEAR => 1967) ;
SUBTYPE FIRST_FIVE IS CHARACTER RANGE 'A' .. 'E' ;
TYPE THREE_DIMENSIONAL IS ARRAY (REALLY_SHORT,
FIRST_HALF,
FIRST_FIVE) OF DATE ;
GENERIC
TYPE FIRST_INDEX IS (<>) ;
TYPE SECOND_INDEX IS (<>) ;
TYPE THIRD_INDEX IS (<>) ;
TYPE COMPONENT_TYPE IS PRIVATE ;
DEFAULT_VALUE : IN COMPONENT_TYPE ;
TYPE CUBE IS ARRAY (FIRST_INDEX,
SECOND_INDEX,
THIRD_INDEX) OF COMPONENT_TYPE ;
WITH FUNCTION FUN (FIRST : IN CUBE := (CUBE'RANGE =>
(CUBE'RANGE (2) =>
(CUBE'RANGE (3) =>
DEFAULT_VALUE))))
RETURN CUBE ;
PROCEDURE PROC_WITH_3D_FUNC ;
PROCEDURE PROC_WITH_3D_FUNC IS
BEGIN -- PROC_WITH_3D_FUNC
IF FUN /= CUBE'(CUBE'RANGE =>
(CUBE'RANGE (2) =>
(CUBE'RANGE (3) => DEFAULT_VALUE))) THEN
REPORT.FAILED ("PROBLEMS WITH THREE DIMENSIONAL " &
"ARRAY, FUNCTION, AND PROCEDURE.") ;
END IF ;
END PROC_WITH_3D_FUNC ;
GENERIC
TYPE FIRST_INDEX IS (<>) ;
TYPE SECOND_INDEX IS (<>) ;
TYPE THIRD_INDEX IS (<>) ;
TYPE COMPONENT_TYPE IS PRIVATE ;
DEFAULT_VALUE : IN COMPONENT_TYPE ;
TYPE CUBE IS ARRAY (FIRST_INDEX,
SECOND_INDEX,
THIRD_INDEX) OF COMPONENT_TYPE ;
WITH FUNCTION FUN (FIRST : IN CUBE := (CUBE'RANGE =>
(CUBE'RANGE (2) =>
(CUBE'RANGE (3) =>
DEFAULT_VALUE))))
RETURN CUBE ;
PACKAGE PKG_WITH_3D_FUNC IS
END PKG_WITH_3D_FUNC ;
PACKAGE BODY PKG_WITH_3D_FUNC IS
BEGIN -- PKG_WITH_3D_FUNC
REPORT.TEST("CC1311A","CHECK THAT THE DEFAULT EXPRESSIONS " &
"OF THE PARAMETERS OF A FORMAL SUBPROGRAM ARE " &
"USED INSTEAD OF THE DEFAULTS (IF ANY) OF THE " &
"ACTUAL SUBPROGRAM PARAMETER" ) ;
IF FUN /= CUBE'(CUBE'RANGE =>
(CUBE'RANGE (2) =>
(CUBE'RANGE (3) => DEFAULT_VALUE))) THEN
REPORT.FAILED ("PROBLEMS WITH THREE DIMENSIONAL " &
"ARRAY, FUNCTION, AND PACKAGE.") ;
END IF ;
END PKG_WITH_3D_FUNC ;
GENERIC
TYPE FIRST_INDEX IS (<>) ;
TYPE SECOND_INDEX IS (<>) ;
TYPE THIRD_INDEX IS (<>) ;
TYPE COMPONENT_TYPE IS PRIVATE ;
DEFAULT_VALUE : IN COMPONENT_TYPE ;
TYPE CUBE IS ARRAY (FIRST_INDEX,
SECOND_INDEX,
THIRD_INDEX) OF COMPONENT_TYPE ;
WITH FUNCTION FUN (FIRST : IN CUBE := (CUBE'RANGE =>
(CUBE'RANGE (2) =>
(CUBE'RANGE (3) =>
DEFAULT_VALUE))))
RETURN CUBE ;
FUNCTION FUNC_WITH_3D_FUNC RETURN BOOLEAN ;
FUNCTION FUNC_WITH_3D_FUNC RETURN BOOLEAN IS
BEGIN -- FUNC_WITH_3D_FUNC
RETURN FUN = CUBE'(CUBE'RANGE =>
(CUBE'RANGE (2) =>
(CUBE'RANGE (3) => DEFAULT_VALUE))) ;
END FUNC_WITH_3D_FUNC ;
GENERIC
TYPE FIRST_INDEX IS (<>) ;
TYPE SECOND_INDEX IS (<>) ;
TYPE THIRD_INDEX IS (<>) ;
TYPE COMPONENT_TYPE IS PRIVATE ;
DEFAULT_VALUE : IN COMPONENT_TYPE ;
TYPE CUBE IS ARRAY (FIRST_INDEX,
SECOND_INDEX,
THIRD_INDEX) OF COMPONENT_TYPE ;
WITH PROCEDURE PROC (INPUT : IN CUBE := (CUBE'RANGE =>
(CUBE'RANGE (2) =>
(CUBE'RANGE (3) =>
DEFAULT_VALUE))) ;
OUTPUT : OUT CUBE) ;
PROCEDURE PROC_WITH_3D_PROC ;
PROCEDURE PROC_WITH_3D_PROC IS
RESULTS : CUBE ;
BEGIN -- PROC_WITH_3D_PROC
PROC (OUTPUT => RESULTS) ;
IF RESULTS /= CUBE'(CUBE'RANGE =>
(CUBE'RANGE (2) =>
(CUBE'RANGE (3) => DEFAULT_VALUE))) THEN
REPORT.FAILED ("PROBLEMS WITH THREE DIMENSIONAL " &
"ARRAY, PROCEDURE, AND PROCEDURE.") ;
END IF ;
END PROC_WITH_3D_PROC ;
GENERIC
TYPE FIRST_INDEX IS (<>) ;
TYPE SECOND_INDEX IS (<>) ;
TYPE THIRD_INDEX IS (<>) ;
TYPE COMPONENT_TYPE IS PRIVATE ;
DEFAULT_VALUE : IN COMPONENT_TYPE ;
TYPE CUBE IS ARRAY (FIRST_INDEX,
SECOND_INDEX,
THIRD_INDEX) OF COMPONENT_TYPE ;
WITH PROCEDURE PROC (INPUT : IN CUBE := (CUBE'RANGE =>
(CUBE'RANGE (2) =>
(CUBE'RANGE (3) =>
DEFAULT_VALUE))) ;
OUTPUT : OUT CUBE) ;
PACKAGE PKG_WITH_3D_PROC IS
END PKG_WITH_3D_PROC ;
PACKAGE BODY PKG_WITH_3D_PROC IS
RESULTS : CUBE ;
BEGIN -- PKG_WITH_3D_PROC
PROC (OUTPUT => RESULTS) ;
IF RESULTS /= CUBE'(CUBE'RANGE =>
(CUBE'RANGE (2) =>
(CUBE'RANGE (3) => DEFAULT_VALUE))) THEN
REPORT.FAILED ("PROBLEMS WITH THREE DIMENSIONAL " &
"ARRAY, PROCEDURE, AND PACKAGE.") ;
END IF ;
END PKG_WITH_3D_PROC ;
GENERIC
TYPE FIRST_INDEX IS (<>) ;
TYPE SECOND_INDEX IS (<>) ;
TYPE THIRD_INDEX IS (<>) ;
TYPE COMPONENT_TYPE IS PRIVATE ;
DEFAULT_VALUE : IN COMPONENT_TYPE ;
TYPE CUBE IS ARRAY (FIRST_INDEX,
SECOND_INDEX,
THIRD_INDEX) OF COMPONENT_TYPE ;
WITH PROCEDURE PROC (INPUT : IN CUBE := (CUBE'RANGE =>
(CUBE'RANGE (2) =>
(CUBE'RANGE (3) =>
DEFAULT_VALUE))) ;
OUTPUT : OUT CUBE) ;
FUNCTION FUNC_WITH_3D_PROC RETURN BOOLEAN ;
FUNCTION FUNC_WITH_3D_PROC RETURN BOOLEAN IS
RESULTS : CUBE ;
BEGIN -- FUNC_WITH_3D_PROC
PROC (OUTPUT => RESULTS) ;
RETURN RESULTS = CUBE'(CUBE'RANGE =>
(CUBE'RANGE (2) =>
(CUBE'RANGE (3) => DEFAULT_VALUE))) ;
END FUNC_WITH_3D_PROC ;
GENERIC
TYPE T IS (<>);
WITH FUNCTION F (X : T := T'VAL (0)) RETURN T;
FUNCTION FUNC1 RETURN BOOLEAN;
FUNCTION FUNC1 RETURN BOOLEAN IS
BEGIN -- FUNC1
RETURN F = T'VAL (0);
END FUNC1;
GENERIC
TYPE T IS (<>);
WITH FUNCTION F (X : T := T'VAL (REPORT.IDENT_INT(0)))
RETURN T;
PACKAGE PKG1 IS END PKG1;
PACKAGE BODY PKG1 IS
BEGIN -- PKG1
IF F /= T'VAL (0) THEN
REPORT.FAILED ("INCORRECT DEFAULT VALUE WITH " &
"FUNCTION 'F' AND PACKAGE 'PKG1'" );
END IF;
END PKG1;
GENERIC
TYPE T IS (<>);
WITH FUNCTION F (X : T := T'VAL (0)) RETURN T;
PROCEDURE PROC1;
PROCEDURE PROC1 IS
BEGIN -- PROC1
IF F /= T'VAL (0) THEN
REPORT.FAILED ("INCORRECT DEFAULT VALUE WITH " &
"FUNCTION 'F' AND PROCEDURE 'PROC1'" );
END IF;
END PROC1;
GENERIC
TYPE T IS (<>);
WITH PROCEDURE P (RESULTS : OUT T ;
X : T := T'VAL (0)) ;
FUNCTION FUNC2 RETURN BOOLEAN;
FUNCTION FUNC2 RETURN BOOLEAN IS
RESULTS : T;
BEGIN -- FUNC2
P (RESULTS);
RETURN RESULTS = T'VAL (0);
END FUNC2;
GENERIC
TYPE T IS (<>);
WITH PROCEDURE P (RESULTS : OUT T;
X : T := T'VAL(REPORT.IDENT_INT(0)));
PACKAGE PKG2 IS END PKG2 ;
PACKAGE BODY PKG2 IS
RESULTS : T;
BEGIN -- PKG2
P (RESULTS);
IF RESULTS /= T'VAL (0) THEN
REPORT.FAILED ("INCORRECT DEFAULT VALUE WITH " &
"PROCEDURE 'P' AND PACKAGE 'PKG2'" );
END IF;
END PKG2;
GENERIC
TYPE T IS (<>);
WITH PROCEDURE P (RESULTS :OUT T; X : T := T'VAL (0));
PROCEDURE PROC2;
PROCEDURE PROC2 IS
RESULTS : T;
BEGIN -- PROC2
P (RESULTS);
IF RESULTS /= T'VAL (0) THEN
REPORT.FAILED ("INCORRECT DEFAULT VALUE WITH " &
"PROCEDURE 'P' AND PROCEDURE 'PROC2'" );
END IF;
END PROC2;
FUNCTION F1 (A : NUMBERS := ONE) RETURN NUMBERS IS
BEGIN -- F1
RETURN A;
END;
PROCEDURE P2 (OUTVAR : OUT NUMBERS; INVAR : NUMBERS := TWO) IS
BEGIN -- P2
OUTVAR := INVAR;
END;
FUNCTION TD_FUNC (FIRST : IN THREE_DIMENSIONAL :=
(THREE_DIMENSIONAL'RANGE =>
(THREE_DIMENSIONAL'RANGE (2) =>
(THREE_DIMENSIONAL'RANGE (3) =>
FIRST_DATE))))
RETURN THREE_DIMENSIONAL IS
BEGIN -- TD_FUNC
RETURN FIRST ;
END TD_FUNC ;
PROCEDURE TD_PROC (INPUT : IN THREE_DIMENSIONAL :=
(THREE_DIMENSIONAL'RANGE =>
(THREE_DIMENSIONAL'RANGE (2) =>
(THREE_DIMENSIONAL'RANGE (3) =>
FIRST_DATE))) ;
OUTPUT : OUT THREE_DIMENSIONAL) IS
BEGIN -- TD_PROC
OUTPUT := INPUT ;
END TD_PROC ;
PROCEDURE NEW_PROC_WITH_3D_FUNC IS NEW
PROC_WITH_3D_FUNC (FIRST_INDEX => REALLY_SHORT,
SECOND_INDEX => FIRST_HALF,
THIRD_INDEX => FIRST_FIVE,
COMPONENT_TYPE => DATE,
DEFAULT_VALUE => TODAY,
CUBE => THREE_DIMENSIONAL,
FUN => TD_FUNC) ;
PACKAGE NEW_PKG_WITH_3D_FUNC IS NEW
PKG_WITH_3D_FUNC (FIRST_INDEX => REALLY_SHORT,
SECOND_INDEX => FIRST_HALF,
THIRD_INDEX => FIRST_FIVE,
COMPONENT_TYPE => DATE,
DEFAULT_VALUE => TODAY,
CUBE => THREE_DIMENSIONAL,
FUN => TD_FUNC) ;
FUNCTION NEW_FUNC_WITH_3D_FUNC IS NEW
FUNC_WITH_3D_FUNC (FIRST_INDEX => REALLY_SHORT,
SECOND_INDEX => FIRST_HALF,
THIRD_INDEX => FIRST_FIVE,
COMPONENT_TYPE => DATE,
DEFAULT_VALUE => TODAY,
CUBE => THREE_DIMENSIONAL,
FUN => TD_FUNC) ;
PROCEDURE NEW_PROC_WITH_3D_PROC IS NEW
PROC_WITH_3D_PROC (FIRST_INDEX => REALLY_SHORT,
SECOND_INDEX => FIRST_HALF,
THIRD_INDEX => FIRST_FIVE,
COMPONENT_TYPE => DATE,
DEFAULT_VALUE => TODAY,
CUBE => THREE_DIMENSIONAL,
PROC => TD_PROC) ;
PACKAGE NEW_PKG_WITH_3D_PROC IS NEW
PKG_WITH_3D_PROC (FIRST_INDEX => REALLY_SHORT,
SECOND_INDEX => FIRST_HALF,
THIRD_INDEX => FIRST_FIVE,
COMPONENT_TYPE => DATE,
DEFAULT_VALUE => TODAY,
CUBE => THREE_DIMENSIONAL,
PROC => TD_PROC) ;
FUNCTION NEW_FUNC_WITH_3D_PROC IS NEW
FUNC_WITH_3D_PROC (FIRST_INDEX => REALLY_SHORT,
SECOND_INDEX => FIRST_HALF,
THIRD_INDEX => FIRST_FIVE,
COMPONENT_TYPE => DATE,
DEFAULT_VALUE => TODAY,
CUBE => THREE_DIMENSIONAL,
PROC => TD_PROC) ;
FUNCTION NFUNC1 IS NEW FUNC1 (NUMBERS, F1);
PACKAGE NPKG1 IS NEW PKG1 (NUMBERS, F1);
PROCEDURE NPROC1 IS NEW PROC1 (NUMBERS, F1);
FUNCTION NFUNC2 IS NEW FUNC2 (NUMBERS, P2);
PACKAGE NPKG2 IS NEW PKG2 (NUMBERS, P2);
PROCEDURE NPROC2 IS NEW PROC2 (NUMBERS, P2);
BEGIN -- CC1311A
IF NOT NFUNC1 THEN
REPORT.FAILED ("INCORRECT DEFAULT VALUE " &
"WITH FUNCTION 'NFUNC1'" ) ;
END IF ;
IF NOT NFUNC2 THEN
REPORT.FAILED ("INCORRECT DEFAULT VALUE " &
"WITH FUNCTION 'NFUNC2'" ) ;
END IF ;
NPROC1 ;
NPROC2 ;
NEW_PROC_WITH_3D_FUNC ;
IF NOT NEW_FUNC_WITH_3D_FUNC THEN
REPORT.FAILED ("PROBLEMS WITH THREE DIMENSIONAL ARRAY, " &
"FUNCTION, AND FUNCTION.") ;
END IF ;
NEW_PROC_WITH_3D_PROC ;
IF NOT NEW_FUNC_WITH_3D_PROC THEN
REPORT.FAILED ("PROBLEMS WITH THREE DIMENSIONAL ARRAY, " &
"FUNCTION, AND PROCEDURE.") ;
END IF ;
REPORT.RESULT ;
END CC1311A ;