cxacc01.a

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

A
300
字号
-- CXACC01.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 use of 'Class'Output and 'Class'Input allow stream --      manipulation of objects of non-limited class-wide types.---- TEST DESCRIPTION:--      This test demonstrates the uses of 'Class'Output and 'Class'Input--      in moving objects of a particular class to and from a stream file.--      A procedure uses a class-wide parameter to move objects of specific --      types in the class to the stream, using the 'Class'Output attribute --      of the root type of the class.  A function returns a class-wide object, --      using the 'Class'Input attribute of the root type of the class to --      extract the object from the stream.--      A field-by-field comparison of record objects is performed to validate--      the data read from the stream.  Operator precedence rules are used--      in the comparison rather than parentheses.--      -- APPLICABILITY CRITERIA: --      This test is applicable to all implementations capable of supporting--      external Stream_IO files.------ CHANGE HISTORY:--      06 Dec 94   SAIC    ACVC 2.0--      14 Nov 95   SAIC    Corrected prefix of 'Tag attribute for ACVC 2.0.1.--      24 Aug 96   SAIC    Changed a call to "Create" to "Reset".--      26 Feb 97   CTA.PWB Allowed for non-support of some IO operations.--!with FXACC00, Ada.Streams.Stream_IO, Ada.Tags, Report;procedure CXACC01 is   Order_File     : Ada.Streams.Stream_IO.File_Type;   Order_Stream   : Ada.Streams.Stream_IO.Stream_Access;   Order_Filename : constant String :=                            Report.Legal_File_Name ( Nam => "CXACC01" );   Incomplete : exception;begin   Report.Test ("CXACC01", "Check that the use of 'Class'Output "        &                           "and 'Class'Input allow stream manipulation " &                           "of objects of non-limited class-wide types");   Test_for_Stream_IO_Support:   begin      -- If an implementation does not support Stream_IO in a particular      -- environment, the exception Use_Error or Name_Error will be raised on       -- calls to various Stream_IO operations.  This block statement       -- encloses a call to Create, which should produce an exception in a       -- non-supportive environment.  These exceptions will be handled to       -- produce a Not_Applicable result.      Ada.Streams.Stream_IO.Create (Order_File,                                     Ada.Streams.Stream_IO.Out_File,                                    Order_Filename);   exception       when Ada.Streams.Stream_IO.Use_Error | Ada.Streams.Stream_IO.Name_Error =>          Report.Not_Applicable             ( "Files not supported - Create as Out_File for Stream_IO" );          raise Incomplete;   end Test_for_Stream_IO_Support;   Operational_Test_Block:   declare      -- Store tag values associated with objects of tagged types.      TC_Box_Office_Tag : constant String :=        Ada.Tags.External_Tag(FXACC00.Ticket_Request'Tag);      TC_Summer_Tag     : constant String :=        Ada.Tags.External_Tag(FXACC00.Subscriber_Request'Tag);      TC_Mayoral_Tag    : constant String :=        Ada.Tags.External_Tag(FXACC00.VIP_Request'Tag);      TC_Late_Tag       : constant String :=        Ada.Tags.External_Tag(FXACC00.Last_Minute_Request'Tag);         -- The following procedure will take an object of the Ticket_Request         -- class and output it to the stream.  Objects of any extended type         -- in the class can be output to the stream with this procedure.      procedure Order_Entry (Order : FXACC00.Ticket_Request'Class) is      begin         FXACC00.Ticket_Request'Class'Output (Order_Stream, Order);      end Order_Entry;      -- The following function will retrieve from the stream an object of      -- the Ticket_Request class.      function Order_Retrieval return FXACC00.Ticket_Request'Class is      begin         return FXACC00.Ticket_Request'Class'Input (Order_Stream);      end Order_Retrieval;   begin      Order_Stream := Ada.Streams.Stream_IO.Stream (Order_File);      -- Store the data objects in the stream.      -- Each of the objects is of a different type within the class.      Order_Entry (FXACC00.Box_Office_Request);     -- Object of root type      Order_Entry (FXACC00.Summer_Subscription);    -- Obj. of extended type      Order_Entry (FXACC00.Mayoral_Ticket_Request); -- Obj. of extended type      Order_Entry (FXACC00.Late_Request);           -- Object of twice                                                     -- extended type.      -- Reset mode of stream to In_File prior to reading data from it.      Reset1:      begin         Ada.Streams.Stream_IO.Reset (Order_File,                                       Ada.Streams.Stream_IO.In_File);      exception         when Ada.Streams.Stream_IO.Use_Error =>            Report.Not_Applicable               ( "Reset to In_File not supported for Stream_IO - 1" );            raise Incomplete;      end Reset1;      Process_Order_Block:      declare         use FXACC00;         -- Declare variables of the root type class,         -- and initialize them with class-wide objects returned from         -- the stream as function result.         Order_1 : Ticket_Request'Class := Order_Retrieval;         Order_2 : Ticket_Request'Class := Order_Retrieval;         Order_3 : Ticket_Request'Class := Order_Retrieval;         Order_4 : Ticket_Request'Class := Order_Retrieval;         -- Declare objects of the specific types from within the class         -- that correspond to the types of the data written to the         -- stream.  Perform a type conversion on the class-wide objects.         Ticket_Order      : Ticket_Request :=                                 Ticket_Request(Order_1);         Subscriber_Order  : Subscriber_Request :=                                 Subscriber_Request(Order_2);         VIP_Order         : VIP_Request :=                                 VIP_Request(Order_3);         Last_Minute_Order : Last_Minute_Request :=                                 Last_Minute_Request(Order_4);      begin         -- Perform a field-by-field comparison of all the class-wide          -- objects input from the stream with specific type objects         -- originally written to the stream.         if Ticket_Order.Location                /=             Box_Office_Request.Location          or            Ticket_Order.Number_Of_Tickets       /=            Box_Office_Request.Number_Of_Tickets          then            Report.Failed ("Ticket_Request object validation failure");         end if;         if Subscriber_Order.Location               /=            Summer_Subscription.Location            or            Subscriber_Order.Number_Of_Tickets      /=            Summer_Subscription.Number_Of_Tickets   or            Subscriber_Order.Subscription_Number    /=            Summer_Subscription.Subscription_Number         then            Report.Failed ("Subscriber_Request object validation failure");         end if;         if VIP_Order.Location                       /=            Mayoral_Ticket_Request.Location          or            VIP_Order.Number_Of_Tickets              /=            Mayoral_Ticket_Request.Number_Of_Tickets or            VIP_Order.Rank                           /=            Mayoral_Ticket_Request.Rank                       then            Report.Failed ("VIP_Request object validation failure");         end if;         if Last_Minute_Order.Location               /=            Late_Request.Location                    or            Last_Minute_Order.Number_Of_Tickets      /=            Late_Request.Number_Of_Tickets           or            Last_Minute_Order.Rank                   /=            Late_Request.Rank                        or            Last_Minute_Order.Special_Consideration  /=            Late_Request.Special_Consideration       or            Last_Minute_Order.Donation               /=            Late_Request.Donation                             then            Report.Failed ("Last_Minute_Request object validation failure");         end if;         -- Verify tag values from before and after processing.         -- The 'Tag attribute is used with objects of a class-wide type.            if TC_Box_Office_Tag /=             Ada.Tags.External_Tag(Order_1'Tag)         then            Report.Failed("Failed tag comparison - 1");         end if;              if TC_Summer_Tag /=            Ada.Tags.External_Tag(Order_2'Tag)         then            Report.Failed("Failed tag comparison - 2");         end if;         if TC_Mayoral_Tag /=              Ada.Tags.External_Tag(Order_3'Tag)         then            Report.Failed("Failed tag comparison - 3");         end if;         if TC_Late_Tag /=                 Ada.Tags.External_Tag(Order_4'Tag)         then            Report.Failed("Failed tag comparison - 4");         end if;      end Process_Order_Block;         -- After all the data has been correctly extracted, the file          -- should be empty.      if not Ada.Streams.Stream_IO.End_Of_File (Order_File) then         Report.Failed ("Stream file not empty");      end if;   exception      when Incomplete =>         raise;       when Constraint_Error =>         Report.Failed ("Constraint_Error raised in Operational Block");      when others =>          Report.Failed ("Exception raised in Operational Test Block");   end Operational_Test_Block;   Deletion:   begin      if Ada.Streams.Stream_IO.Is_Open (Order_File) then         Ada.Streams.Stream_IO.Delete (Order_File);      else         Ada.Streams.Stream_IO.Open (Order_File,                                     Ada.Streams.Stream_IO.Out_File,                                      Order_Filename);         Ada.Streams.Stream_IO.Delete (Order_File);      end if;   exception      when others =>         Report.Failed            ( "Delete not properly implemented for Stream_IO" );   end Deletion;   Report.Result;exception   when Incomplete =>      Report.Result;   when others     =>      Report.Failed ( "Unexpected exception" );      Report.Result;end CXACC01;

⌨️ 快捷键说明

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