📄 c52011b.ada
字号:
-- C52011B.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 DISCRIMINANT CONSTRAINTS FOR ASSIGNMENT OF ACCESS SUBTYPES.-- SPECIFICALLY, CHECK THAT:-- A) ANY ACCESS TYPE VARIABLE AND CONSTRAINED SUBTYPE VARIABLES OF THAT-- TYPE MAY BE ASSIGNED TO ONE ANOTHER IF THE VALUE BEING ASSIGNED-- IS NULL.-- B) VARIABLES OF THE SAME CONSTRAINED ACCESS SUBTYPE MAY BE ASSIGNED-- TO ONE ANOTHER OR TO VARIABLES OF THE BASE ACCESS TYPE.-- C) CONSTRAINT_ERROR IS RAISED UPON ASSIGNMENT OF NON-NULL OBJECTS-- BETWEEN DIFFERENTLY CONSTRAINED ACCESS SUBTYPES.-- D) CONSTRAINT_ERROR IS RAISED UPON ASSIGNMENT OF A NON-NULL OBJECT-- OF A BASE ACCESS TYPE VARIABLE TO A VARIABLE OF ONE OF ITS-- CONSTRAINED SUBTYPES IF THE CONSTRAINTS ON THE OBJECT DIFFER-- FROM THOSE ON THE SUBTYPE.-- E) NULL CAN BE ASSIGNED TO BASE ACCESS TYPES AND ANY CONSTRAINED-- SUBTYPES OF THIS TYPE.-- ASL 7/06/81-- RM 6/17/82-- RLB 6/29/01 - FIXED TO ALLOW AGGRESIVE OPTIMIZATION.WITH REPORT;PROCEDURE C52011B IS USE REPORT; TYPE REC(DISC : INTEGER := -1 ) IS RECORD NULL; END RECORD; TYPE REC_NAME IS ACCESS REC; SUBTYPE S1 IS REC_NAME(IDENT_INT(5)); SUBTYPE S2 IS REC_NAME(IDENT_INT(3)); W : REC_NAME := NULL; -- E. X1,X2 : S1 := NULL; -- E. Y1,Y2 : S2 := NULL; -- E. W_NONNULL : REC_NAME := NEW REC(7) ; X1_NONNULL : S1 := NEW REC(IDENT_INT(5)); Y1_NONNULL : S2 := NEW REC(IDENT_INT(3)); TOO_EARLY : BOOLEAN := TRUE;BEGIN TEST ("C52011B", "DISCRIMINANT CONSTRAINTS ON ACCESS SUBTYPE " & "OBJECTS MUST BE SATISFIED FOR ASSIGNMENT"); BEGIN IF EQUAL(3,3) THEN W_NONNULL := X1; -- A. END IF; IF W_NONNULL /= X1 THEN FAILED ("ASSIGNMENT FAILED - 1"); END IF; IF EQUAL(3,3) THEN W := Y1; -- A. END IF; IF W /= Y1 THEN FAILED ("ASSIGNMENT FAILED - 2"); END IF; IF EQUAL(3,3) THEN X1_NONNULL := Y1; -- A. END IF; IF X1_NONNULL /= Y1 THEN FAILED ("ASSIGNMENT FAILED - 3"); END IF; IF EQUAL(3,3) THEN Y1_NONNULL := Y2; -- A. END IF; IF Y1_NONNULL /= Y2 THEN FAILED ("ASSIGNMENT FAILED - 4"); END IF; X1 := NEW REC(IDENT_INT(5)); IF EQUAL(3,3) THEN X2 := X1; -- B. END IF; IF X1 /= X2 THEN FAILED ("ASSIGNMENT FAILED - 5"); END IF; IF EQUAL(3,3) THEN W := X1; -- B. END IF; IF W /= X1 THEN FAILED ("ASSIGNMENT FAILED - 6"); END IF; BEGIN Y1 := X1; -- C. IF Y1.DISC /= REPORT.IDENT_INT(3) THEN FAILED ("NON-NULL ASSIGNMENT MADE BETWEEN TWO " & "VARIABLES OF DIFFERENT CONSTRAINED ACCESS SUBTYPES " & "AND CONSTRAINT IS CHANGED"); ELSE FAILED ("NON-NULL ASSIGNMENT MADE BETWEEN TWO " & "VARIABLES OF DIFFERENT CONSTRAINED ACCESS SUBTYPES " & "AND CONSTRAINT IS NOT CHANGED"); END IF; EXCEPTION WHEN CONSTRAINT_ERROR => NULL; WHEN OTHERS => FAILED ("WRONG EXCEPTION - 1"); END; W := NEW REC(IDENT_INT(3)); BEGIN X1 := W; -- D. IF X1.DISC /= REPORT.IDENT_INT(5) THEN FAILED ("NON-NULL ASSIGNMENT MADE FROM UNCONSTRAINED " & "ACCESS TYPE DESIGNATING CONSTRAINED OBJECT TO "& "ACCESS SUBTYPE WITH DIFFERENT CONSTRAINT " & "AND CONSTRAINT IS CHANGED"); ELSE FAILED ("NON-NULL ASSIGNMENT MADE FROM UNCONSTRAINED " & "ACCESS TYPE DESIGNATING CONSTRAINED OBJECT TO "& "ACCESS SUBTYPE WITH DIFFERENT CONSTRAINT " & "AND CONSTRAINT IS NOT CHANGED"); END IF; EXCEPTION WHEN CONSTRAINT_ERROR => NULL ; WHEN OTHERS => FAILED ("WRONG EXCEPTION - 2"); END; EXCEPTION WHEN OTHERS => FAILED ("EXCEPTION RAISED"); END; RESULT;END C52011B;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -