cxa8001.a

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

A
244
字号
-- CXA8001.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 all elements to be transferred to a sequential file of--      mode Append_File will be placed following the last element currently--      in the file.  --      Check that it is possible to append data to a file that has been --      previously appended to.--      Check that the predefined procedure Write will place an element after--      the last element in the file in mode Append_File.---- TEST DESCRIPTION:--      This test implements a sequential file system that has the capability--      to store data records at the end of a file.  Initially, the file is --      opened with mode Out_File, and data is written to the file.  The file--      is closed, then reopened with mode Append_File.  An additional record--      is written, and again the file is closed.  The file is then reopened,--      again with mode Append_File, and another record is written to the --      file.--      The file is closed again, the reopened with mode In_File, and the data--      in the file is read and checked for proper ordering within the file.----      An expected common usage of Append_File mode would be in the opening--      of a file that currently contains data.  Likewise, the reopening of--      files in Append_Mode that have been previously appended to for the--      addition of more data would be frequently encountered.  This test--      attempts to simulate both situations.  (Of course, in an actual user--      environment, the open/write/close processing would be performed using--      looping structures, rather than the straight-line processing displayed--      here.)---- APPLICABILITY CRITERIA: --      Applicable to all systems capable of supporting IO operations on --      external Sequential_IO files.----       -- CHANGE HISTORY:--      06 Dec 94   SAIC    ACVC 2.0--      27 Feb 97   PWB.CTA Allowed for non-support of some IO operations--!with Sequential_IO;with Report;procedure CXA8001 is   -- Declare data types and objects to be stored in the file.   subtype Name_Type is String (1 .. 10);   type    Tickets   is range 0 .. 1000;   type Order_Type is record      Name          : Name_Type;      No_of_Tickets : Tickets;   end record;      package Order_IO is new Sequential_IO (Order_Type); -- Declare Seq_IO                                                        -- package,   Order_File     : Order_IO.File_Type;                -- and file object.   Order_Filename : constant String :=                            Report.Legal_File_Name ( Nam => "CXA8001" );   Incomplete : exception;begin   Report.Test ("CXA8001", "Check that all elements to be transferred to a " &                           "sequential file of mode Append_File will be "    &                           "placed following the last element currently "    &                           "in the file");   Test_for_Sequential_IO_Support:   begin      -- An implementation that does not support Sequential_IO in a particular      -- environment will raise Use_Error or Name_Error on calls to various      -- Sequential_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.      Order_IO.Create (File => Order_File,        -- Create Sequential_IO file                        Mode => Order_IO.Out_File, -- with mode Out_File.                       Name => Order_Filename);   exception       when Order_IO.Use_Error | Order_IO.Name_Error =>          Report.Not_Applicable             ( "Files not supported - Create as Out_File for Sequential_IO" );          raise Incomplete;   end Test_for_Sequential_IO_Support;   Operational_Test_Block:   declare      -- Assign values into the component fields of the data objects.      Buyer_1 : constant Order_Type := ("John Smith", 3);      Buyer_2 : constant Order_Type :=                   (Name => "Jane Jones", No_of_Tickets => 2);      Buyer_3 : Order_Type := ("Mike Brown", 5);   begin      Order_IO.Write (File => Order_File,      -- Write initial data item                       Item => Buyer_1);        -- to file.      Order_IO.Close (File => Order_File);     -- Close file.      --      -- Enter additional data records into the file.  (Append to a file of      -- previous mode Out_File).      --      Order_IO.Open (Order_File,               -- Open Sequential_IO file                      Order_IO.Append_File,     -- with mode Append_File.                     Order_Filename);                                                     Order_IO.Write (Order_File, Buyer_2);    -- Write second data item                                                -- to file.      Order_IO.Close (File => Order_File);     -- Close file.      -- Check to determine whether file is actually closed.      begin         Order_IO.Write (Order_File, Buyer_2);            Report.Failed("Exception not raised on Write to Closed file");      exception         when Order_IO.Status_Error => null;   -- Expected exception.         when others                =>            Report.Failed("Incorrect exception on Write to Closed file");      end;      --      -- The following code segment demonstrates appending data to a file       -- that has been previously appended to.      --      Order_IO.Open (Order_File,               -- Open Sequential_IO file                      Order_IO.Append_File,     -- with mode Append_File.                     Order_Filename );      Order_IO.Write (Order_File, Buyer_3);    -- Write third data item                                                -- to file.      Order_IO.Close (File => Order_File);     -- Close file.      Test_Verification_Block:      declare         TC_Order1, TC_Order2, TC_Order3 : Order_Type;      begin               Order_IO.Open (Order_File,            -- Open Sequential_IO file                         Order_IO.In_File,      -- with mode In_File.                        Order_Filename );         Order_IO.Read (File => Order_File,    -- Read records from file.                        Item => TC_Order1);                Order_IO.Read (Order_File, TC_Order2);            Order_IO.Read (Order_File, TC_Order3);            -- Compare the contents of each with the individual data items.         -- If items read from file do not match the items placed into          -- the file, in the appropriate order, then fail.         if ((TC_Order1 /= Buyer_1)               or             (TC_Order2.Name /= Buyer_2.Name)     or             (TC_Order2.No_of_Tickets /= Buyer_2.No_of_Tickets) or             not ((TC_Order3.Name = "Mike Brown") and                  (TC_Order3.No_of_Tickets = 5))) then            Report.Failed ("Incorrect appending of record data in file");         end if;         -- Check to determine that no more than three data records were         -- actually written to the file.         if not Order_IO.End_Of_File (Order_File) then            Report.Failed("File not empty after three reads");         end if;      exception               when Order_IO.End_Error =>            -- If three items not in                                                -- file (data overwritten),                                               -- then fail.            Report.Failed ("Incorrect number of record elements in file");         when others =>             Report.Failed ("Error raised during data verification");      end Test_Verification_Block;   exception      when others =>          Report.Failed("Exception raised during Sequential_IO processing");   end Operational_Test_Block;   Deletion:   begin      -- Check that file is open prior to deleting it.      if Order_IO.Is_Open(Order_File) then         Order_IO.Delete (Order_File);               else         Order_IO.Open(Order_File, Order_IO.In_File, Order_Filename);         Order_IO.Delete (Order_File);                end if;   exception      when others =>         Report.Failed            ( "Delete not properly implemented for Sequential_IO" );   end Deletion;   Report.Result;exception   when Incomplete =>      Report.Result;   when others     =>      Report.Failed ( "Unexpected exception" );      Report.Result;end CXA8001;

⌨️ 快捷键说明

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