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
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
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
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 (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
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
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 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 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 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 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 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 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 RETURN A;
END;
PROCEDURE P2 (OUTVAR : OUT NUMBERS; INVAR : NUMBERS := TWO) IS
BEGIN 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
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
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
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 ;