URL
https://opencores.org/ocsvn/openrisc/openrisc/trunk
Subversion Repositories openrisc
[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [gcc/] [testsuite/] [ada/] [acats/] [tests/] [cxa/] [cxac005.a] - Rev 720
Compare with Previous | Blame | View Log
-- CXAC005.A---- Grant of Unlimited Rights---- The Ada Conformity Assessment Authority (ACAA) holds unlimited-- rights in the software and documentation contained herein. Unlimited-- rights are the same as those granted by the U.S. Government for older-- parts of the Ada Conformity Assessment Test Suite, and are defined-- in DFAR 252.227-7013(a)(19). By making this public release, the ACAA-- intends to confer upon all recipients unlimited rights equal to those-- held by the ACAA. 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 stream file positioning work as specified. (Defect Report-- 8652/0055).---- CHANGE HISTORY:-- 12 FEB 2001 PHL Initial version.-- 14 MAR 2001 RLB Readied for release; fixed Not_Applicable check-- to terminate test gracefully.----!with Ada.Streams.Stream_Io;use Ada.Streams;with Ada.Exceptions;use Ada.Exceptions;with Report;use Report;procedure CXAC005 isIncomplete : exception;procedure TC_Assert (Condition : Boolean; Message : String) isbeginif not Condition thenFailed (Message);end if;end TC_Assert;package Checked_Stream_Io istype File_Type (Max_Size : Stream_Element_Count) is limited private;function Stream_Io_File (File : File_Type) return Stream_Io.File_Type;procedure Create (File : in out File_Type;Mode : in Stream_Io.File_Mode := Stream_Io.Out_File;Name : in String := "";Form : in String := "");procedure Open (File : in out File_Type;Mode : in Stream_Io.File_Mode;Name : in String;Form : in String := "");procedure Close (File : in out File_Type);procedure Delete (File : in out File_Type);procedure Reset (File : in out File_Type;Mode : in Stream_Io.File_Mode);procedure Reset (File : in out File_Type);procedure Read (File : in out File_Type;Item : out Stream_Element_Array;Last : out Stream_Element_Offset;From : in Stream_Io.Positive_Count);procedure Read (File : in out File_Type;Item : out Stream_Element_Array;Last : out Stream_Element_Offset);procedure Write (File : in out File_Type;Item : in Stream_Element_Array;To : in Stream_Io.Positive_Count);procedure Write (File : in out File_Type;Item : in Stream_Element_Array);procedure Set_Index (File : in out File_Type;To : in Stream_Io.Positive_Count);function Index (File : in File_Type) return Stream_Io.Positive_Count;procedure Set_Mode (File : in out File_Type;Mode : in Stream_Io.File_Mode);privatetype File_Type (Max_Size : Stream_Element_Count) isrecordFile : Stream_Io.File_Type;Index : Stream_Io.Positive_Count;Contents :Stream_Element_Array(Stream_Element_Offset (Ident_Int (1)) .. Max_Size);end record;end Checked_Stream_Io;package body Checked_Stream_Io isuse Stream_Io;function Stream_Io_File (File : File_Type) return Stream_Io.File_Type isbeginreturn File.File;end Stream_Io_File;procedure Create (File : in out File_Type;Mode : in Stream_Io.File_Mode := Stream_Io.Out_File;Name : in String := "";Form : in String := "") isbeginStream_Io.Create (File.File, Mode, Name, Form);File.Index := Stream_Io.Index (File.File);if Mode = Append_File thenTC_Assert (File.Index = Stream_Io.Size (File.File) + 1,"Index /= Size + 1 -- Create - Append_File");elseTC_Assert (File.Index = 1, "Index /= 1 -- Create - " &File_Mode'Image (Mode));end if;end Create;procedure Open (File : in out File_Type;Mode : in Stream_Io.File_Mode;Name : in String;Form : in String := "") isbeginStream_Io.Open (File.File, Mode, Name, Form);File.Index := Stream_Io.Index (File.File);if Mode = Append_File thenTC_Assert (File.Index = Stream_Io.Size (File.File) + 1,"Index /= Size + 1 -- Open - Append_File");elseTC_Assert (File.Index = 1, "Index /= 1 -- Open - " &File_Mode'Image (Mode));end if;end Open;procedure Close (File : in out File_Type) isbeginStream_Io.Close (File.File);end Close;procedure Delete (File : in out File_Type) isbeginStream_Io.Delete (File.File);end Delete;procedure Reset (File : in out File_Type;Mode : in Stream_Io.File_Mode) isbeginStream_Io.Reset (File.File, Mode);File.Index := Stream_Io.Index (File.File);if Mode = Append_File thenTC_Assert (File.Index = Stream_Io.Size (File.File) + 1,"Index /= Size + 1 -- Reset - Append_File");elseTC_Assert (File.Index = 1, "Index /= 1 -- Reset - " &File_Mode'Image (Mode));end if;end Reset;procedure Reset (File : in out File_Type) isbeginReset (File, Stream_Io.Mode (File.File));end Reset;procedure Read (File : in out File_Type;Item : out Stream_Element_Array;Last : out Stream_Element_Offset;From : in Stream_Io.Positive_Count) isbeginSet_Index (File, From);Read (File, Item, Last);end Read;procedure Read (File : in out File_Type;Item : out Stream_Element_Array;Last : out Stream_Element_Offset) isIndex : constant Stream_Element_Offset :=Stream_Element_Offset (File.Index);beginStream_Io.Read (File.File, Item, Last);if Last < Item'Last thenTC_Assert (Item (Item'First .. Last) =File.Contents (Index .. Index + Last - Item'First),"Incorrect data read from file - 1");TC_Assert (Count (Index + Last - Item'First) =Stream_Io.Size (File.File),"Read stopped before end of file");File.Index := Count (Index + Last - Item'First) + 1;elseTC_Assert (Item = File.Contents (Index .. Index + Item'Length - 1),"Incorrect data read from file - 2");File.Index := File.Index + Item'Length;end if;end Read;procedure Write (File : in out File_Type;Item : in Stream_Element_Array;To : in Stream_Io.Positive_Count) isbeginSet_Index (File, To);Write (File, Item);end Write;procedure Write (File : in out File_Type;Item : in Stream_Element_Array) isIndex : constant Stream_Element_Offset :=Stream_Element_Offset (File.Index);beginStream_Io.Write (File.File, Item);File.Contents (Index .. Index + Item'Length - 1) := Item;File.Index := File.Index + Item'Length;TC_Assert (File.Index = Stream_Io.Index (File.File),"Write failed to move the index");end Write;procedure Set_Index (File : in out File_Type;To : in Stream_Io.Positive_Count) isbeginStream_Io.Set_Index (File.File, To);File.Index := Stream_Io.Index (File.File);TC_Assert (File.Index = To, "Set_Index failed");end Set_Index;function Index (File : in File_Type) return Stream_Io.Positive_Count isNew_Index : constant Count := Stream_Io.Index (File.File);beginTC_Assert (New_Index = File.Index, "Index changed unexpectedly");return New_Index;end Index;procedure Set_Mode (File : in out File_Type;Mode : in Stream_Io.File_Mode) isOld_Index : constant Count := File.Index;beginStream_Io.Set_Mode (File.File, Mode);File.Index := Stream_Io.Index (File.File);if Mode = Append_File thenTC_Assert (File.Index = Stream_Io.Size (File.File) + 1,"Index /= Size + 1 -- Set_Mode - Append_File");elseTC_Assert (File.Index = Old_Index, "Set_Mode changed the index");end if;end Set_Mode;end Checked_Stream_Io;package Csio renames Checked_Stream_Io;F : Csio.File_Type (100);S : Stream_Element_Array (1 .. 10);Last : Stream_Element_Offset;beginTest ("CXAC005", "Check that stream file positioning work as specified");declareName : constant String := Legal_File_Name;beginbeginCsio.Create (F, Name => Name);exceptionwhen others =>Not_Applicable ("Files not supported - Creation with Out_File for Stream_IO");raise Incomplete;end;for I in Stream_Element range 1 .. 10 loopCsio.Write (F, ((1 => I + 2)));end loop;Csio.Write (F, (1 .. 15 => 11));Csio.Write (F, (1 .. 15 => 12), To => 15);Csio.Reset (F);for I in Stream_Element range 1 .. 10 loopCsio.Write (F, (1 => I));end loop;Csio.Write (F, (1 .. 15 => 13));Csio.Write (F, (1 .. 15 => 14), To => 15);Csio.Write (F, (1 => 90));Csio.Set_Mode (F, Stream_Io.In_File);Csio.Read (F, S, Last);Csio.Read (F, S, Last, From => 3);Csio.Read (F, S, Last, From => 28);Csio.Set_Mode (F, Stream_Io.Append_File);Csio.Write (F, (1 .. 5 => 88));Csio.Close (F);Csio.Open (F, Name => Name, Mode => Stream_Io.Append_File);Csio.Write (F, (1 .. 3 => 33));Csio.Set_Mode (F, Stream_Io.In_File);Csio.Read (F, S, Last, From => 20);Csio.Read (F, S, Last);Csio.Reset (F, Stream_Io.Out_File);Csio.Write (F, (1 .. 9 => 99));-- Check the contents of the entire file.declareS : Stream_Element_Array(1 .. Stream_Element_Offset(Stream_Io.Size (Csio.Stream_Io_File (F))));beginCsio.Reset (F, Stream_Io.In_File);Csio.Read (F, S, Last);end;Csio.Delete (F);end;Result;exceptionwhen Incomplete =>Report.Result;when E:others =>Report.Failed ("Unexpected exception raised - " & Exception_Name (E) &" - " & Exception_Message (E));Report.Result;end CXAC005;
