⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cxa8002.a

📁 linux下编程用 编译软件
💻 A
字号:
-- CXA8002.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 resetting a file using mode Append_File allows for the --      writing of elements to the file starting after the last element in--      the file.  --      Check that the result of function Name can be used on a subsequent--      reopen of the file.--      Check that a mode change occurs on reset of a file to/from mode --      Append_File.---- TEST DESCRIPTION:--      This test simulates the read/write of data from/to an individual --      sequential file. New data can be appended to the end of the existing --      file, and the same file can be reset to allow reading of data from --      the file.  This process can occur multiple times.--      When the mode of the file is changed with a Reset, the current mode--      value assigned to the file is checked using the result of function--      Mode.  This, in conjunction with the read/write operations, verifies--      that a mode change has taken place on Reset.--      --      An expected common usage of the scenarios found in this test would--      be a case where a single data file is kept open continuously, being--      reset for read/append of data.  For systems that do not support a--      direct form of I/O, this would allow for efficient use of a sequential--      I/O file.---- 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--      19 Feb 97   PWB.CTA Fixed handling for file non-support and Reset--                          non-support.--!with Sequential_IO;with Report;procedure CXA8002 is   subtype Employee_Data is String (1 .. 11);   package Data_IO       is new Sequential_IO (Employee_Data);    Employee_Data_File : Data_IO.File_Type;   Employee_Filename  : constant String :=      Report.Legal_File_Name (Nam => "CXA8002");   Incomplete         : exception;begin   Report.Test ("CXA8002", "Check that resetting a file using mode "  &                           "Append_File allows for the writing of "   &                           "elements to the file starting after the " &                           "last element 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.      Data_IO.Create (File => Employee_Data_File,    -- Create file in                       Mode => Data_IO.Append_File,   -- mode Append_File.                      Name => Employee_Filename);      --      -- The following portion of code demonstrates the fact that a sequential      -- file can be created in Append_File mode, and that data can be written      -- to the file.      --   exception      when Data_IO.Use_Error | Data_IO.Name_Error =>         Report.Not_Applicable            ( "Sequential files not supported - Create as Append_File");         raise Incomplete;   end Test_for_Sequential_IO_Support;      Operational_Test_Block:      declare         Blank_Data         : constant Employee_Data := "           ";         Employee_1         : constant Employee_Data := "123-45-6789";         Employee_2         :          Employee_Data := "987-65-4321";         -- Note: Artificial numerical data chosen above to prevent any         --       unintended similarity with persons alive or dead.         TC_Employee_Data   :          Employee_Data := Blank_Data;         function TC_Mode_Selection (Selector : Integer)            return Data_IO.File_Mode is         begin            case Report.Ident_Int(Selector) is               when 1       => return Data_IO.In_File;               when 2       => return Data_IO.Out_File;               when others  => return Data_IO.Append_File;            end case;         end TC_Mode_Selection;         Employee_Filename : constant String :=       -- Use function Name to            Data_IO.Name (File => Employee_Data_File); -- store filename in                                                       -- string variable.      begin         Data_IO.Write (File => Employee_Data_File,   -- Write initial data                         Item => Employee_1);          -- entry to file.         --         -- The following portion of code demonstrates that a sequential file         -- can be reset to various file modes, including Append_File mode,          -- allowing data to be added to the end of the file.         --         begin           Data_IO.Reset (File => Employee_Data_File,   -- Reset file with                           Mode => Data_IO.In_File);     -- mode In_File.         exception           when Data_IO.Use_Error =>              Report.Not_Applicable                ("Reset to In_File not supported for Sequential_IO");              raise Incomplete;           when others =>              Report.Failed                 ("Unexpected exception on Reset to In_File (Sequential_IO)");              raise Incomplete;         end;         if Data_IO."="(Data_IO.Mode (Employee_Data_File),                         TC_Mode_Selection (1)) then   -- Compare In_File mode                                                      -- Reset successful,             Data_IO.Read (File => Employee_Data_File, -- now verify file data.                          Item => TC_Employee_Data);                  if ((TC_Employee_Data (1 .. 7)  /= "123-45-") or                (TC_Employee_Data (5 .. 11) /= "45-6789")) then               Report.Failed ("Data read error");            end if;         else            Report.Failed ("File mode not changed by Reset");         end if;         --         -- Simulate appending data to a file that has previously been written          -- to and read from.         --         begin           Data_IO.Reset (File => Employee_Data_File,   -- Reset file with                           Mode => Data_IO.Append_File); -- mode Append_File.         exception           when Data_IO.Use_Error =>             Report.Not_Applicable               ("Reset to Append_File not supported for Sequential_IO");             raise Incomplete;           when others =>             Report.Failed               ("Unexpected exception on Reset to Append_File (Sequential_IO)");              raise Incomplete;         end;         if Data_IO.Is_Open (Employee_Data_File) then -- File remains open                                                      -- following Reset to                                                       -- Append_File mode?            if Data_IO."=" (Data_IO.Mode (Employee_Data_File),                             TC_Mode_Selection (3)) then   -- Compare to                                                          -- Append_File mode.               Data_IO.Write (File => Employee_Data_File, -- Write additional                              Item => Employee_2);        -- data to file.            else               Report.Failed ("File mode not changed by Reset");            end if;         else            Report.Failed               ("File status not Open following Reset to Append mode");         end if;         Data_IO.Close (Employee_Data_File);         Test_Verification_Block:         begin            Data_IO.Open (File => Employee_Data_File, -- Reopen file, using                           Mode => Data_IO.In_File,    -- previous result of                          Name => Employee_Filename); -- function Name.            TC_Employee_Data := Blank_Data;           -- Clear record field.            Data_IO.Read (Employee_Data_File,         -- Read first record,                          TC_Employee_Data);          -- check ordering of                                                       -- records.            if not ((TC_Employee_Data (1 .. 3)  = "123") and then                    (TC_Employee_Data (4 .. 11) = "-45-6789")) then               Report.Failed ("Data read error - first record");            end if;            TC_Employee_Data := Blank_Data;           -- Clear record field.            Data_IO.Read (Employee_Data_File,         -- Read second record,                          TC_Employee_Data);          -- check for ordering of                                                       -- records.            if ((TC_Employee_Data (1 .. 6)  /= "987-65") or else                not (TC_Employee_Data (3 .. 11) = "7-65-4321")) then               Report.Failed ("Data read error - second record");            end if;            -- Check that only two items were written to the file.            if not Data_IO.End_Of_File(Employee_Data_File) then               Report.Failed("Incorrect number of records in file");            end if;         exception                  when Data_IO.End_Error =>             -- If two 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;      Final_Block:      begin        -- Check that file is open prior to deleting it.        if Data_IO.Is_Open(Employee_Data_File) then           Data_IO.Delete (Employee_Data_File);                 else           Data_IO.Open(Employee_Data_File,                         Data_IO.In_File,                         Employee_Filename);           Data_IO.Delete (Employee_Data_File);                  end if;      exception         when others =>            Report.Failed ("Sequential_IO Delete not properly supported");      end Final_Block;   Report.Result;exception  when Incomplete =>    Report.Result;  when others =>    Report.Failed ("Unexpected exception");    Report.Result;end CXA8002;

⌨️ 快捷键说明

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