c43004a.ada

来自「linux下编程用 编译软件」· ADA 代码 · 共 351 行

ADA
351
字号
-- C43004A.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 CONSTRAINT_ERROR IS RAISED IF A VALUE FOR A--     NON-DISCRIMINANT SCALAR COMPONENT OF AN AGGREGATE IS NOT--     WITHIN THE RANGE OF THE COMPONENT'S SUBTYPE.-- HISTORY:--     BCB 01/22/88  CREATED ORIGINAL TEST.--     RJW 06/27/90  CORRECTED CONSTRAINTS OF TYPE DFIX.--     LDC 09/25/90  ADDED A BLOCK IN THE EXCEPTION HANDLER SO IT CAN--                   NOT OPTIMIZE IT AWAY,  ALSO INITIALIZED EACH--                   OBJECT TO VALID DATA BEFORE DOING THE INVALID,--                   MADE 'IDENT_XXX' FUNCTIONS SO THE COMPILER CAN--                   NOT JUST EVALUATE THE ASSIGNMENT AND PUT IN CODE--                   FOR A CONSTRAINT ERROR IN IS PLACE.--     JRL 06/07/96  Changed value in aggregate in subtest 4 to value--                   guaranteed to be in the base range of the type FIX.--                   Corrected typo.WITH REPORT; USE REPORT;PROCEDURE C43004A IS     TYPE INT IS RANGE 1 .. 8;     SUBTYPE SINT IS INT RANGE 2 .. 7;     TYPE ENUM IS (VINCE, JOHN, TOM, PHIL, ROSA, JODIE, BRIAN, DAVE);     SUBTYPE SENUM IS ENUM RANGE JOHN .. BRIAN;     TYPE FL IS DIGITS 5 RANGE 0.0 .. 10.0;     SUBTYPE SFL IS FL RANGE 1.0 .. 9.0;     TYPE FIX IS DELTA 0.25 RANGE 0.0 .. 8.0;     SUBTYPE SFIX IS FIX RANGE 1.0 .. 7.0;     TYPE DINT IS NEW INTEGER RANGE 1 .. 8;     SUBTYPE SDINT IS DINT RANGE 2 .. 7;     TYPE DENUM IS NEW ENUM RANGE VINCE .. DAVE;     SUBTYPE SDENUM IS DENUM RANGE JOHN .. BRIAN;     TYPE DFL IS NEW FLOAT RANGE 0.0 .. 10.0;     SUBTYPE SDFL IS DFL RANGE 1.0 .. 9.0;     TYPE DFIX IS NEW FIX RANGE 0.5 .. 7.5;     SUBTYPE SDFIX IS DFIX RANGE 1.0 .. 7.0;     TYPE REC1 IS RECORD           E1, E2, E3, E4, E5 : SENUM;     END RECORD;     TYPE REC2 IS RECORD           E1, E2, E3, E4, E5 : SFIX;     END RECORD;     TYPE REC3 IS RECORD           E1, E2, E3, E4, E5 : SDENUM;     END RECORD;     TYPE REC4 IS RECORD           E1, E2, E3, E4, E5 : SDFIX;     END RECORD;     ARRAY_OBJ : ARRAY(1..2) OF INTEGER;     A  : ARRAY(1..5) OF SINT;     B  : REC1;     C  : ARRAY(1..5) OF SFL;     D  : REC2;     E  : ARRAY(1..5) OF SDINT;     F  : REC3;     G  : ARRAY(1..5) OF SDFL;     H  : REC4;     GENERIC          TYPE GENERAL_PURPOSE IS PRIVATE;     FUNCTION GENEQUAL(ONE, TWO : GENERAL_PURPOSE) RETURN BOOLEAN;     FUNCTION GENEQUAL(ONE, TWO : GENERAL_PURPOSE) RETURN BOOLEAN IS     BEGIN          IF EQUAL(3,3) THEN               RETURN ONE = TWO;          ELSE               RETURN ONE /= TWO;          END IF;     END GENEQUAL;     FUNCTION EQUAL IS NEW GENEQUAL(SENUM);     FUNCTION EQUAL IS NEW GENEQUAL(SFL);     FUNCTION EQUAL IS NEW GENEQUAL(SFIX);     FUNCTION EQUAL IS NEW GENEQUAL(SDENUM);     FUNCTION EQUAL IS NEW GENEQUAL(SDFL);     FUNCTION EQUAL IS NEW GENEQUAL(SDFIX);     GENERIC          TYPE GENERAL_PURPOSE IS PRIVATE;          WITH FUNCTION EQUAL_GENERAL(ONE, TWO : GENERAL_PURPOSE)                    RETURN BOOLEAN;     FUNCTION GEN_IDENT (X : GENERAL_PURPOSE) RETURN GENERAL_PURPOSE;     FUNCTION GEN_IDENT (X : GENERAL_PURPOSE) RETURN GENERAL_PURPOSE IS          BEGIN          IF EQUAL_GENERAL (X, X) THEN  -- ALWAYS EQUAL.               RETURN X;                -- ALWAYS EXECUTED.          END IF;                                        -- NEVER EXECUTED.          RETURN X;     END GEN_IDENT;     FUNCTION IDENT_FL    IS NEW GEN_IDENT(FL, EQUAL);     FUNCTION IDENT_FIX   IS NEW GEN_IDENT(FIX, EQUAL);     FUNCTION IDENT_DFL   IS NEW GEN_IDENT(DFL, EQUAL);     FUNCTION IDENT_DFIX  IS NEW GEN_IDENT(DFIX, EQUAL);BEGIN     TEST ("C43004A", "CHECK THAT CONSTRAINT_ERROR IS RAISED IF A " &                      "VALUE FOR A NON-DISCRIMINANT SCALAR COMPONENT " &                      "OF AN AGGREGATE IS NOT WITHIN THE RANGE OF " &                      "THE COMPONENT'S SUBTYPE");     ARRAY_OBJ := (1, 2);     BEGIN          A  := (2,3,4,5,6);            -- OK          IF EQUAL (INTEGER (A(IDENT_INT(1))),                    INTEGER (A(IDENT_INT(2)))) THEN               COMMENT ("DON'T OPTIMIZE A");          END IF;          A := (SINT(IDENT_INT(1)),2,3,4,7);                                       -- CONSTRAINT_ERROR BY AGGREGATE                                       -- WITH INTEGER COMPONENTS.          FAILED ("CONSTRAINT_ERROR WAS NOT RAISED - 1");          IF EQUAL (INTEGER (A(IDENT_INT(1))),                    INTEGER (A(IDENT_INT(1)))) THEN               COMMENT ("DON'T OPTIMIZE A");          END IF;     EXCEPTION          WHEN CONSTRAINT_ERROR =>               IF EQUAL (ARRAY_OBJ(IDENT_INT(1)),                         ARRAY_OBJ(IDENT_INT(2))) THEN                    COMMENT ("DON'T OPTIMIZE EXCEPTION HANDLER");               END IF;          WHEN OTHERS =>               FAILED ("AN EXCEPTION OTHER THAN CONSTRAINT_ERROR " &                       "WAS RAISED - 1");     END;     BEGIN          B := (JOHN,TOM,PHIL,ROSA,JOHN);  -- OK          IF EQUAL (B.E1, B.E2) THEN               COMMENT ("DON'T OPTIMIZE B");          END IF;          B := (ENUM'VAL(IDENT_INT(ENUM'POS(DAVE))), TOM, PHIL,                ROSA, JODIE);                                       -- CONSTRAINT_ERROR BY AGGREGATE                                       -- WITH COMPONENTS OF AN                                       -- ENUMERATION TYPE.          FAILED ("CONSTRAINT_ERROR WAS NOT RAISED - 2");          IF NOT EQUAL (B.E1, B.E1) THEN               COMMENT ("DON'T OPTIMIZE B");          END IF;     EXCEPTION          WHEN CONSTRAINT_ERROR =>               IF EQUAL (ARRAY_OBJ(IDENT_INT(1)),                         ARRAY_OBJ(IDENT_INT(2))) THEN                    COMMENT ("DON'T OPTIMIZE EXCEPTION HANDLER");               END IF;          WHEN OTHERS =>               FAILED ("AN EXCEPTION OTHER THAN CONSTRAINT_ERROR " &                       "WAS RAISED - 2");     END;     BEGIN          C := (2.0,3.0,4.0,5.0,6.0);  -- OK          IF EQUAL (C(IDENT_INT(1)), C(IDENT_INT(2))) THEN               COMMENT ("DON'T OPTIMIZE C");          END IF;          C := (IDENT_FL(1.0),2.0,3.0,4.0,IDENT_FL(10.0));                                      -- CONSTRAINT_ERROR BY AGGREGATE                                      -- WITH FLOATING POINT COMPONENTS.          FAILED ("CONSTRAINT_ERROR WAS NOT RAISED - 3");          IF NOT EQUAL (C(IDENT_INT(1)), C(IDENT_INT(1))) THEN               COMMENT ("DON'T OPTIMIZE C");          END IF;     EXCEPTION          WHEN CONSTRAINT_ERROR =>               IF EQUAL (ARRAY_OBJ(IDENT_INT(1)),                         ARRAY_OBJ(IDENT_INT(2))) THEN                    COMMENT ("DON'T OPTIMIZE EXCEPTION HANDLER");               END IF;          WHEN OTHERS =>               FAILED ("AN EXCEPTION OTHER THAN CONSTRAINT_ERROR " &                       "WAS RAISED - 3");     END;     BEGIN          D := (2.2,3.3,4.4,5.5,6.6); -- OK          IF EQUAL (D.E1, D.E5) THEN               COMMENT ("DON'T OPTIMIZE D");          END IF;          D := (IDENT_FIX(1.0),2.1,3.3,4.4,IDENT_FIX(7.75));                                       -- CONSTRAINT_ERROR BY AGGREGATE                                       -- WITH FIXED POINT COMPONENTS.          FAILED ("CONSTRAINT_ERROR WAS NOT RAISED - 4");          IF NOT EQUAL (D.E5, D.E5) THEN               COMMENT ("DON'T OPTIMIZE D");          END IF;     EXCEPTION          WHEN CONSTRAINT_ERROR =>               IF EQUAL (ARRAY_OBJ(IDENT_INT(1)),                         ARRAY_OBJ(IDENT_INT(2))) THEN                    COMMENT ("DON'T OPTIMIZE EXCEPTION HANDLER");               END IF;          WHEN OTHERS =>               FAILED ("AN EXCEPTION OTHER THAN CONSTRAINT_ERROR " &                       "WAS RAISED - 4");     END;     BEGIN          E := (2,3,4,5,6); -- OK          IF EQUAL (INTEGER (E(IDENT_INT(1))),                    INTEGER (E(IDENT_INT(2)))) THEN               COMMENT ("DON'T OPTIMIZE E");          END IF;          E := (SDINT(IDENT_INT(1)),2,3,4,7);                                     -- CONSTRAINT_ERROR BY AGGREGATE                                     -- WITH DERIVED INTEGER COMPONENTS.          FAILED ("CONSTRAINT_ERROR WAS NOT RAISED - 5");          IF NOT EQUAL (INTEGER (E(IDENT_INT(1))),                        INTEGER (E(IDENT_INT(1)))) THEN               COMMENT ("DON'T OPTIMIZE E");          END IF;     EXCEPTION          WHEN CONSTRAINT_ERROR =>               IF EQUAL (ARRAY_OBJ(IDENT_INT(1)),                         ARRAY_OBJ(IDENT_INT(2))) THEN                    COMMENT ("DON'T OPTIMIZE EXCEPTION HANDLER");               END IF;          WHEN OTHERS =>               FAILED ("AN EXCEPTION OTHER THAN CONSTRAINT_ERROR " &                       "WAS RAISED - 5");     END;     BEGIN          F := (JOHN,TOM,PHIL,ROSA,JOHN);  -- OK          IF EQUAL (F.E1, F.E2) THEN               COMMENT ("DON'T OPTIMIZE F");          END IF;          F := (DENUM'VAL(IDENT_INT(DENUM'POS(VINCE))), TOM, PHIL,                ROSA, JODIE);                                       -- CONSTRAINT_ERROR BY AGGREGATE                                       -- WITH COMPONENTS OF A DERIVED                                       -- ENUMERATION TYPE.          FAILED ("CONSTRAINT_ERROR WAS NOT RAISED - 6");          IF NOT EQUAL (F.E1, F.E1) THEN               COMMENT ("DON'T OPTIMIZE F");          END IF;     EXCEPTION          WHEN CONSTRAINT_ERROR =>               IF EQUAL (ARRAY_OBJ(IDENT_INT(1)),                         ARRAY_OBJ(IDENT_INT(2))) THEN                    COMMENT ("DON'T OPTIMIZE EXCEPTION HANDLER");               END IF;          WHEN OTHERS =>               FAILED ("AN EXCEPTION OTHER THAN CONSTRAINT_ERROR " &                       "WAS RAISED - 6");     END;     BEGIN          G := (2.0,3.0,4.0,5.0,6.0); -- OK          IF EQUAL (G(IDENT_INT(1)), G(IDENT_INT(2))) THEN               COMMENT ("DON'T OPTIMIZE G");          END IF;          G := (IDENT_DFL(1.0),2.0,3.0,4.0,IDENT_DFL(10.0));                                       -- CONSTRAINT_ERROR BY AGGREGATE                                       -- WITH DERIVED FLOATING POINT                                       -- COMPONENTS.          FAILED ("CONSTRAINT_ERROR WAS NOT RAISED - 7");          IF NOT EQUAL (G(IDENT_INT(1)), G(IDENT_INT(1))) THEN               COMMENT ("DON'T OPTIMIZE G");          END IF;     EXCEPTION          WHEN CONSTRAINT_ERROR =>               IF EQUAL (ARRAY_OBJ(IDENT_INT(1)),                         ARRAY_OBJ(IDENT_INT(2))) THEN                    COMMENT ("DON'T OPTIMIZE EXCEPTION HANDLER");               END IF;          WHEN OTHERS =>               FAILED ("AN EXCEPTION OTHER THAN CONSTRAINT_ERROR " &                       "WAS RAISED - 7");     END;     BEGIN          H := (2.2,3.3,4.4,5.5,6.6); -- OK          IF EQUAL (H.E1, H.E2) THEN               COMMENT ("DON'T OPTIMIZE H");          END IF;          H := (IDENT_DFIX(2.0),2.5,3.5,4.3,IDENT_DFIX(7.4));                                       -- CONSTRAINT_ERROR BY AGGREGATE                                       -- WITH DERIVED FIXED POINT                                       -- COMPONENTS.          FAILED ("CONSTRAINT_ERROR WAS NOT RAISED - 8");          IF EQUAL (H.E1, H.E5) THEN               COMMENT ("DON'T OPTIMIZE H");          END IF;     EXCEPTION          WHEN CONSTRAINT_ERROR =>               IF EQUAL (ARRAY_OBJ(IDENT_INT(1)),                         ARRAY_OBJ(IDENT_INT(2))) THEN                    COMMENT ("DON'T OPTIMIZE EXCEPTION HANDLER");               END IF;          WHEN OTHERS =>               FAILED ("AN EXCEPTION OTHER THAN CONSTRAINT_ERROR " &                       "WAS RAISED - 8");     END;     RESULT;END C43004A;

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?