-- CC3224A.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 A FORMAL ARRAY TYPE DENOTES ITS ACTUAL -- PARAMETER, AND THAT OPERATIONS OF THE FORMAL TYPE ARE THOSE -- IDENTIFIED WITH THE CORRESPONDING OPERATIONS OF THE ACTUAL TYPE. -- HISTORY: -- DHH 09/19/88 CREATED ORIGINAL TEST. -- EDWARD V. BERARD, 14 AUGUST 1990 ADDED CHECKS FOR MULTI- -- DIMENSIONAL ARRAYS -- PWN 11/30/94 REMOVED 'BASE USE ILLEGAL IN ADA 9X. WITH REPORT ; PROCEDURE CC3224A IS SUBTYPE INT IS INTEGER RANGE 1 .. 3; TYPE ARR IS ARRAY(1 .. 3) OF INTEGER; TYPE B_ARR IS ARRAY(1 .. 3) OF BOOLEAN; Q : ARR; R : B_ARR; GENERIC TYPE T IS ARRAY(INT) OF INTEGER; PACKAGE P IS SUBTYPE SUB_T IS T; X : SUB_T := (1, 2, 3); END P; GENERIC TYPE T IS ARRAY(INT) OF BOOLEAN; PACKAGE BOOL IS SUBTYPE SUB_T IS T; END BOOL; SHORT_START : CONSTANT := -100 ; SHORT_END : CONSTANT := 100 ; TYPE SHORT_RANGE IS RANGE SHORT_START .. SHORT_END ; SUBTYPE REALLY_SHORT IS SHORT_RANGE RANGE -9 .. 0 ; TYPE MONTH_TYPE IS (JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC) ; SUBTYPE FIRST_HALF IS MONTH_TYPE RANGE JAN .. JUN ; 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 => 8, YEAR => 1990) ; FIRST_DATE : DATE := (DAY => 6, MONTH => JUN, YEAR => 1967) ; WALL_DATE : DATE := (MONTH => NOV, DAY => 9, YEAR => 1989) ; SUBTYPE FIRST_FIVE IS CHARACTER RANGE 'A' .. 'E' ; TYPE THREE_DIMENSIONAL IS ARRAY (REALLY_SHORT, FIRST_HALF, FIRST_FIVE) OF DATE ; TD_ARRAY : THREE_DIMENSIONAL ; SECOND_TD_ARRAY : THREE_DIMENSIONAL ; GENERIC TYPE CUBE IS ARRAY (REALLY_SHORT, FIRST_HALF, FIRST_FIVE) OF DATE ; PACKAGE TD_ARRAY_PACKAGE IS SUBTYPE SUB_CUBE IS CUBE ; TEST_3D_ARRAY : SUB_CUBE := (THREE_DIMENSIONAL'RANGE => (THREE_DIMENSIONAL'RANGE (2) => (THREE_DIMENSIONAL'RANGE (3) => TODAY))) ; END TD_ARRAY_PACKAGE ; BEGIN -- CC3224A REPORT.TEST ("CC3224A", "CHECK THAT A FORMAL ARRAY TYPE DENOTES " & "ITS ACTUAL PARAMETER, AND THAT OPERATIONS OF " & "THE FORMAL TYPE ARE THOSE IDENTIFIED WITH THE " & "CORRESPONDING OPERATIONS OF THE ACTUAL TYPE"); ONE_DIMENSIONAL: DECLARE PACKAGE P1 IS NEW P (ARR); TYPE NEW_T IS NEW P1.SUB_T; OBJ_NEWT : NEW_T; BEGIN -- ONE_DIMENSIONAL IF NEW_T'FIRST /= ARR'FIRST THEN REPORT.FAILED("'FIRST ATTRIBUTE REPORT.FAILED"); END IF; IF NEW_T'LAST /= ARR'LAST THEN REPORT.FAILED("'LAST ATTRIBUTE REPORT.FAILED"); END IF; IF NEW_T'FIRST(1) /= ARR'FIRST(1) THEN REPORT.FAILED("'FIRST(N) ATTRIBUTE REPORT.FAILED"); END IF; IF NOT (NEW_T'LAST(1) = ARR'LAST(1)) THEN REPORT.FAILED("'LAST(N) ATTRIBUTE REPORT.FAILED"); END IF; IF 2 NOT IN NEW_T'RANGE THEN REPORT.FAILED("'RANGE ATTRIBUTE REPORT.FAILED"); END IF; IF 3 NOT IN NEW_T'RANGE(1) THEN REPORT.FAILED("'RANGE(N) ATTRIBUTE REPORT.FAILED"); END IF; IF NEW_T'LENGTH /= ARR'LENGTH THEN REPORT.FAILED("'LENGTH ATTRIBUTE REPORT.FAILED"); END IF; IF NEW_T'LENGTH(1) /= ARR'LENGTH(1) THEN REPORT.FAILED("'LENGTH(N) ATTRIBUTE REPORT.FAILED"); END IF; OBJ_NEWT := (1, 2, 3); IF REPORT.IDENT_INT(3) /= OBJ_NEWT(3) THEN REPORT.FAILED("ASSIGNMENT REPORT.FAILED"); END IF; IF NEW_T'(1, 2, 3) NOT IN NEW_T THEN REPORT.FAILED("QUALIFIED EXPRESSION REPORT.FAILED"); END IF; Q := (1, 2, 3); IF NEW_T(Q) /= OBJ_NEWT THEN REPORT.FAILED("EXPLICIT CONVERSION REPORT.FAILED"); END IF; IF Q(1) /= OBJ_NEWT(1) THEN REPORT.FAILED("INDEXING REPORT.FAILED"); END IF; IF (1, 2) /= OBJ_NEWT(1 .. 2) THEN REPORT.FAILED("SLICE REPORT.FAILED"); END IF; IF (1, 2) & OBJ_NEWT(3) /= NEW_T(Q)THEN REPORT.FAILED("CATENATION REPORT.FAILED"); END IF; IF NOT (P1.X IN ARR) THEN REPORT.FAILED ("FORMAL DOES NOT DENOTE ACTUAL"); END IF; END ONE_DIMENSIONAL ; BOOLEAN_ONE_DIMENSIONAL: DECLARE PACKAGE B1 IS NEW BOOL (B_ARR); TYPE NEW_T IS NEW B1.SUB_T; OBJ_NEWT : NEW_T; BEGIN -- BOOLEAN_ONE_DIMENSIONAL OBJ_NEWT := (TRUE, TRUE, TRUE); R := (TRUE, TRUE, TRUE); IF (NEW_T'((TRUE, TRUE, TRUE)) XOR OBJ_NEWT) /= NEW_T'((FALSE, FALSE, FALSE)) THEN REPORT.FAILED("XOR REPORT.FAILED - BOOLEAN") ; END IF; IF (NEW_T'((FALSE, FALSE, TRUE)) AND OBJ_NEWT) /= NEW_T'((FALSE, FALSE, TRUE)) THEN REPORT.FAILED("AND REPORT.FAILED - BOOLEAN") ; END IF; IF (NEW_T'((FALSE, FALSE, FALSE)) OR OBJ_NEWT) /= NEW_T'((TRUE, TRUE, TRUE)) THEN REPORT.FAILED("OR REPORT.FAILED - BOOLEAN") ; END IF ; END BOOLEAN_ONE_DIMENSIONAL ; THREE_DIMENSIONAL_TEST: DECLARE PACKAGE TD IS NEW TD_ARRAY_PACKAGE (CUBE => THREE_DIMENSIONAL) ; TYPE NEW_CUBE IS NEW TD.SUB_CUBE ; NEW_CUBE_OBJECT : NEW_CUBE ; BEGIN -- THREE_DIMENSIONAL_TEST IF (NEW_CUBE'FIRST /= THREE_DIMENSIONAL'FIRST) OR (NEW_CUBE'FIRST (1) /= THREE_DIMENSIONAL'FIRST) OR (NEW_CUBE'FIRST (2) /= THREE_DIMENSIONAL'FIRST (2)) OR (NEW_CUBE'FIRST (3) /= THREE_DIMENSIONAL'FIRST (3)) THEN REPORT.FAILED ("PROBLEMS WITH 'FIRST FOR MULTI-" & "DIMENSIONAL ARRAYS.") ; END IF ; IF (NEW_CUBE'LAST /= THREE_DIMENSIONAL'LAST) OR (NEW_CUBE'LAST (1) /= THREE_DIMENSIONAL'LAST) OR (NEW_CUBE'LAST (2) /= THREE_DIMENSIONAL'LAST (2)) OR (NEW_CUBE'LAST (3) /= THREE_DIMENSIONAL'LAST (3)) THEN REPORT.FAILED ("PROBLEMS WITH 'LAST FOR MULTI-" & "DIMENSIONAL ARRAYS.") ; END IF ; IF (-5 NOT IN NEW_CUBE'RANGE) OR (-3 NOT IN NEW_CUBE'RANGE (1)) OR (FEB NOT IN NEW_CUBE'RANGE (2)) OR ('C' NOT IN NEW_CUBE'RANGE (3)) THEN REPORT.FAILED ("PROBLEMS WITH 'RANGE FOR MULTI-" & "DIMENSIONAL ARRAYS.") ; END IF ; IF (NEW_CUBE'LENGTH /= THREE_DIMENSIONAL'LENGTH) OR (NEW_CUBE'LENGTH (1) /= THREE_DIMENSIONAL'LENGTH) OR (NEW_CUBE'LENGTH (2) /= THREE_DIMENSIONAL'LENGTH (2)) OR (NEW_CUBE'LENGTH (3) /= THREE_DIMENSIONAL'LENGTH (3)) THEN REPORT.FAILED ("PROBLEMS WITH 'LENGTH FOR MULTI-" & "DIMENSIONAL ARRAYS.") ; END IF ; NEW_CUBE_OBJECT := (NEW_CUBE'RANGE => (NEW_CUBE'RANGE (2) => (NEW_CUBE'RANGE (3) => FIRST_DATE))) ; IF FIRST_DATE /= NEW_CUBE_OBJECT (-3, MAR, 'D') THEN REPORT.FAILED ("ASSIGNMENT FOR MULTI-DIMENSIONAL " & "ARRAYS FAILED.") ; END IF ; IF NEW_CUBE'(NEW_CUBE'RANGE => (NEW_CUBE'RANGE (2) => (NEW_CUBE'RANGE (3) => WALL_DATE))) NOT IN NEW_CUBE THEN REPORT.FAILED ("QUALIFIED EXPRESSION FOR MULTI-" & "DIMENSIONAL ARRAYS FAILED.") ; END IF ; SECOND_TD_ARRAY := (NEW_CUBE'RANGE => (NEW_CUBE'RANGE (2) => (NEW_CUBE'RANGE (3) => FIRST_DATE))) ; IF NEW_CUBE (SECOND_TD_ARRAY) /= NEW_CUBE_OBJECT THEN REPORT.FAILED ("EXPLICIT CONVERSION FOR MULTI-" & "DIMENSIONAL ARRAYS FAILED.") ; END IF ; IF SECOND_TD_ARRAY (-2, FEB, 'B') /= NEW_CUBE_OBJECT (-2, FEB, 'B') THEN REPORT.FAILED ("INDEXING FOR MULTI-" & "DIMENSIONAL ARRAYS FAILED.") ; END IF ; IF NOT (TD.TEST_3D_ARRAY IN THREE_DIMENSIONAL) THEN REPORT.FAILED ("FORMAL MULTI-DIMENSIONAL ARRAY " & "DOES NOT DENOTE ACTUAL.") ; END IF ; END THREE_DIMENSIONAL_TEST ; REPORT.RESULT ; END CC3224A ;