c390011.a

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

A
251
字号
-- C390011.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 tagged types declared within generic package declarations--     generate distinct tags for each instance of the generic.---- TEST DESCRIPTION:--     This test defines a very simple generic package (with the expectation--     that it should be easily be shared), and a few instances of that--     package.  In true user-like fashion, two of the instances are identical--     (to wit: IIO is new Integer_IO(Integer)).  The tags generated for each--     of them are placed into a list.  The last action of the test is to--     check that everything in the list is unique.----     Almost as an aside, this test defines functions that return T'Base and--     T'Class, and then exercises these functions.----     (JPR) persistent objects really need a function like:--        function Get_Object return T'class;------ CHANGE HISTORY:--      20 OCT 95   SAIC   Initial version--      23 APR 96   SAIC   Commentary Corrections 2.1----!----------------------------------------------------------------- C390011_0with Ada.Tags;package C390011_0 is  procedure Add_Tag_To_List( T : Ada.Tags.Tag; X_Name, X_Tag: String );  procedure Check_List_For_Duplicates;end C390011_0;-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --with Report;package body C390011_0 is  use type Ada.Tags.Tag;  type SP is access String;  type List_Item;  type List_P is access List_Item;  type List_Item is record    The_Tag  : Ada.Tags.Tag;    Exp_Name : SP;    Ext_Tag  : SP;    Next : List_P;  end record;  The_List : List_P;  procedure Add_Tag_To_List ( T : Ada.Tags.Tag; X_Name, X_Tag: String ) is  begin  -- prepend the tag information to the list    The_List := new List_Item'( The_Tag  => T,                                 Exp_Name => new String'(X_Name),                                 Ext_Tag  => new String'(X_Tag),                                Next     => The_List );  end Add_Tag_To_List;  procedure Check_List_For_Duplicates is    Finger : List_P;    Thumb  : List_P := The_List;  begin  --     while Thumb /= null loop      Finger := Thumb.Next;      while Finger /= null loop        -- Check that the tag is unique        if Finger.The_Tag = Thumb.The_Tag then          Report.Failed("Duplicate Tag");        end if;        -- Check that the Expanded name is unique        if Finger.Exp_Name.all = Thumb.Exp_Name.all then          Report.Failed("Tag name " & Finger.Exp_Name.all & " repeats");        end if;        -- Check that the External Tag is unique        if Finger.Ext_Tag.all = Thumb.Ext_Tag.all then          Report.Failed("External Tag " & Finger.Ext_Tag.all & " repeats");        end if;        Finger := Finger.Next;      end loop;      Thumb  := Thumb.Next;   end loop;  end Check_List_For_Duplicates;begin  -- some things I just don't trust...  if The_List /= null then    Report.Failed("Implicit default for The_List not null");  end if;end C390011_0;----------------------------------------------------------------- C390011_1generic  type Index is (<>);  type Item is private;package C390011_1 is  type List is array(Index range <>) of Item;  type ListP is access all List;  type Table is tagged record    Data: ListP;  end record;  function Sort( T: in Table'Class ) return Table'Class;  function Stable_Table return Table'Class;  function Table_End( T: Table ) return Index'Base;end C390011_1;-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --package body C390011_1 is    -- In a user program this package would DO something  function Sort( T: in Table'Class ) return Table'Class is  begin   return T;  end Sort;  Empty : Table'Class := Table'( Data => null );  function Stable_Table return Table'Class is  begin    return Empty;  end Stable_Table;  function Table_End( T: Table ) return Index'Base is  begin    return Index'Base( T.Data.all'Last );  end Table_End;end C390011_1;----------------------------------------------------------------- C390011_2with C390011_1;package C390011_2 is new C390011_1( Index => Character, Item => Float );----------------------------------------------------------------- C390011_3with C390011_1;package C390011_3 is new C390011_1( Index => Character, Item => Float );----------------------------------------------------------------- C390011_4with C390011_1;package C390011_4 is new C390011_1( Index => Integer, Item => Character );----------------------------------------------------------------- C390011_5with C390011_3;with C390011_4;package C390011_5 is  type Table_3 is new C390011_3.Table with record    Serial_Number : Integer;  end record;  type Table_4 is new C390011_4.Table with record    Serial_Number : Integer;  end record;end C390011_5;-- no package body C390011_5 required------------------------------------------------------------------- C390011with Report;with C390011_0;with C390011_2;with C390011_3;with C390011_4;with C390011_5;with Ada.Tags;procedure C390011 isbegin  -- Main test procedure.  Report.Test ("C390011", "Check that tagged types declared within " &                          "generic package declarations generate distinct " &                          "tags for each instance of the generic. " &                          "Check that 'Base may be used as a subtype mark. " &                          "Check that T'Base and T'Class are allowed as " &                          "the subtype mark in a function result" );  -- build the tag information table  C390011_0.Add_Tag_To_List(T => C390011_2.Table'Tag,                       X_Name => Ada.Tags.Expanded_Name(C390011_2.Table'Tag),                       X_Tag  => Ada.Tags.External_Tag(C390011_2.Table'Tag) );  C390011_0.Add_Tag_To_List(T => C390011_3.Table'Tag,                       X_Name => Ada.Tags.Expanded_Name(C390011_3.Table'Tag),                       X_Tag  => Ada.Tags.External_Tag(C390011_3.Table'Tag) );  C390011_0.Add_Tag_To_List(T => C390011_4.Table'Tag,                       X_Name => Ada.Tags.Expanded_Name(C390011_4.Table'Tag),                       X_Tag  => Ada.Tags.External_Tag(C390011_4.Table'Tag) );  C390011_0.Add_Tag_To_List(T => C390011_5.Table_3'Tag,                     X_Name => Ada.Tags.Expanded_Name(C390011_5.Table_3'Tag),                     X_Tag  => Ada.Tags.External_Tag(C390011_5.Table_3'Tag) );  C390011_0.Add_Tag_To_List(T => C390011_5.Table_4'Tag,                     X_Name => Ada.Tags.Expanded_Name(C390011_5.Table_4'Tag),                     X_Tag  => Ada.Tags.External_Tag(C390011_5.Table_4'Tag) );  -- preform the check for distinct tags  C390011_0.Check_List_For_Duplicates;  Report.Result;end C390011;

⌨️ 快捷键说明

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