-- C36204D.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 EACH ARRAY ATTRIBUTE YIELDS THE CORRECT VALUES. -- BOTH ARRAY OBJECTS AND TYPES ARE CHECKED. THIS TEST CHECKS -- THE ABOVE FOR ARRAYS WITHIN GENERIC PROGRAM UNITS. -- HISTROY -- EDWARD V. BERARD, 9 AUGUST 1990 WITH REPORT ; WITH SYSTEM ; PROCEDURE C36204D IS SHORT_START : CONSTANT := -10 ; SHORT_END : CONSTANT := 10 ; TYPE SHORT_RANGE IS RANGE SHORT_START .. SHORT_END ; SHORT_LENGTH : CONSTANT NATURAL := (SHORT_END - SHORT_START + 1) ; TYPE MONTH_TYPE IS (JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC) ; SUBTYPE MID_YEAR IS MONTH_TYPE RANGE MAY .. AUG ; 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 => 10, YEAR => 1990) ; FIRST_DATE : DATE := (DAY => 6, MONTH => JUN, YEAR => 1967) ; FUNCTION "=" (LEFT : IN SYSTEM.ADDRESS ; RIGHT : IN SYSTEM.ADDRESS ) RETURN BOOLEAN RENAMES SYSTEM."=" ; GENERIC TYPE FIRST_INDEX IS (<>) ; FIRST_INDEX_LENGTH : IN NATURAL ; FIRST_TEST_VALUE : IN FIRST_INDEX ; TYPE SECOND_INDEX IS (<>) ; SECOND_INDEX_LENGTH : IN NATURAL ; SECOND_TEST_VALUE : IN SECOND_INDEX ; TYPE THIRD_INDEX IS (<>) ; THIRD_INDEX_LENGTH : IN NATURAL ; THIRD_TEST_VALUE : IN THIRD_INDEX ; TYPE FIRST_COMPONENT_TYPE IS PRIVATE ; FIRST_DEFAULT_VALUE : IN FIRST_COMPONENT_TYPE ; SECOND_DEFAULT_VALUE : IN FIRST_COMPONENT_TYPE ; TYPE SECOND_COMPONENT_TYPE IS PRIVATE ; THIRD_DEFAULT_VALUE : IN SECOND_COMPONENT_TYPE ; FOURTH_DEFAULT_VALUE : IN SECOND_COMPONENT_TYPE ; PACKAGE ARRAY_ATTRIBUTE_TEST IS TYPE MATRIX IS ARRAY (FIRST_INDEX, SECOND_INDEX) OF FIRST_COMPONENT_TYPE ; TYPE CUBE IS ARRAY (FIRST_INDEX, SECOND_INDEX, THIRD_INDEX) OF SECOND_COMPONENT_TYPE ; END ARRAY_ATTRIBUTE_TEST ; PACKAGE BODY ARRAY_ATTRIBUTE_TEST IS FIRST_ARRAY : MATRIX := (FIRST_INDEX'FIRST .. FIRST_INDEX'LAST => (SECOND_INDEX'FIRST .. SECOND_INDEX'LAST => FIRST_DEFAULT_VALUE)) ; SECOND_ARRAY : CUBE := (FIRST_INDEX'FIRST .. FIRST_INDEX'LAST => (SECOND_INDEX'FIRST .. SECOND_INDEX'LAST => (THIRD_INDEX'FIRST .. THIRD_INDEX'LAST => THIRD_DEFAULT_VALUE))) ; THIRD_ARRAY : CONSTANT MATRIX := (FIRST_INDEX'FIRST .. FIRST_INDEX'LAST => (SECOND_INDEX'FIRST .. SECOND_INDEX'LAST => SECOND_DEFAULT_VALUE)) ; FOURTH_ARRAY : CONSTANT CUBE := (FIRST_INDEX'FIRST .. FIRST_INDEX'LAST => (SECOND_INDEX'FIRST .. SECOND_INDEX'LAST => (THIRD_INDEX'FIRST .. THIRD_INDEX'LAST => FOURTH_DEFAULT_VALUE))) ; FA1 : FIRST_INDEX := FIRST_ARRAY'FIRST (1) ; FA2 : FIRST_INDEX := FIRST_ARRAY'LAST (1) ; FA3 : SECOND_INDEX := FIRST_ARRAY'FIRST (2) ; FA4 : SECOND_INDEX := FIRST_ARRAY'LAST (2) ; SA1 : FIRST_INDEX := SECOND_ARRAY'FIRST (1) ; SA2 : FIRST_INDEX := SECOND_ARRAY'LAST (1) ; SA3 : SECOND_INDEX := SECOND_ARRAY'FIRST (2) ; SA4 : SECOND_INDEX := SECOND_ARRAY'LAST (2) ; SA5 : THIRD_INDEX := SECOND_ARRAY'FIRST (3) ; SA6 : THIRD_INDEX := SECOND_ARRAY'LAST (3) ; FAL1 : NATURAL := FIRST_ARRAY'LENGTH (1) ; FAL2 : NATURAL := FIRST_ARRAY'LENGTH (2) ; SAL1 : NATURAL := SECOND_ARRAY'LENGTH (1) ; SAL2 : NATURAL := SECOND_ARRAY'LENGTH (2) ; SAL3 : NATURAL := SECOND_ARRAY'LENGTH (3) ; MATRIX_SIZE : NATURAL := MATRIX'SIZE ; CUBE_SIZE : NATURAL := CUBE'SIZE ; FAA : SYSTEM.ADDRESS := FIRST_ARRAY'ADDRESS ; SAA : SYSTEM.ADDRESS := SECOND_ARRAY'ADDRESS ; TAA : SYSTEM.ADDRESS := THIRD_ARRAY'ADDRESS ; FRAA : SYSTEM.ADDRESS := FOURTH_ARRAY'ADDRESS ; BEGIN -- ARRAY_ATTRIBUTE_TEST IF (FA1 /= FIRST_INDEX'FIRST) OR (FA3 /= SECOND_INDEX'FIRST) OR (SA1 /= FIRST_INDEX'FIRST) OR (SA3 /= SECOND_INDEX'FIRST) OR (SA5 /= THIRD_INDEX'FIRST) THEN REPORT.FAILED ("INCORRECT VALUE RETURNED FOR 'FIRST - PACKAGE") ; END IF ; IF (FA2 /= FIRST_INDEX'LAST) OR (FA4 /= SECOND_INDEX'LAST) OR (SA2 /= FIRST_INDEX'LAST) OR (SA4 /= SECOND_INDEX'LAST) OR (SA6 /= THIRD_INDEX'LAST) THEN REPORT.FAILED ("INCORRECT VALUE RETURNED FOR 'LAST - PACKAGE") ; END IF ; IF (FAL1 /= FIRST_INDEX_LENGTH) OR (FAL2 /= SECOND_INDEX_LENGTH) OR (SAL1 /= FIRST_INDEX_LENGTH) OR (SAL2 /= SECOND_INDEX_LENGTH) OR (SAL3 /= THIRD_INDEX_LENGTH) THEN REPORT.FAILED ("INCORRECT VALUE RETURNED FOR 'LENGTH - PACKAGE") ; END IF ; FOR OUTER_INDEX IN FIRST_ARRAY'RANGE (1) LOOP FOR INNER_INDEX IN FIRST_ARRAY'RANGE (2) LOOP FIRST_ARRAY (OUTER_INDEX, INNER_INDEX) := SECOND_DEFAULT_VALUE ; END LOOP ; END LOOP ; IF FIRST_ARRAY /= THIRD_ARRAY THEN REPORT.FAILED ("INCORRECT HANDLING OF 'RANGE ATTRIBUTE " & "FOR 2-DIMENSIONAL ARRAY. - PACKAGE") ; END IF ; FOR OUTER_INDEX IN SECOND_ARRAY'RANGE (1) LOOP FOR MIDDLE_INDEX IN SECOND_ARRAY'RANGE (2) LOOP FOR INNER_INDEX IN SECOND_ARRAY'RANGE (3) LOOP SECOND_ARRAY (OUTER_INDEX, MIDDLE_INDEX, INNER_INDEX) := FOURTH_DEFAULT_VALUE ; END LOOP ; END LOOP ; END LOOP ; IF SECOND_ARRAY /= FOURTH_ARRAY THEN REPORT.FAILED ("INCORRECT HANDLING OF 'RANGE ATTRIBUTE " & "FOR 3-DIMENSIONAL ARRAY. - PACKAGE") ; END IF ; IF (FIRST_TEST_VALUE NOT IN FIRST_ARRAY'RANGE (1)) OR (FIRST_TEST_VALUE NOT IN SECOND_ARRAY'RANGE (1)) OR (SECOND_TEST_VALUE NOT IN FIRST_ARRAY'RANGE (2)) OR (SECOND_TEST_VALUE NOT IN SECOND_ARRAY'RANGE (2)) OR (THIRD_TEST_VALUE NOT IN SECOND_ARRAY'RANGE (3)) THEN REPORT.FAILED ("INCORRECT HANDLING OF 'RANGE ATTRIBUTE " & "- PACKAGE") ; END IF ; IF (MATRIX_SIZE = 0) OR (CUBE_SIZE = 0) THEN REPORT.FAILED ("INCORRECT HANDLING OF THE 'SIZE ATTRIBUTE. " & "- PACKAGE") ; END IF ; IF (FAA = TAA) OR (SAA = FRAA) OR (FAA = SAA) OR (FAA = FRAA) OR (SAA = TAA) OR (TAA = FRAA) THEN REPORT.FAILED ("INCORRECT HANDLING OF THE 'ADDRESS ATTRIBUTE. " & "- PACKAGE") ; END IF ; END ARRAY_ATTRIBUTE_TEST ; GENERIC TYPE FIRST_INDEX IS (<>) ; FIRST_INDEX_LENGTH : IN NATURAL ; FIRST_TEST_VALUE : IN FIRST_INDEX ; TYPE SECOND_INDEX IS (<>) ; SECOND_INDEX_LENGTH : IN NATURAL ; SECOND_TEST_VALUE : IN SECOND_INDEX ; TYPE THIRD_INDEX IS (<>) ; THIRD_INDEX_LENGTH : IN NATURAL ; THIRD_TEST_VALUE : IN THIRD_INDEX ; TYPE FIRST_COMPONENT_TYPE IS PRIVATE ; FIRST_DEFAULT_VALUE : IN FIRST_COMPONENT_TYPE ; SECOND_DEFAULT_VALUE : IN FIRST_COMPONENT_TYPE ; TYPE SECOND_COMPONENT_TYPE IS PRIVATE ; THIRD_DEFAULT_VALUE : IN SECOND_COMPONENT_TYPE ; FOURTH_DEFAULT_VALUE : IN SECOND_COMPONENT_TYPE ; PROCEDURE PROC_ARRAY_ATT_TEST ; PROCEDURE PROC_ARRAY_ATT_TEST IS TYPE MATRIX IS ARRAY (FIRST_INDEX, SECOND_INDEX) OF FIRST_COMPONENT_TYPE ; TYPE CUBE IS ARRAY (FIRST_INDEX, SECOND_INDEX, THIRD_INDEX) OF SECOND_COMPONENT_TYPE ; FIRST_ARRAY : MATRIX := (FIRST_INDEX'FIRST .. FIRST_INDEX'LAST => (SECOND_INDEX'FIRST .. SECOND_INDEX'LAST => FIRST_DEFAULT_VALUE)) ; SECOND_ARRAY : CUBE := (FIRST_INDEX'FIRST .. FIRST_INDEX'LAST => (SECOND_INDEX'FIRST .. SECOND_INDEX'LAST => (THIRD_INDEX'FIRST .. THIRD_INDEX'LAST => THIRD_DEFAULT_VALUE))) ; THIRD_ARRAY : CONSTANT MATRIX := (FIRST_INDEX'FIRST .. FIRST_INDEX'LAST => (SECOND_INDEX'FIRST .. SECOND_INDEX'LAST => SECOND_DEFAULT_VALUE)) ; FOURTH_ARRAY : CONSTANT CUBE := (FIRST_INDEX'FIRST .. FIRST_INDEX'LAST => (SECOND_INDEX'FIRST .. SECOND_INDEX'LAST => (THIRD_INDEX'FIRST .. THIRD_INDEX'LAST => FOURTH_DEFAULT_VALUE))) ; FA1 : FIRST_INDEX := FIRST_ARRAY'FIRST (1) ; FA2 : FIRST_INDEX := FIRST_ARRAY'LAST (1) ; FA3 : SECOND_INDEX := FIRST_ARRAY'FIRST (2) ; FA4 : SECOND_INDEX := FIRST_ARRAY'LAST (2) ; SA1 : FIRST_INDEX := SECOND_ARRAY'FIRST (1) ; SA2 : FIRST_INDEX := SECOND_ARRAY'LAST (1) ; SA3 : SECOND_INDEX := SECOND_ARRAY'FIRST (2) ; SA4 : SECOND_INDEX := SECOND_ARRAY'LAST (2) ; SA5 : THIRD_INDEX := SECOND_ARRAY'FIRST (3) ; SA6 : THIRD_INDEX := SECOND_ARRAY'LAST (3) ; FAL1 : NATURAL := FIRST_ARRAY'LENGTH (1) ; FAL2 : NATURAL := FIRST_ARRAY'LENGTH (2) ; SAL1 : NATURAL := SECOND_ARRAY'LENGTH (1) ; SAL2 : NATURAL := SECOND_ARRAY'LENGTH (2) ; SAL3 : NATURAL := SECOND_ARRAY'LENGTH (3) ; MATRIX_SIZE : NATURAL := MATRIX'SIZE ; CUBE_SIZE : NATURAL := CUBE'SIZE ; FAA : SYSTEM.ADDRESS := FIRST_ARRAY'ADDRESS ; SAA : SYSTEM.ADDRESS := SECOND_ARRAY'ADDRESS ; TAA : SYSTEM.ADDRESS := THIRD_ARRAY'ADDRESS ; FRAA : SYSTEM.ADDRESS := FOURTH_ARRAY'ADDRESS ; BEGIN -- PROC_ARRAY_ATT_TEST IF (FA1 /= FIRST_INDEX'FIRST) OR (FA3 /= SECOND_INDEX'FIRST) OR (SA1 /= FIRST_INDEX'FIRST) OR (SA3 /= SECOND_INDEX'FIRST) OR (SA5 /= THIRD_INDEX'FIRST) THEN REPORT.FAILED ("INCORRECT VALUE RETURNED FOR 'FIRST " & "- PROCEDURE") ; END IF ; IF (FA2 /= FIRST_INDEX'LAST) OR (FA4 /= SECOND_INDEX'LAST) OR (SA2 /= FIRST_INDEX'LAST) OR (SA4 /= SECOND_INDEX'LAST) OR (SA6 /= THIRD_INDEX'LAST) THEN REPORT.FAILED ("INCORRECT VALUE RETURNED FOR 'LAST " & "- PROCEDURE") ; END IF ; IF (FAL1 /= FIRST_INDEX_LENGTH) OR (FAL2 /= SECOND_INDEX_LENGTH) OR (SAL1 /= FIRST_INDEX_LENGTH) OR (SAL2 /= SECOND_INDEX_LENGTH) OR (SAL3 /= THIRD_INDEX_LENGTH) THEN REPORT.FAILED ("INCORRECT VALUE RETURNED FOR 'LENGTH " & "- PROCEDURE") ; END IF ; FOR OUTER_INDEX IN FIRST_ARRAY'RANGE (1) LOOP FOR INNER_INDEX IN FIRST_ARRAY'RANGE (2) LOOP FIRST_ARRAY (OUTER_INDEX, INNER_INDEX) := SECOND_DEFAULT_VALUE ; END LOOP ; END LOOP ; IF FIRST_ARRAY /= THIRD_ARRAY THEN REPORT.FAILED ("INCORRECT HANDLING OF 'RANGE ATTRIBUTE " & "FOR 2-DIMENSIONAL ARRAY. - PROCEDURE") ; END IF ; FOR OUTER_INDEX IN SECOND_ARRAY'RANGE (1) LOOP FOR MIDDLE_INDEX IN SECOND_ARRAY'RANGE (2) LOOP FOR INNER_INDEX IN SECOND_ARRAY'RANGE (3) LOOP SECOND_ARRAY (OUTER_INDEX, MIDDLE_INDEX, INNER_INDEX) := FOURTH_DEFAULT_VALUE ; END LOOP ; END LOOP ; END LOOP ; IF SECOND_ARRAY /= FOURTH_ARRAY THEN REPORT.FAILED ("INCORRECT HANDLING OF 'RANGE ATTRIBUTE " & "FOR 3-DIMENSIONAL ARRAY. - PROCEDURE") ; END IF ; IF (FIRST_TEST_VALUE NOT IN FIRST_ARRAY'RANGE (1)) OR (FIRST_TEST_VALUE NOT IN SECOND_ARRAY'RANGE (1)) OR (SECOND_TEST_VALUE NOT IN FIRST_ARRAY'RANGE (2)) OR (SECOND_TEST_VALUE NOT IN SECOND_ARRAY'RANGE (2)) OR (THIRD_TEST_VALUE NOT IN SECOND_ARRAY'RANGE (3)) THEN REPORT.FAILED ("INCORRECT HANDLING OF 'RANGE ATTRIBUTE " & "- PROCEDURE") ; END IF ; IF (MATRIX_SIZE = 0) OR (CUBE_SIZE = 0) THEN REPORT.FAILED ("INCORRECT HANDLING OF THE 'SIZE ATTRIBUTE. " & "- PROCEDURE") ; END IF ; IF (FAA = TAA) OR (SAA = FRAA) OR (FAA = SAA) OR (FAA = FRAA) OR (SAA = TAA) OR (TAA = FRAA) THEN REPORT.FAILED ("INCORRECT HANDLING OF THE 'ADDRESS ATTRIBUTE. " & "- PROCEDURE") ; END IF ; END PROC_ARRAY_ATT_TEST ; GENERIC TYPE FIRST_INDEX IS (<>) ; FIRST_INDEX_LENGTH : IN NATURAL ; FIRST_TEST_VALUE : IN FIRST_INDEX ; TYPE SECOND_INDEX IS (<>) ; SECOND_INDEX_LENGTH : IN NATURAL ; SECOND_TEST_VALUE : IN SECOND_INDEX ; TYPE THIRD_INDEX IS (<>) ; THIRD_INDEX_LENGTH : IN NATURAL ; THIRD_TEST_VALUE : IN THIRD_INDEX ; TYPE FIRST_COMPONENT_TYPE IS PRIVATE ; FIRST_DEFAULT_VALUE : IN FIRST_COMPONENT_TYPE ; SECOND_DEFAULT_VALUE : IN FIRST_COMPONENT_TYPE ; TYPE SECOND_COMPONENT_TYPE IS PRIVATE ; THIRD_DEFAULT_VALUE : IN SECOND_COMPONENT_TYPE ; FOURTH_DEFAULT_VALUE : IN SECOND_COMPONENT_TYPE ; FUNCTION FUNC_ARRAY_ATT_TEST RETURN BOOLEAN ; FUNCTION FUNC_ARRAY_ATT_TEST RETURN BOOLEAN IS TYPE MATRIX IS ARRAY (FIRST_INDEX, SECOND_INDEX) OF FIRST_COMPONENT_TYPE ; TYPE CUBE IS ARRAY (FIRST_INDEX, SECOND_INDEX, THIRD_INDEX) OF SECOND_COMPONENT_TYPE ; FIRST_ARRAY : MATRIX := (FIRST_INDEX'FIRST .. FIRST_INDEX'LAST => (SECOND_INDEX'FIRST .. SECOND_INDEX'LAST => FIRST_DEFAULT_VALUE)) ; SECOND_ARRAY : CUBE := (FIRST_INDEX'FIRST .. FIRST_INDEX'LAST => (SECOND_INDEX'FIRST .. SECOND_INDEX'LAST => (THIRD_INDEX'FIRST .. THIRD_INDEX'LAST => THIRD_DEFAULT_VALUE))) ; THIRD_ARRAY : CONSTANT MATRIX := (FIRST_INDEX'FIRST .. FIRST_INDEX'LAST => (SECOND_INDEX'FIRST .. SECOND_INDEX'LAST => SECOND_DEFAULT_VALUE)) ; FOURTH_ARRAY : CONSTANT CUBE := (FIRST_INDEX'FIRST .. FIRST_INDEX'LAST => (SECOND_INDEX'FIRST .. SECOND_INDEX'LAST => (THIRD_INDEX'FIRST .. THIRD_INDEX'LAST => FOURTH_DEFAULT_VALUE))) ; FA1 : FIRST_INDEX := FIRST_ARRAY'FIRST (1) ; FA2 : FIRST_INDEX := FIRST_ARRAY'LAST (1) ; FA3 : SECOND_INDEX := FIRST_ARRAY'FIRST (2) ; FA4 : SECOND_INDEX := FIRST_ARRAY'LAST (2) ; SA1 : FIRST_INDEX := SECOND_ARRAY'FIRST (1) ; SA2 : FIRST_INDEX := SECOND_ARRAY'LAST (1) ; SA3 : SECOND_INDEX := SECOND_ARRAY'FIRST (2) ; SA4 : SECOND_INDEX := SECOND_ARRAY'LAST (2) ; SA5 : THIRD_INDEX := SECOND_ARRAY'FIRST (3) ; SA6 : THIRD_INDEX := SECOND_ARRAY'LAST (3) ; FAL1 : NATURAL := FIRST_ARRAY'LENGTH (1) ; FAL2 : NATURAL := FIRST_ARRAY'LENGTH (2) ; SAL1 : NATURAL := SECOND_ARRAY'LENGTH (1) ; SAL2 : NATURAL := SECOND_ARRAY'LENGTH (2) ; SAL3 : NATURAL := SECOND_ARRAY'LENGTH (3) ; MATRIX_SIZE : NATURAL := MATRIX'SIZE ; CUBE_SIZE : NATURAL := CUBE'SIZE ; FAA : SYSTEM.ADDRESS := FIRST_ARRAY'ADDRESS ; SAA : SYSTEM.ADDRESS := SECOND_ARRAY'ADDRESS ; TAA : SYSTEM.ADDRESS := THIRD_ARRAY'ADDRESS ; FRAA : SYSTEM.ADDRESS := FOURTH_ARRAY'ADDRESS ; BEGIN -- FUNC_ARRAY_ATT_TEST IF (FA1 /= FIRST_INDEX'FIRST) OR (FA3 /= SECOND_INDEX'FIRST) OR (SA1 /= FIRST_INDEX'FIRST) OR (SA3 /= SECOND_INDEX'FIRST) OR (SA5 /= THIRD_INDEX'FIRST) THEN REPORT.FAILED ("INCORRECT VALUE RETURNED FOR 'FIRST " & "- FUNCTION") ; END IF ; IF (FA2 /= FIRST_INDEX'LAST) OR (FA4 /= SECOND_INDEX'LAST) OR (SA2 /= FIRST_INDEX'LAST) OR (SA4 /= SECOND_INDEX'LAST) OR (SA6 /= THIRD_INDEX'LAST) THEN REPORT.FAILED ("INCORRECT VALUE RETURNED FOR 'LAST " & "- FUNCTION") ; END IF ; IF (FAL1 /= FIRST_INDEX_LENGTH) OR (FAL2 /= SECOND_INDEX_LENGTH) OR (SAL1 /= FIRST_INDEX_LENGTH) OR (SAL2 /= SECOND_INDEX_LENGTH) OR (SAL3 /= THIRD_INDEX_LENGTH) THEN REPORT.FAILED ("INCORRECT VALUE RETURNED FOR 'LENGTH " & "- FUNCTION") ; END IF ; FOR OUTER_INDEX IN FIRST_ARRAY'RANGE (1) LOOP FOR INNER_INDEX IN FIRST_ARRAY'RANGE (2) LOOP FIRST_ARRAY (OUTER_INDEX, INNER_INDEX) := SECOND_DEFAULT_VALUE ; END LOOP ; END LOOP ; IF FIRST_ARRAY /= THIRD_ARRAY THEN REPORT.FAILED ("INCORRECT HANDLING OF 'RANGE ATTRIBUTE " & "FOR 2-DIMENSIONAL ARRAY. - FUNCTION") ; END IF ; FOR OUTER_INDEX IN SECOND_ARRAY'RANGE (1) LOOP FOR MIDDLE_INDEX IN SECOND_ARRAY'RANGE (2) LOOP FOR INNER_INDEX IN SECOND_ARRAY'RANGE (3) LOOP SECOND_ARRAY (OUTER_INDEX, MIDDLE_INDEX, INNER_INDEX) := FOURTH_DEFAULT_VALUE ; END LOOP ; END LOOP ; END LOOP ; IF SECOND_ARRAY /= FOURTH_ARRAY THEN REPORT.FAILED ("INCORRECT HANDLING OF 'RANGE ATTRIBUTE " & "FOR 3-DIMENSIONAL ARRAY. - FUNCTION") ; END IF ; IF (FIRST_TEST_VALUE NOT IN FIRST_ARRAY'RANGE (1)) OR (FIRST_TEST_VALUE NOT IN SECOND_ARRAY'RANGE (1)) OR (SECOND_TEST_VALUE NOT IN FIRST_ARRAY'RANGE (2)) OR (SECOND_TEST_VALUE NOT IN SECOND_ARRAY'RANGE (2)) OR (THIRD_TEST_VALUE NOT IN SECOND_ARRAY'RANGE (3)) THEN REPORT.FAILED ("INCORRECT HANDLING OF 'RANGE ATTRIBUTE " & "- FUNCTION") ; END IF ; IF (MATRIX_SIZE = 0) OR (CUBE_SIZE = 0) THEN REPORT.FAILED ("INCORRECT HANDLING OF THE 'SIZE ATTRIBUTE. " & "- FUNCTION") ; END IF ; IF (FAA = TAA) OR (SAA = FRAA) OR (FAA = SAA) OR (FAA = FRAA) OR (SAA = TAA) OR (TAA = FRAA) THEN REPORT.FAILED ("INCORRECT HANDLING OF THE 'ADDRESS ATTRIBUTE. " & "- FUNCTION") ; END IF ; RETURN TRUE ; END FUNC_ARRAY_ATT_TEST ; BEGIN -- C36204D REPORT.TEST ("C36204D", "ARRAY ATTRIBUTES RETURN CORRECT " & "VALUES WITHIN GENERIC PROGRAM UNITS.") ; LOCAL_BLOCK: DECLARE DUMMY : BOOLEAN := FALSE ; PACKAGE NEW_ARRAY_ATTRIBUTE_TEST IS NEW ARRAY_ATTRIBUTE_TEST ( FIRST_INDEX => SHORT_RANGE, FIRST_INDEX_LENGTH => SHORT_LENGTH, FIRST_TEST_VALUE => -7, SECOND_INDEX => MONTH_TYPE, SECOND_INDEX_LENGTH => 12, SECOND_TEST_VALUE => AUG, THIRD_INDEX => BOOLEAN, THIRD_INDEX_LENGTH => 2, THIRD_TEST_VALUE => FALSE, FIRST_COMPONENT_TYPE => MONTH_TYPE, FIRST_DEFAULT_VALUE => JAN, SECOND_DEFAULT_VALUE => DEC, SECOND_COMPONENT_TYPE => DATE, THIRD_DEFAULT_VALUE => TODAY, FOURTH_DEFAULT_VALUE => FIRST_DATE) ; PROCEDURE NEW_PROC_ARRAY_ATT_TEST IS NEW PROC_ARRAY_ATT_TEST ( FIRST_INDEX => MONTH_TYPE, FIRST_INDEX_LENGTH => 12, FIRST_TEST_VALUE => AUG, SECOND_INDEX => SHORT_RANGE, SECOND_INDEX_LENGTH => SHORT_LENGTH, SECOND_TEST_VALUE => -7, THIRD_INDEX => BOOLEAN, THIRD_INDEX_LENGTH => 2, THIRD_TEST_VALUE => FALSE, FIRST_COMPONENT_TYPE => DATE, FIRST_DEFAULT_VALUE => TODAY, SECOND_DEFAULT_VALUE => FIRST_DATE, SECOND_COMPONENT_TYPE => MONTH_TYPE, THIRD_DEFAULT_VALUE => JAN, FOURTH_DEFAULT_VALUE => DEC) ; FUNCTION NEW_FUNC_ARRAY_ATT_TEST IS NEW FUNC_ARRAY_ATT_TEST ( FIRST_INDEX => DAY_TYPE, FIRST_INDEX_LENGTH => 31, FIRST_TEST_VALUE => 25, SECOND_INDEX => SHORT_RANGE, SECOND_INDEX_LENGTH => SHORT_LENGTH, SECOND_TEST_VALUE => -7, THIRD_INDEX => MID_YEAR, THIRD_INDEX_LENGTH => 4, THIRD_TEST_VALUE => JUL, FIRST_COMPONENT_TYPE => DATE, FIRST_DEFAULT_VALUE => TODAY, SECOND_DEFAULT_VALUE => FIRST_DATE, SECOND_COMPONENT_TYPE => MONTH_TYPE, THIRD_DEFAULT_VALUE => JAN, FOURTH_DEFAULT_VALUE => DEC) ; BEGIN -- LOCAL_BLOCK NEW_PROC_ARRAY_ATT_TEST ; DUMMY := NEW_FUNC_ARRAY_ATT_TEST ; IF NOT DUMMY THEN REPORT.FAILED ("WRONG VALUE RETURNED BY FUNCTION.") ; END IF ; END LOCAL_BLOCK ; REPORT.RESULT ; END C36204D ;