欢迎来到虫虫下载站 | 资源下载 资源专辑 关于我们
虫虫下载站

cxa9001.a

linux下编程用 编译软件
A
字号:
-- CXA9001.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 operations defined in the generic package --      Ada.Storage_IO provide the ability to store and retrieve objects --      which may include implicit levels of indirection in their --      implementation, from an in-memory buffer.---- TEST DESCRIPTION:--      The following scenario demonstrates how an object of a type with --      (potential) levels of indirection (based on the implementation) --      can be "flattened" and written/read to/from a Direct_IO file.--      In this small example, we have attempted to simulate the situation --      where two independent programs are using a particular Direct_IO file,--      one writing data to the file, and the second program reading that file.--      The Storage_IO Read and Write procedures are used to "flatten" --      and reconstruct objects of the record type. ---- APPLICABILITY CRITERIA: --      Applicable to implementations capable of supporting external--      Direct_IO files.----       -- CHANGE HISTORY:--      06 Dec 94   SAIC    ACVC 2.0--      07 Jun 95   SAIC    Modified to constrain type used with Storage_IO.--      20 Nov 95   SAIC    Corrected and enhanced for ACVC 2.0.1.--      25 Feb 97   PWB.CTA Allowed for non-support of some IO operations--!with Report;with Ada.Storage_IO;with Ada.Direct_IO;procedure CXA9001 is   package Dir_IO is new Ada.Direct_IO (Integer);   Test_File  : Dir_IO.File_Type;   Incomplete : exception;begin   Report.Test ("CXA9001", "Check that the operations defined in the "      &                           "generic package Ada.Storage_IO provide the "    &                           "ability to store and retrieve objects which "   &                           "may include implicit levels of indirection in " &                           "their implementation, from an in-memory buffer");   Test_For_Direct_IO_Support:   begin      -- The following Create does not have any bearing on the test scenario,      -- but is included to check that the implementation supports Direct_IO      -- files.  An exception on this Create statement will raise a Name_Error      -- or Use_Error, which will be handled to produce a Not_Applicable      -- result. If created, the file is immediately deleted, as it is not       -- needed for the program scenario.      Dir_IO.Create (Test_File, Dir_IO.Out_File, Report.Legal_File_Name(1));   exception       when Dir_IO.Use_Error | Dir_IO.Name_Error =>          Report.Not_Applicable             ( "Files not supported - Create as Out_File for Direct_IO" );          raise Incomplete;   end Test_for_Direct_IO_Support;   Deletion1:   begin      Dir_IO.Delete (Test_File);   exception      when others =>         Report.Failed            ( "Delete not properly implemented for Direct_IO - 1" );   end Deletion1;   Test_Block:   declare      The_Filename : constant String := Report.Legal_File_Name(2);      -- The following type is the basic unit used in this test. It is      -- incorporated into the definition of the Unit_Array_Type.      type Unit_Type is         record            Position     : Natural := 19;            String_Value : String (1..9) := (others => 'X');         end record;      TC_Size : Natural := Natural'First;      procedure Data_Storage (Number_Of_Units  : in     Natural;                              Result           :    out Natural) is         -- Type based on input parameter.  Uses type Unit_Type          -- as the array element.         type Unit_Array_Type is array (1..Number_Of_Units)            of Unit_Type;          -- This type definition is the ultimate storage type used         -- in this test; uses type Unit_Array_Type as a record         -- component field.         -- This record type contains a component that is an array of         -- records, with each of these records containing a Natural         -- and a String value (i.e., a record containing an array of         -- records).         type Data_Storage_Type is            record               Data_Value : Natural := Number_Of_Units;               Unit_Array : Unit_Array_Type;            end record;         -- The instantiation of the following generic package is a         -- central point in this test.  Storage_IO is instantiated for         -- a specific data type, and will be used to "flatten" objects         -- of that type into buffers.  Direct_IO is instantiated for         -- these Storage_IO buffers.         package Flat_Storage_IO is            new Ada.Storage_IO (Data_Storage_Type);         package Buffer_IO is            new Ada.Direct_IO (Flat_Storage_IO.Buffer_Type);         Buffer_File      : Buffer_IO.File_Type;         Outbound_Buffer  : Flat_Storage_IO.Buffer_Type;         Storage_Item     : Data_Storage_Type;      begin  -- procedure Data_Storage         Buffer_IO.Create (Buffer_File,                            Buffer_IO.Out_File,                            The_Filename);         Flat_Storage_IO.Write (Buffer => Outbound_Buffer,                                 Item   => Storage_Item);         -- At this point, any levels of indirection have been removed         -- by the Storage_IO procedure, and the buffered data can be         -- written to a file.         Buffer_IO.Write (Buffer_File, Outbound_Buffer);         Buffer_IO.Close (Buffer_File);         Result := Storage_Item.Unit_Array'Last +           -- 5 +                   Storage_Item.Unit_Array                  -- 9                     (Storage_Item.Unit_Array'First).String_Value'Length;      exception         when others =>             Report.Failed ("Data storage error");            if Buffer_IO.Is_Open (Buffer_File) then               Buffer_IO.Close (Buffer_File);            end if;             end Data_Storage;      procedure Data_Retrieval (Number_Of_Units  : in     Natural;                                Result           :    out Natural) is         type Unit_Array_Type is array (1..Number_Of_Units)            of Unit_Type;         type Data_Storage_Type is            record               Data_Value : Natural := Number_Of_Units;               Unit_Array : Unit_Array_Type;            end record;         package Flat_Storage_IO is            new Ada.Storage_IO (Data_Storage_Type);         package Reader_IO is            new Ada.Direct_IO (Flat_Storage_IO.Buffer_Type);         Reader_File      : Reader_IO.File_Type;         Inbound_Buffer   : Flat_Storage_IO.Buffer_Type;         Storage_Item     : Data_Storage_Type;          TC_Item          : Data_Storage_Type;       begin  -- procedure Data_Retrieval         Reader_IO.Open (Reader_File, Reader_IO.In_File, The_Filename);         Reader_IO.Read (Reader_File, Inbound_Buffer);         Flat_Storage_IO.Read (Inbound_Buffer, Storage_Item);         -- Validate the reconstructed value against an "unflattened"         -- value.         if Storage_Item.Data_Value /= TC_Item.Data_Value          then            Report.Failed ("Data_Retrieval Error - 1");         end if;         for i in 1..Number_Of_Units loop            if Storage_Item.Unit_Array(i).String_Value'Length  /=               TC_Item.Unit_Array(i).String_Value'Length      or               Storage_Item.Unit_Array(i).Position     /=               TC_Item.Unit_Array(i).Position             or               Storage_Item.Unit_Array(i).String_Value /=               TC_Item.Unit_Array(i).String_Value                  then               Report.Failed ("Data_Retrieval Error - 2");            end if;         end loop;         Result := Storage_Item.Unit_Array'Last +           -- 5 +                   Storage_Item.Unit_Array                  -- 9                     (Storage_Item.Unit_Array'First).String_Value'Length;         if Reader_IO.Is_Open (Reader_File) then            Reader_IO.Delete (Reader_File);         else            Reader_IO.Open (Reader_File,                             Reader_IO.In_File,                             The_Filename);            Reader_IO.Delete (Reader_File);         end if;             exception         when others =>             Report.Failed ("Exception raised in Data_Retrieval");            if Reader_IO.Is_Open (Reader_File) then               Reader_IO.Delete (Reader_File);            else               Reader_IO.Open (Reader_File,                                Reader_IO.In_File,                                The_Filename);               Reader_IO.Delete (Reader_File);            end if;             end Data_Retrieval;   begin  -- Test_Block      -- The number of Units is provided in this call to Data_Storage.      Data_Storage (Number_Of_Units  => Natural(Report.Ident_Int(5)),                     Result           => TC_Size);      if TC_Size /= 14 then         Report.Failed ("Data_Storage error in Data_Storage");      end if;      Data_Retrieval (Number_Of_Units  => Natural(Report.Ident_Int(5)),                       Result           => TC_Size);      if TC_Size /= 14 then         Report.Failed ("Data retrieval error in Data_Retrieval");      end if;   exception      when others => Report.Failed ("Exception raised in Test_Block");   end Test_Block;   Report.Result;exception   when Incomplete =>      Report.Result;   when others     =>      Report.Failed ( "Unexpected exception" );      Report.Result;end CXA9001;

⌨️ 快捷键说明

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