-- 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;