| -- C74004A.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 OPERATIONS DEPENDING ON THE FULL DECLARATION OF A |
| -- PRIVATE TYPE ARE AVAILABLE WITHIN THE PACKAGE BODY. |
| |
| -- HISTORY: |
| -- BCB 04/05/88 CREATED ORIGINAL TEST. |
| -- PWN 01/31/95 REMOVED INCONSISTENCIES WITH ADA 9X. |
| |
| WITH REPORT; USE REPORT; |
| |
| PROCEDURE C74004A IS |
| |
| PACKAGE P IS |
| TYPE PR IS PRIVATE; |
| TYPE ARR1 IS LIMITED PRIVATE; |
| TYPE ARR2 IS PRIVATE; |
| TYPE REC (D : INTEGER) IS PRIVATE; |
| TYPE ACC IS PRIVATE; |
| TYPE TSK IS LIMITED PRIVATE; |
| TYPE FLT IS LIMITED PRIVATE; |
| TYPE FIX IS LIMITED PRIVATE; |
| |
| TASK TYPE T IS |
| ENTRY ONE(V : IN OUT INTEGER); |
| END T; |
| |
| PROCEDURE CHECK (V : ARR2); |
| PRIVATE |
| TYPE PR IS NEW INTEGER; |
| |
| TYPE ARR1 IS ARRAY(1..5) OF INTEGER; |
| |
| TYPE ARR2 IS ARRAY(1..5) OF BOOLEAN; |
| |
| TYPE REC (D : INTEGER) IS RECORD |
| COMP1 : INTEGER; |
| COMP2 : BOOLEAN; |
| END RECORD; |
| |
| TYPE ACC IS ACCESS INTEGER; |
| |
| TYPE TSK IS NEW T; |
| |
| TYPE FLT IS DIGITS 5; |
| |
| TYPE FIX IS DELTA 2.0**(-1) RANGE -100.0 .. 100.0; |
| END P; |
| |
| PACKAGE BODY P IS |
| X1, X2, X3 : PR; |
| BOOL : BOOLEAN := IDENT_BOOL(FALSE); |
| VAL : INTEGER := IDENT_INT(0); |
| FVAL : FLOAT := 0.0; |
| ST : STRING(1..2); |
| O1 : ARR1 := (1,2,3,4,5); |
| Y1 : ARR2 := (FALSE,TRUE,FALSE,TRUE,FALSE); |
| Y2 : ARR2 := (OTHERS => TRUE); |
| Y3 : ARR2 := (OTHERS => FALSE); |
| Z1 : REC(0) := (0,1,FALSE); |
| W1, W2 : ACC := NEW INTEGER'(0); |
| V1 : TSK; |
| |
| TASK BODY T IS |
| BEGIN |
| ACCEPT ONE(V : IN OUT INTEGER) DO |
| V := IDENT_INT(10); |
| END ONE; |
| END T; |
| |
| PROCEDURE CHECK (V : ARR2) IS |
| BEGIN |
| IF V /= (TRUE,FALSE,TRUE,FALSE,TRUE) THEN |
| FAILED ("IMPROPER VALUE PASSED AS AGGREGATE"); |
| END IF; |
| END CHECK; |
| BEGIN |
| TEST ("C74004A", "CHECK THAT OPERATIONS DEPENDING ON THE " & |
| "FULL DECLARATION OF A PRIVATE TYPE ARE " & |
| "AVAILABLE WITHIN THE PACKAGE BODY"); |
| |
| X1 := 10; |
| X2 := 5; |
| |
| X3 := X1 + X2; |
| |
| IF X3 /= 15 THEN |
| FAILED ("IMPROPER RESULT FROM ADDITION OPERATOR"); |
| END IF; |
| |
| X3 := X1 - X2; |
| |
| IF X3 /= 5 THEN |
| FAILED ("IMPROPER RESULT FROM SUBTRACTION OPERATOR"); |
| END IF; |
| |
| X3 := X1 * X2; |
| |
| IF X3 /= 50 THEN |
| FAILED ("IMPROPER RESULT FROM MULTIPLICATION OPERATOR"); |
| END IF; |
| |
| X3 := X1 / X2; |
| |
| IF X3 /= 2 THEN |
| FAILED ("IMPROPER RESULT FROM DIVISION OPERATOR"); |
| END IF; |
| |
| X3 := X1 ** 2; |
| |
| IF X3 /= 100 THEN |
| FAILED ("IMPROPER RESULT FROM EXPONENTIATION OPERATOR"); |
| END IF; |
| |
| BOOL := X1 < X2; |
| |
| IF BOOL THEN |
| FAILED ("IMPROPER RESULT FROM LESS THAN OPERATOR"); |
| END IF; |
| |
| BOOL := X1 > X2; |
| |
| IF NOT BOOL THEN |
| FAILED ("IMPROPER RESULT FROM GREATER THAN OPERATOR"); |
| END IF; |
| |
| BOOL := X1 <= X2; |
| |
| IF BOOL THEN |
| FAILED ("IMPROPER RESULT FROM LESS THAN OR EQUAL TO " & |
| "OPERATOR"); |
| END IF; |
| |
| BOOL := X1 >= X2; |
| |
| IF NOT BOOL THEN |
| FAILED ("IMPROPER RESULT FROM GREATER THAN OR EQUAL " & |
| "TO OPERATOR"); |
| END IF; |
| |
| X3 := X1 MOD X2; |
| |
| IF X3 /= 0 THEN |
| FAILED ("IMPROPER RESULT FROM MOD OPERATOR"); |
| END IF; |
| |
| X3 := X1 REM X2; |
| |
| IF X3 /= 0 THEN |
| FAILED ("IMPROPER RESULT FROM REM OPERATOR"); |
| END IF; |
| |
| X3 := ABS(X1); |
| |
| IF X3 /= 10 THEN |
| FAILED ("IMPROPER RESULT FROM ABS OPERATOR - 1"); |
| END IF; |
| |
| X1 := -10; |
| |
| X3 := ABS(X1); |
| |
| IF X3 /= 10 THEN |
| FAILED ("IMPROPER RESULT FROM ABS OPERATOR - 2"); |
| END IF; |
| |
| X3 := PR'BASE'FIRST; |
| |
| IF X3 /= PR(INTEGER'FIRST) THEN |
| FAILED ("IMPROPER RESULT FROM 'BASE'FIRST"); |
| END IF; |
| |
| X3 := PR'FIRST; |
| |
| IF X3 /= PR(INTEGER'FIRST) THEN |
| FAILED ("IMPROPER RESULT FROM 'FIRST"); |
| END IF; |
| |
| VAL := PR'WIDTH; |
| |
| IF NOT EQUAL(VAL,INTEGER'WIDTH) THEN |
| FAILED ("IMPROPER RESULT FROM 'WIDTH"); |
| END IF; |
| |
| VAL := PR'POS(X3); |
| |
| IF NOT EQUAL(VAL,INTEGER'FIRST) THEN |
| FAILED ("IMPROPER RESULT FROM 'POS"); |
| END IF; |
| |
| X3 := PR'VAL(VAL); |
| |
| IF X3 /= PR(INTEGER'FIRST) THEN |
| FAILED ("IMPROPER RESULT FROM 'VAL"); |
| END IF; |
| |
| X3 := PR'SUCC(X2); |
| |
| IF X3 /= 6 THEN |
| FAILED ("IMPROPER RESULT FROM 'SUCC"); |
| END IF; |
| |
| X3 := PR'PRED(X2); |
| |
| IF X3 /= 4 THEN |
| FAILED ("IMPROPER RESULT FROM 'PRED"); |
| END IF; |
| |
| ST := PR'IMAGE(X3); |
| |
| IF ST /= INTEGER'IMAGE(INTEGER(X3)) THEN |
| FAILED ("IMPROPER RESULT FROM 'IMAGE"); |
| END IF; |
| |
| X3 := PR'VALUE(ST); |
| |
| IF X3 /= PR(INTEGER'VALUE(ST)) THEN |
| FAILED ("IMPROPER RESULT FROM 'VALUE"); |
| END IF; |
| |
| CHECK ((TRUE,FALSE,TRUE,FALSE,TRUE)); |
| |
| IF O1(2) /= IDENT_INT(2) THEN |
| FAILED ("IMPROPER VALUE FROM INDEXING"); |
| END IF; |
| |
| IF O1(2..4) /= (2,3,4) THEN |
| FAILED ("IMPROPER VALUES FROM SLICING"); |
| END IF; |
| |
| IF VAL IN O1'RANGE THEN |
| FAILED ("IMPROPER RESULT FROM 'RANGE"); |
| END IF; |
| |
| VAL := O1'LENGTH; |
| |
| IF NOT EQUAL(VAL,5) THEN |
| FAILED ("IMPROPER RESULT FROM 'LENGTH"); |
| END IF; |
| |
| Y3 := Y1(1..2) & Y2(3..5); |
| |
| IF Y3 /= (FALSE,TRUE,TRUE,TRUE,TRUE) THEN |
| FAILED ("IMPROPER RESULT FROM CATENATION"); |
| END IF; |
| |
| Y3 := NOT Y1; |
| |
| IF Y3 /= (TRUE,FALSE,TRUE,FALSE,TRUE) THEN |
| FAILED ("IMPROPER RESULT FROM NOT OPERATOR"); |
| END IF; |
| |
| Y3 := Y1 AND Y2; |
| |
| IF Y3 /= (FALSE,TRUE,FALSE,TRUE,FALSE) THEN |
| FAILED ("IMPROPER RESULT FROM AND OPERATOR"); |
| END IF; |
| |
| Y3 := Y1 OR Y2; |
| |
| IF Y3 /= (TRUE,TRUE,TRUE,TRUE,TRUE) THEN |
| FAILED ("IMPROPER RESULT FROM OR OPERATOR"); |
| END IF; |
| |
| Y3 := Y1 XOR Y2; |
| |
| IF Y3 /= (TRUE,FALSE,TRUE,FALSE,TRUE) THEN |
| FAILED ("IMPROPER RESULT FROM XOR OPERATOR"); |
| END IF; |
| |
| VAL := Z1.COMP1; |
| |
| IF NOT EQUAL(VAL,1) THEN |
| FAILED ("IMPROPER RESULT FROM SELECTION OF RECORD " & |
| "COMPONENTS"); |
| END IF; |
| |
| W1 := NEW INTEGER'(0); |
| |
| IF NOT EQUAL(W1.ALL,0) THEN |
| FAILED ("IMPROPER RESULT FROM ALLOCATION"); |
| END IF; |
| |
| W1 := NULL; |
| |
| IF W1 /= NULL THEN |
| FAILED ("IMPROPER RESULT FROM NULL LITERAL"); |
| END IF; |
| |
| VAL := W2.ALL; |
| |
| IF NOT EQUAL(VAL,0) THEN |
| FAILED ("IMPROPER RESULT FROM SELECTED COMPONENT"); |
| END IF; |
| |
| BOOL := V1'CALLABLE; |
| |
| IF NOT BOOL THEN |
| FAILED ("IMPROPER RESULT FROM 'CALLABLE"); |
| END IF; |
| |
| BOOL := V1'TERMINATED; |
| |
| IF BOOL THEN |
| FAILED ("IMPROPER RESULT FROM 'TERMINATED"); |
| END IF; |
| |
| V1.ONE(VAL); |
| |
| IF NOT EQUAL(VAL,10) THEN |
| FAILED ("IMPROPER RESULT RETURNED FROM ENTRY SELECTION"); |
| END IF; |
| |
| IF NOT (FLT(1.0) IN FLT) THEN |
| FAILED ("IMPROPER RESULT FROM IMPLICIT CONVERSION"); |
| END IF; |
| |
| VAL := FLT'DIGITS; |
| |
| IF NOT EQUAL(VAL,5) THEN |
| FAILED ("IMPROPER RESULT FROM 'DIGITS"); |
| END IF; |
| |
| BOOL := FLT'MACHINE_ROUNDS; |
| |
| BOOL := FLT'MACHINE_OVERFLOWS; |
| |
| VAL := FLT'MACHINE_RADIX; |
| |
| VAL := FLT'MACHINE_MANTISSA; |
| |
| VAL := FLT'MACHINE_EMAX; |
| |
| VAL := FLT'MACHINE_EMIN; |
| |
| FVAL := FIX'DELTA; |
| |
| IF FVAL /= 2.0**(-1) THEN |
| FAILED ("IMPROPER RESULT FROM 'DELTA"); |
| END IF; |
| |
| VAL := FIX'FORE; |
| |
| VAL := FIX'AFT; |
| |
| END P; |
| |
| USE P; |
| |
| BEGIN |
| RESULT; |
| END C74004A; |