-- C32001B.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. --* -- OBJECTIVE: -- CHECK THAT IN MULTIPLE OBJECT DECLARATIONS FOR ARRAY TYPES, THE -- SUBTYPE INDICATION AND THE INITIALIZATION EXPRESSIONS ARE -- EVALUATED ONCE FOR EACH NAMED OBJECT THAT IS DECLARED AND THE -- SUBTYPE INDICATION IS EVALUATED FIRST. ALSO, CHECK THAT THE -- EVALUATIONS YIELD THE SAME RESULT AS A SEQUENCE OF SINGLE OBJECT -- DECLARATIONS. -- HISTORY: -- RJW 07/16/86 CREATED ORIGINAL TEST. -- BCB 08/18/87 CHANGED HEADER TO STANDARD HEADER FORMAT. CHANGED -- COMMENTS FOR S4 AND CS4 TO READ THAT THE BOUNDS ARE -- 1 .. 6 AND THE COMPONENT TYPE ARR IS 1 .. 5. WITH REPORT; USE REPORT; PROCEDURE C32001B IS TYPE ARR IS ARRAY (NATURAL RANGE <>) OF INTEGER; BUMP : ARRAY (1 .. 4) OF INTEGER := (0, 0, 0, 0); FUNCTION F (I : INTEGER) RETURN INTEGER IS BEGIN BUMP (I) := BUMP (I) + 1; RETURN BUMP (I); END F; BEGIN TEST ("C32001B", "CHECK THAT IN MULTIPLE OBJECT DECLARATIONS " & "FOR ARRAY TYPES, THE SUBTYPE INDICATION " & "AND THE INITIALIZATION EXPRESSIONS ARE " & "EVALUATED ONCE FOR EACH NAMED OBJECT THAT " & "IS DECLARED AND THE SUBTYPE INDICATION IS " & "EVALUATED FIRST. ALSO, CHECK THAT THE " & "EVALUATIONS YIELD THE SAME RESULT AS A " & "SEQUENCE OF SINGLE OBJECT DECLARATIONS" ); DECLARE S1, S2 : ARR (1 .. F (1)) := (OTHERS => F (1)); CS1, CS2 : CONSTANT ARR (1 .. F (2)) := (OTHERS => F (2)); PROCEDURE CHECK (A, B : ARR; STR1, STR2 : STRING) IS BEGIN IF A'LAST /= 1 THEN FAILED ( "INCORRECT UPPER BOUND FOR " & STR1 ); END IF; IF A (1) /= 2 THEN FAILED ( "INCORRECT INITIAL VALUE FOR " & STR1 ); END IF; IF B'LAST /= 3 THEN FAILED ( "INCORRECT UPPER BOUND FOR " & STR2 ); END IF; BEGIN IF B (1 .. 3) = (4, 5, 6) THEN COMMENT ( STR2 & " WAS INITIALIZED TO " & "(4, 5, 6)" ); ELSIF B (1 .. 3) = (5, 4, 6) THEN COMMENT ( STR2 & " WAS INITIALIZED TO " & "(5, 4, 6)" ); ELSIF B (1 .. 3) = (4, 6, 5) THEN COMMENT ( STR2 & " WAS INITIALIZED TO " & "(4, 6, 5)" ); ELSIF B (1 .. 3) = (6, 4, 5) THEN COMMENT ( STR2 & " WAS INITIALIZED TO " & "(6, 4, 5)" ); ELSIF B (1 .. 3) = (6, 5, 4) THEN COMMENT ( STR2 & " WAS INITIALIZED TO " & "(6, 5, 4)" ); ELSIF B (1 .. 3) = (5, 6, 4) THEN COMMENT ( STR2 & " WAS INITIALIZED TO " & "(5, 6, 4)" ); ELSE FAILED ( STR2 & " HAS INCORRECT INITIAL " & "VALUE" ); END IF; EXCEPTION WHEN CONSTRAINT_ERROR => FAILED ( "CONSTRAINT_ERROR RAISED - " & STR2 ); WHEN OTHERS => FAILED ( "EXCEPTION RAISED - " & STR2 ); END; END; BEGIN CHECK (S1, S2, "S1", "S2"); CHECK (CS1, CS2, "CS1", "CS2"); END; DECLARE S3, S4 : ARRAY (1 .. F (3)) OF ARR (1 .. F (3)) := (OTHERS => (OTHERS => F (3))); CS3, CS4 : CONSTANT ARRAY (1.. F (4)) OF ARR (1 .. F (4)) := (OTHERS => (OTHERS => F (4))); BEGIN IF S3'LAST = 1 THEN IF S3 (1)'LAST = 2 THEN COMMENT ( "S3 HAS BOUNDS 1 .. 1 AND " & "COMPONENT TYPE ARR (1 .. 2)" ); IF S3 (1)(1 .. 2) = (3, 4) THEN COMMENT ( "S3 HAS INITIAL VALUES " & "3 AND 4 - 1" ); ELSIF S3 (1)(1 .. 2) = (4, 3) THEN COMMENT ( "S3 HAS INITIAL VALUES " & "4 AND 3 - 1" ); ELSE FAILED ( "S3 HAS WRONG INITIAL VALUES - 1" ); END IF; ELSE FAILED ( "S3 HAS WRONG COMPONENT TYPE - 1" ); END IF; ELSIF S3'LAST = 2 THEN IF S3 (1)'LAST = 1 THEN COMMENT ( "S3 HAS BOUNDS 1 .. 2 AND " & "COMPONENT TYPE ARR (1 .. 1)" ); IF S3 (1) (1) = 3 AND S3 (2) (1) = 4 THEN COMMENT ( "S3 HAS INITIAL VALUES " & "3 AND 4 - 2" ); ELSIF S3 (1) (1) = 4 AND S3 (2) (1) = 3 THEN COMMENT ( "S3 HAS INITIAL VALUES " & "4 AND 3 - 2" ); ELSE FAILED ( "S3 HAS WRONG INITIAL VALUES - 2" ); END IF; ELSE FAILED ( "S3 HAS WRONG COMPONENT TYPE - 2" ); END IF; ELSE FAILED ( "S3 HAS INCORRECT BOUNDS" ); END IF; IF S4'LAST = 5 THEN IF S4 (1)'LAST = 6 THEN COMMENT ( "S4 HAS BOUNDS 1 .. 5 AND " & "COMPONENT TYPE ARR (1 .. 6)" ); ELSE FAILED ( "S4 HAS WRONG COMPONENT TYPE - 1" ); END IF; ELSIF S4'LAST = 6 THEN IF S4 (1)'FIRST = 1 AND S4 (1)'LAST = 5 THEN COMMENT ( "S4 HAS BOUNDS 1 .. 6 AND " & "COMPONENT TYPE ARR (1 .. 5)" ); ELSE FAILED ( "S4 HAS WRONG COMPONENT TYPE - 2" ); END IF; ELSE FAILED ( "S4 HAS INCORRECT BOUNDS" ); END IF; IF BUMP (3) /= 36 THEN FAILED ( "FUNCTION F NOT INVOKED CORRECT NUMBER OF " & "TIMES TO INITIALIZE S4" ); END IF; IF CS3'FIRST = 1 AND CS3'LAST = 1 THEN IF CS3 (1)'FIRST = 1 AND CS3 (1)'LAST = 2 THEN COMMENT ( "CS3 HAS BOUNDS 1 .. 1 AND " & "COMPONENT TYPE ARR (1 .. 2)" ); IF CS3 (1)(1 .. 2) = (3, 4) THEN COMMENT ( "CS3 HAS INITIAL VALUES " & "3 AND 4 - 1" ); ELSIF CS3 (1)(1 .. 2) = (4, 3) THEN COMMENT ( "CS3 HAS INITIAL VALUES " & "4 AND 3 - 1" ); ELSE FAILED ( "CS3 HAS WRONG INITIAL VALUES - 1" ); END IF; ELSE FAILED ( "CS3 HAS WRONG COMPONENT TYPE - 1" ); END IF; ELSIF CS3'FIRST = 1 AND CS3'LAST = 2 THEN IF CS3 (1)'FIRST = 1 AND CS3 (1)'LAST = 1 THEN COMMENT ( "CS3 HAS BOUNDS 1 .. 2 AND " & "COMPONENT TYPE ARR (1 .. 1)" ); IF CS3 (1) (1) = 3 AND CS3 (2) (1) = 4 THEN COMMENT ( "CS3 HAS INITIAL VALUES " & "3 AND 4 - 2" ); ELSIF CS3 (1) (1) = 4 AND CS3 (2) (1) = 3 THEN COMMENT ( "CS3 HAS INITIAL VALUES " & "4 AND 3 - 2" ); ELSE FAILED ( "CS3 HAS WRONG INITIAL VALUES - 2" ); END IF; ELSE FAILED ( "CS3 HAS WRONG COMPONENT TYPE - 2" ); END IF; ELSE FAILED ( "CS3 HAS INCORRECT BOUNDS" ); END IF; IF CS4'FIRST = 1 AND CS4'LAST = 5 THEN IF CS4 (1)'FIRST = 1 AND CS4 (1)'LAST = 6 THEN COMMENT ( "CS4 HAS BOUNDS 1 .. 5 AND " & "COMPONENT TYPE ARR (1 .. 6)" ); ELSE FAILED ( "CS4 HAS WRONG COMPONENT TYPE - 1" ); END IF; ELSIF CS4'FIRST = 1 AND CS4'LAST = 6 THEN IF CS4 (1)'FIRST = 1 AND CS4 (1)'LAST = 5 THEN COMMENT ( "CS4 HAS BOUNDS 1 .. 6 AND " & "COMPONENT TYPE ARR (1 .. 5)" ); ELSE FAILED ( "CS4 HAS WRONG COMPONENT TYPE - 2" ); END IF; ELSE FAILED ( "CS4 HAS INCORRECT BOUNDS" ); END IF; IF BUMP (4) /= 36 THEN FAILED ( "FUNCTION F NOT INVOKED CORRECT NUMBER OF " & "TIMES TO INITIALIZE CS4" ); END IF; END; RESULT; END C32001B;