blob: 2fbc090625b94d6a3a7aaddf03da58a288f83945 [file] [log] [blame]
-- CC3016B.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 PACKAGE MUST DECLARE A
-- PACKAGE. CHECK THAT THE DECLARATIVE ITEMS IN AN INSTANTIATION
-- OF A GENERIC PACKAGE SPECIFICATION ARE ELABORATED IN THE ORDER
-- DECLARED.
-- HISTORY:
-- EDWARD V. BERARD, 8 AUGUST 1990
WITH REPORT ;
PROCEDURE CC3016B IS
WHEN_ELABORATED : NATURAL := 0 ;
TYPE REAL IS DIGITS 6 ;
REAL_VALUE : REAL := 3.14159 ;
TRUE_VALUE : BOOLEAN := TRUE ;
CHARACTER_VALUE : CHARACTER := 'Z' ;
TYPE MONTH_TYPE IS (JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG,
SEP, OCT, NOV, DEC) ;
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 ;
TYPE DATE_ACCESS IS ACCESS DATE ;
THIS_MONTH : MONTH_TYPE := AUG ;
THIS_YEAR : YEAR_TYPE := 1990 ;
TODAY : DATE := (MONTH => AUG,
DAY => 8,
YEAR => 1990) ;
FIRST_DATE : DATE_ACCESS := NEW DATE'(DAY => 6,
MONTH => JUN,
YEAR => 1967) ;
TYPE DUE_DATES IS ARRAY (MONTH_TYPE RANGE JAN .. DEC) OF DATE ;
REPORT_DATES : DUE_DATES := ((JAN, 23, 1990), (FEB, 23, 1990),
(MAR, 23, 1990), (APR, 23, 1990),
(MAY, 23, 1990), (JUN, 22, 1990),
(JUL, 23, 1990), (AUG, 23, 1990),
(SEP, 24, 1990), (OCT, 23, 1990),
(NOV, 23, 1990), (DEC, 20, 1990)) ;
TYPE LIST_INDEX IS RANGE 1 .. 16 ;
TYPE LIST IS ARRAY (LIST_INDEX) OF NATURAL ;
ORDER_LIST : LIST := (OTHERS => 0) ;
GENERIC
TYPE RETURN_TYPE IS PRIVATE ;
RETURN_VALUE : IN OUT RETURN_TYPE ;
POSITION : IN NATURAL ;
OFFSET : IN NATURAL ;
WHEN_ELAB : IN OUT NATURAL ;
TYPE INDEX IS RANGE <> ;
TYPE LIST IS ARRAY (INDEX) OF NATURAL ;
ORDER_LIST : IN OUT LIST ;
FUNCTION NAME (VALUE : IN NATURAL) RETURN RETURN_TYPE ;
FUNCTION NAME (VALUE : IN NATURAL) RETURN RETURN_TYPE IS
BEGIN -- NAME
IF (VALUE = POSITION) THEN
WHEN_ELAB := NATURAL'SUCC (WHEN_ELAB) ;
ORDER_LIST (INDEX (POSITION)) := WHEN_ELAB ;
RETURN RETURN_VALUE ;
ELSIF (VALUE = (POSITION + OFFSET)) THEN
WHEN_ELAB := NATURAL'SUCC (WHEN_ELAB) ;
ORDER_LIST (INDEX (POSITION + OFFSET)) := WHEN_ELAB ;
RETURN RETURN_VALUE ;
END IF ;
END NAME ;
GENERIC
TYPE FIRST_TYPE IS PRIVATE ;
WITH FUNCTION FIRST (POSITION : IN NATURAL)
RETURN FIRST_TYPE ;
FIRST_VALUE : IN NATURAL ;
TYPE SECOND_TYPE IS PRIVATE ;
WITH FUNCTION SECOND (POSITION : IN NATURAL)
RETURN SECOND_TYPE ;
SECOND_VALUE : IN NATURAL ;
TYPE THIRD_TYPE IS PRIVATE ;
WITH FUNCTION THIRD (POSITION : IN NATURAL)
RETURN THIRD_TYPE ;
THIRD_VALUE : IN NATURAL ;
TYPE FOURTH_TYPE IS PRIVATE ;
WITH FUNCTION FOURTH (POSITION : IN NATURAL)
RETURN FOURTH_TYPE ;
FOURTH_VALUE : IN NATURAL ;
TYPE FIFTH_TYPE IS PRIVATE ;
WITH FUNCTION FIFTH (POSITION : IN NATURAL)
RETURN FIFTH_TYPE ;
FIFTH_VALUE : IN NATURAL ;
TYPE SIXTH_TYPE IS PRIVATE ;
WITH FUNCTION SIXTH (POSITION : IN NATURAL)
RETURN SIXTH_TYPE ;
SIXTH_VALUE : IN NATURAL ;
TYPE SEVENTH_TYPE IS PRIVATE ;
WITH FUNCTION SEVENTH (POSITION : IN NATURAL)
RETURN SEVENTH_TYPE ;
SEVENTH_VALUE : IN NATURAL ;
TYPE EIGHTH_TYPE IS PRIVATE ;
WITH FUNCTION EIGHTH (POSITION : IN NATURAL)
RETURN EIGHTH_TYPE ;
EIGHTH_VALUE : IN NATURAL ;
TYPE NINTH_TYPE IS PRIVATE ;
WITH FUNCTION NINTH (POSITION : IN NATURAL)
RETURN NINTH_TYPE ;
NINTH_VALUE : IN NATURAL ;
TYPE TENTH_TYPE IS PRIVATE ;
WITH FUNCTION TENTH (POSITION : IN NATURAL)
RETURN TENTH_TYPE ;
TENTH_VALUE : IN NATURAL ;
TYPE ELEVENTH_TYPE IS PRIVATE ;
WITH FUNCTION ELEVENTH (POSITION : IN NATURAL)
RETURN ELEVENTH_TYPE ;
ELEVENTH_VALUE : IN NATURAL ;
TYPE TWELFTH_TYPE IS PRIVATE ;
WITH FUNCTION TWELFTH (POSITION : IN NATURAL)
RETURN TWELFTH_TYPE ;
TWELFTH_VALUE : IN NATURAL ;
TYPE THIRTEENTH_TYPE IS PRIVATE ;
WITH FUNCTION THIRTEENTH (POSITION : IN NATURAL)
RETURN THIRTEENTH_TYPE ;
THIRTEENTH_VALUE : IN NATURAL ;
TYPE FOURTEENTH_TYPE IS PRIVATE ;
WITH FUNCTION FOURTEENTH (POSITION : IN NATURAL)
RETURN FOURTEENTH_TYPE ;
FOURTEENTH_VALUE : IN NATURAL ;
TYPE FIFTEENTH_TYPE IS PRIVATE ;
WITH FUNCTION FIFTEENTH (POSITION : IN NATURAL)
RETURN FIFTEENTH_TYPE ;
FIFTEENTH_VALUE : IN NATURAL ;
TYPE SIXTEENTH_TYPE IS PRIVATE ;
WITH FUNCTION SIXTEENTH (POSITION : IN NATURAL)
RETURN SIXTEENTH_TYPE ;
SIXTEENTH_VALUE : IN NATURAL ;
PACKAGE ORDER_PACKAGE IS
A : FIRST_TYPE := FIRST (FIRST_VALUE) ;
B : SECOND_TYPE := SECOND (SECOND_VALUE) ;
C : THIRD_TYPE := THIRD (THIRD_VALUE) ;
D : FOURTH_TYPE := FOURTH (FOURTH_VALUE) ;
E : FIFTH_TYPE := FIFTH (FIFTH_VALUE) ;
F : SIXTH_TYPE := SIXTH (SIXTH_VALUE) ;
G : SEVENTH_TYPE := SEVENTH (SEVENTH_VALUE) ;
H : EIGHTH_TYPE := EIGHTH (EIGHTH_VALUE) ;
I : NINTH_TYPE := NINTH (NINTH_VALUE) ;
J : TENTH_TYPE := TENTH (TENTH_VALUE) ;
K : ELEVENTH_TYPE := ELEVENTH (ELEVENTH_VALUE) ;
L : TWELFTH_TYPE := TWELFTH (TWELFTH_VALUE) ;
M : THIRTEENTH_TYPE := THIRTEENTH (THIRTEENTH_VALUE) ;
N : FOURTEENTH_TYPE := FOURTEENTH (FOURTEENTH_VALUE) ;
O : FIFTEENTH_TYPE := FIFTEENTH (FIFTEENTH_VALUE) ;
P : SIXTEENTH_TYPE := SIXTEENTH (SIXTEENTH_VALUE) ;
END ORDER_PACKAGE ;
FUNCTION BOOL IS NEW NAME (RETURN_TYPE => BOOLEAN,
RETURN_VALUE => TRUE_VALUE,
POSITION => 1,
OFFSET => 8,
WHEN_ELAB => WHEN_ELABORATED,
INDEX => LIST_INDEX,
LIST => LIST,
ORDER_LIST => ORDER_LIST) ;
FUNCTION INT IS NEW NAME (RETURN_TYPE => YEAR_TYPE,
RETURN_VALUE => THIS_YEAR,
POSITION => 2,
OFFSET => 8,
WHEN_ELAB => WHEN_ELABORATED,
INDEX => LIST_INDEX,
LIST => LIST,
ORDER_LIST => ORDER_LIST) ;
FUNCTION FLOAT IS NEW NAME (RETURN_TYPE => REAL,
RETURN_VALUE => REAL_VALUE,
POSITION => 3,
OFFSET => 8,
WHEN_ELAB => WHEN_ELABORATED,
INDEX => LIST_INDEX,
LIST => LIST,
ORDER_LIST => ORDER_LIST) ;
FUNCTION CHAR IS NEW NAME (RETURN_TYPE => CHARACTER,
RETURN_VALUE => CHARACTER_VALUE,
POSITION => 4,
OFFSET => 8,
WHEN_ELAB => WHEN_ELABORATED,
INDEX => LIST_INDEX,
LIST => LIST,
ORDER_LIST => ORDER_LIST) ;
FUNCTION ENUM IS NEW NAME (RETURN_TYPE => MONTH_TYPE,
RETURN_VALUE => THIS_MONTH,
POSITION => 5,
OFFSET => 8,
WHEN_ELAB => WHEN_ELABORATED,
INDEX => LIST_INDEX,
LIST => LIST,
ORDER_LIST => ORDER_LIST) ;
FUNCTION ARRY IS NEW NAME (RETURN_TYPE => DUE_DATES,
RETURN_VALUE => REPORT_DATES,
POSITION => 6,
OFFSET => 8,
WHEN_ELAB => WHEN_ELABORATED,
INDEX => LIST_INDEX,
LIST => LIST,
ORDER_LIST => ORDER_LIST) ;
FUNCTION RCRD IS NEW NAME (RETURN_TYPE => DATE,
RETURN_VALUE => TODAY,
POSITION => 7,
OFFSET => 8,
WHEN_ELAB => WHEN_ELABORATED,
INDEX => LIST_INDEX,
LIST => LIST,
ORDER_LIST => ORDER_LIST) ;
FUNCTION ACSS IS NEW NAME (RETURN_TYPE => DATE_ACCESS,
RETURN_VALUE => FIRST_DATE,
POSITION => 8,
OFFSET => 8,
WHEN_ELAB => WHEN_ELABORATED,
INDEX => LIST_INDEX,
LIST => LIST,
ORDER_LIST => ORDER_LIST) ;
PACKAGE ELABORATION_ORDER IS NEW ORDER_PACKAGE
(FIRST_TYPE => BOOLEAN,
FIRST => BOOL,
FIRST_VALUE => 1,
THIRD_TYPE => REAL,
THIRD => FLOAT,
THIRD_VALUE => 3,
SECOND_TYPE => YEAR_TYPE, -- ORDERING OF PARAMETERS
SECOND => INT, -- IS DELIBERATE.
SECOND_VALUE => 2,
FOURTH_TYPE => CHARACTER,
FOURTH => CHAR,
FOURTH_VALUE => 4,
FIFTH_TYPE => MONTH_TYPE,
FIFTH => ENUM,
FIFTH_VALUE => 5,
SIXTH_TYPE => DUE_DATES,
SIXTH => ARRY,
SIXTH_VALUE => 6,
SEVENTH_TYPE => DATE,
SEVENTH => RCRD,
SEVENTH_VALUE => 7,
EIGHTH_TYPE => DATE_ACCESS,
EIGHTH => ACSS,
EIGHTH_VALUE => 8,
NINTH_TYPE => BOOLEAN,
NINTH => BOOL,
NINTH_VALUE => 9,
TENTH_TYPE => YEAR_TYPE,
TENTH => INT,
TENTH_VALUE => 10,
ELEVENTH_TYPE => REAL,
ELEVENTH => FLOAT,
ELEVENTH_VALUE => 11,
TWELFTH_TYPE => CHARACTER,
TWELFTH => CHAR,
TWELFTH_VALUE => 12,
THIRTEENTH_TYPE => MONTH_TYPE,
THIRTEENTH => ENUM,
THIRTEENTH_VALUE => 13,
FOURTEENTH_TYPE => DUE_DATES,
FOURTEENTH => ARRY,
FOURTEENTH_VALUE => 14,
FIFTEENTH_TYPE => DATE,
FIFTEENTH => RCRD,
FIFTEENTH_VALUE => 15,
SIXTEENTH_TYPE => DATE_ACCESS,
SIXTEENTH => ACSS,
SIXTEENTH_VALUE => 16) ;
BEGIN
REPORT.TEST("CC3016B", "CHECK THAT AN INSTANCE OF A GENERIC " &
"PACKAGE MUST DECLARE A PACKAGE. CHECK THAT THE " &
"DECLARATIVE ITEMS IN AN INSTANTIATION OF A GENERIC " &
"PACKAGE SPECIFICATION ARE ELABORATED IN THE ORDER " &
"DECLARED.");
IF ORDER_LIST(1) /= REPORT.IDENT_INT(1) THEN
REPORT.FAILED("BOOLEAN 1 ELABORATED OUT OF ORDER");
END IF;
IF ORDER_LIST(2) /= REPORT.IDENT_INT(2) THEN
REPORT.FAILED("INTEGER TYPE 1 ELABORATED OUT OF ORDER");
END IF;
IF ORDER_LIST(3) /= REPORT.IDENT_INT(3) THEN
REPORT.FAILED("REAL 1 ELABORATED OUT OF ORDER");
END IF;
IF ORDER_LIST(4) /= REPORT.IDENT_INT(4) THEN
REPORT.FAILED("CHARACTER 1 ELABORATED OUT OF ORDER");
END IF;
IF ORDER_LIST(5) /= REPORT.IDENT_INT(5) THEN
REPORT.FAILED("ENUMERATION 1 ELABORATED OUT OF ORDER");
END IF;
IF ORDER_LIST(6) /= REPORT.IDENT_INT(6) THEN
REPORT.FAILED("ARRAY 1 ELABORATED OUT OF ORDER");
END IF;
IF ORDER_LIST(7) /= REPORT.IDENT_INT(7) THEN
REPORT.FAILED("RECORD 1 ELABORATED OUT OF ORDER");
END IF;
IF ORDER_LIST(8) /= REPORT.IDENT_INT(8) THEN
REPORT.FAILED("ACCESS 1 ELABORATED OUT OF ORDER");
END IF;
IF ORDER_LIST(9) /= REPORT.IDENT_INT(9) THEN
REPORT.FAILED("BOOLEAN 2 ELABORATED OUT OF ORDER");
END IF;
IF ORDER_LIST(10) /= REPORT.IDENT_INT(10) THEN
REPORT.FAILED("INTEGER TYPE 2 ELABORATED OUT OF ORDER");
END IF;
IF ORDER_LIST(11) /= REPORT.IDENT_INT(11) THEN
REPORT.FAILED("REAL 2 ELABORATED OUT OF ORDER");
END IF;
IF ORDER_LIST(12) /= REPORT.IDENT_INT(12) THEN
REPORT.FAILED("CHARACTER 2 ELABORATED OUT OF ORDER");
END IF;
IF ORDER_LIST(13) /= REPORT.IDENT_INT(13) THEN
REPORT.FAILED("ENUMERATION 2 ELABORATED OUT OF ORDER");
END IF;
IF ORDER_LIST(14) /= REPORT.IDENT_INT(14) THEN
REPORT.FAILED("ARRAY 2 ELABORATED OUT OF ORDER");
END IF;
IF ORDER_LIST(15) /= REPORT.IDENT_INT(15) THEN
REPORT.FAILED("RECORD 2 ELABORATED OUT OF ORDER");
END IF;
IF ORDER_LIST(16) /= REPORT.IDENT_INT(16) THEN
REPORT.FAILED("ACCESS 2 ELABORATED OUT OF ORDER");
END IF;
REPORT.RESULT ;
END CC3016B;