cc51b03.a

来自「用于进行gcc测试」· A 代码 · 共 259 行

A
259
字号
-- CC51B03.A----                             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 the attribute S'Definite, where S is an indefinite formal--      private or derived type, returns true if the actual corresponding to--      S is definite, and returns false otherwise.---- TEST DESCRIPTION:--      A definite subtype is any subtype which is not indefinite. An--      indefinite subtype is either:--         a) An unconstrained array subtype.--         b) A subtype with unknown discriminants (this includes class-wide--            types).--         c) A subtype with unconstrained discriminants without defaults.----      The possible forms of indefinite formal subtype are as follows:----         Formal derived types:--          X - Ancestor is an unconstrained array type--          * - Ancestor is a discriminated record type without defaults--          X - Ancestor is a discriminated tagged type--          * - Ancestor type has unknown discriminants--            - Formal type has an unknown discriminant part--          * - Formal type has a known discriminant part----         Formal private types:--            - Formal type has an unknown discriminant part--          * - Formal type has a known discriminant part----      The formal subtypes preceded by an 'X' above are not covered, because--      other rules prevent a definite subtype from being passed as an actual.--      The formal subtypes preceded by an '*' above are not covered, because--      'Definite is less likely to be used for these formals.----      The following kinds of actuals are passed to various of the formal--      types listed above:----            - Undiscriminated type--            - Type with defaulted discriminants--            - Type with undefaulted discriminants--            - Class-wide type----      A typical usage of S'Definite might be algorithm selection in a--      generic I/O package, e.g., the use of fixed-length or variable-length--      records depending on whether the actual is definite or indefinite.--      In such situations, S'Definite would appear in if conditions or other--      contexts requiring a boolean expression. This test checks S'Definite--      in such usage contexts but, for brevity, omits any surrounding--      usage code.--      -- TEST FILES:--      The following files comprise this test:----         FC51B00.A--      -> CC51B03.A------ CHANGE HISTORY:--      06 Dec 94   SAIC    ACVC 2.0----!with FC51B00;  -- Indefinite subtype declarations.package CC51B03_0 is   --   -- Formal private type cases:   --   generic      type Formal (<>) is private;              -- Formal has unknown   package PrivateFormalUnknownDiscriminants is -- discriminant part.      function Is_Definite return Boolean;   end PrivateFormalUnknownDiscriminants;   --   -- Formal derived type cases:   --   generic      type Formal (<>) is new FC51B00.Vector    -- Formal has an unknown disc.        with private;                           -- part; ancestor is tagged.   package TaggedAncestorUnknownDiscriminants is      function Is_Definite return Boolean;   end TaggedAncestorUnknownDiscriminants;end CC51B03_0;     --==================================================================--package body CC51B03_0 is   package body PrivateFormalUnknownDiscriminants is      function Is_Definite return Boolean is      begin         if Formal'Definite then                -- Attribute used in "if"            -- ...Execute algorithm #1...       -- condition inside subprogram.            return True;         else            -- ...Execute algorithm #2...            return False;         end if;      end Is_Definite;   end PrivateFormalUnknownDiscriminants;   package body TaggedAncestorUnknownDiscriminants is      function Is_Definite return Boolean is      begin         return Formal'Definite;                -- Attribute used in return      end Is_Definite;                          -- statement inside subprogram.   end TaggedAncestorUnknownDiscriminants;end CC51B03_0;     --==================================================================--with FC51B00;package CC51B03_1 is   subtype Spin_Type is Natural range 0 .. 3;   type Extended_Vector (Spin : Spin_Type) is   -- Tagged type with     new FC51B00.Vector with null record;       -- discriminant (indefinite).      end CC51B03_1;     --==================================================================--with FC51B00;   -- Indefinite subtype declarations.with CC51B03_0; -- Generic package declarations.with CC51B03_1;with Report;procedure CC51B03 is   --   -- Instances for formal private type with unknown discriminants:   --   package PrivateFormal_UndiscriminatedTaggedActual is new     CC51B03_0.PrivateFormalUnknownDiscriminants (FC51B00.Vector);   package PrivateFormal_ClassWideActual is new     CC51B03_0.PrivateFormalUnknownDiscriminants (FC51B00.Vector'Class);   package PrivateFormal_DiscriminatedTaggedActual is new     CC51B03_0.PrivateFormalUnknownDiscriminants (FC51B00.Square_Pair);   package PrivateFormal_DiscriminatedUndefaultedRecordActual is new     CC51B03_0.PrivateFormalUnknownDiscriminants (FC51B00.Square);   subtype Length is Natural range 0 .. 20;   type Message (Len : Length := 0) is record   -- Record type with defaulted      Text : String (1 .. Len);                 -- discriminant (definite).   end record;         package PrivateFormal_DiscriminatedDefaultedRecordActual is new     CC51B03_0.PrivateFormalUnknownDiscriminants (Message);   --   -- Instances for formal derived tagged type with unknown discriminants:   --   package DerivedFormal_UndiscriminatedTaggedActual is new     CC51B03_0.TaggedAncestorUnknownDiscriminants (FC51B00.Vector);   package DerivedFormal_ClassWideActual is new     CC51B03_0.TaggedAncestorUnknownDiscriminants (FC51B00.Vector'Class);   package DerivedFormal_DiscriminatedTaggedActual is new     CC51B03_0.TaggedAncestorUnknownDiscriminants (CC51B03_1.Extended_Vector);begin   Report.Test ("CC51B03", "Check that S'Definite returns true if the " &                "actual corresponding to S is definite, and false otherwise");   if not PrivateFormal_UndiscriminatedTaggedActual.Is_Definite then      Report.Failed ("Formal private/unknown discriminants: wrong " &                     "result for undiscriminated tagged actual");   end if;     if PrivateFormal_ClassWideActual.Is_Definite then      Report.Failed ("Formal private/unknown discriminants: wrong " &                     "result for class-wide actual");   end if;     if PrivateFormal_DiscriminatedTaggedActual.Is_Definite then      Report.Failed ("Formal private/unknown discriminants: wrong " &                     "result for discriminated tagged actual");   end if;     if PrivateFormal_DiscriminatedUndefaultedRecordActual.Is_Definite then      Report.Failed ("Formal private/unknown discriminants: wrong result " &                     "for record actual with undefaulted discriminants");   end if;     if not PrivateFormal_DiscriminatedDefaultedRecordActual.Is_Definite then      Report.Failed ("Formal private/unknown discriminants: wrong result " &                     "for record actual with defaulted discriminants");   end if;     if not DerivedFormal_UndiscriminatedTaggedActual.Is_Definite then      Report.Failed ("Formal derived/unknown discriminants: wrong result " &                     "for undiscriminated tagged actual");   end if;     if DerivedFormal_ClassWideActual.Is_Definite then      Report.Failed ("Formal derived/unknown discriminants: wrong result " &                     "for class-wide actual");   end if;     if DerivedFormal_DiscriminatedTaggedActual.Is_Definite then      Report.Failed ("Formal derived/unknown discriminants: wrong result " &                     "for discriminated tagged actual");   end if;     Report.Result;end CC51B03;

⌨️ 快捷键说明

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