blob: afdadbf53b8fe880dd2c26f51f6acbf08fd4ef23 [file] [log] [blame]
-- 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 ;