summaryrefslogtreecommitdiff
path: root/gcc/testsuite/ada/acats/tests/cxa/cxac004.a
diff options
context:
space:
mode:
authorupstream source tree <ports@midipix.org>2015-03-15 20:14:05 -0400
committerupstream source tree <ports@midipix.org>2015-03-15 20:14:05 -0400
commit554fd8c5195424bdbcabf5de30fdc183aba391bd (patch)
tree976dc5ab7fddf506dadce60ae936f43f58787092 /gcc/testsuite/ada/acats/tests/cxa/cxac004.a
downloadcbb-gcc-4.6.4-554fd8c5195424bdbcabf5de30fdc183aba391bd.tar.bz2
cbb-gcc-4.6.4-554fd8c5195424bdbcabf5de30fdc183aba391bd.tar.xz
obtained gcc-4.6.4.tar.bz2 from upstream website;upstream
verified gcc-4.6.4.tar.bz2.sig; imported gcc-4.6.4 source tree from verified upstream tarball. downloading a git-generated archive based on the 'upstream' tag should provide you with a source tree that is binary identical to the one extracted from the above tarball. if you have obtained the source via the command 'git clone', however, do note that line-endings of files in your working directory might differ from line-endings of the respective files in the upstream repository.
Diffstat (limited to 'gcc/testsuite/ada/acats/tests/cxa/cxac004.a')
-rw-r--r--gcc/testsuite/ada/acats/tests/cxa/cxac004.a310
1 files changed, 310 insertions, 0 deletions
diff --git a/gcc/testsuite/ada/acats/tests/cxa/cxac004.a b/gcc/testsuite/ada/acats/tests/cxa/cxac004.a
new file mode 100644
index 000000000..9cc88b93c
--- /dev/null
+++ b/gcc/testsuite/ada/acats/tests/cxa/cxac004.a
@@ -0,0 +1,310 @@
+-- CXAC004.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 Stream_Access type and Stream function found in package
+-- Ada.Text_IO.Text_Streams allows a text file to be processed with the
+-- functionality of streams.
+--
+-- TEST DESCRIPTION:
+-- This test verifies that the package Ada.Text_IO.Text_Streams is
+-- available and that the functionality it contains allows a text file to
+-- be manipulated as a stream.
+-- The test defines data objects of a variety of types that can be stored
+-- in a text file. A text file and associated text stream are then
+-- defined, and the 'Write attribute is used to enter the individual data
+-- items into the text stream. Once all the individual data items have
+-- been written to the stream, the 'Output attribute is used to write
+-- arrays of these same data objects to the stream.
+-- The text file is reset to serve as an input file, and the 'Read
+-- attribute is used to extract the individual data items from the
+-- stream. These items are then verified against the data originally
+-- written to the stream. Finally, the 'Input attribute is used to
+-- extract the data arrays from the stream. These arrays are then
+-- verified against the original data written to the stream.
+--
+-- APPLICABILITY CRITERIA:
+-- Applicable to implementations that support external text files.
+--
+-- CHANGE HISTORY:
+-- 06 Jul 95 SAIC Initial prerelease version.
+-- 26 Feb 97 PWB.CTA Allowed for non-support of some IO operations;
+-- removed requirement for support of decimal types.
+--!
+
+with Report;
+with Ada.Text_IO;
+with Ada.Text_IO.Text_Streams;
+with Ada.Characters.Latin_1;
+with Ada.Strings.Unbounded;
+
+procedure CXAC004 is
+
+ Data_File : Ada.Text_IO.File_Type;
+ Data_Filename : constant String :=
+ Report.Legal_File_Name ( Nam => "CXAC004" );
+ Incomplete : exception;
+
+begin
+
+ Report.Test ("CXAC004", "Check that the Stream_Access type and Stream " &
+ "function found in package " &
+ "Ada.Text_IO.Text_Streams allows a text file to " &
+ "be processed with the functionality of streams");
+
+ Test_for_IO_Support:
+ begin
+
+ -- Check for Text_IO support in creating the data file. If the
+ -- implementation does not support external files, Name_Error or
+ -- Use_Error will be raised at the point of the following call to
+ -- Create, resulting in a Not_Applicable test result.
+
+ Ada.Text_IO.Create(Data_File, Ada.Text_IO.Out_File, Data_Filename);
+
+ exception
+
+ when Ada.Text_IO.Use_Error | Ada.Text_IO.Name_Error =>
+ Report.Not_Applicable
+ ( "Files not supported - Create as Out_File for Text_IO" );
+ raise Incomplete;
+
+ end Test_for_IO_Support;
+
+ Test_Block:
+ declare
+ use Ada.Characters.Latin_1, Ada.Strings.Unbounded;
+ TC_Items : constant := 3;
+
+ -- Declare types and objects that will be used as data values to be
+ -- written to and read from the text file/stream.
+
+ type Enum_Type is (Red, Yellow, Green, Blue, Indigo);
+ type Fixed_Type is delta 0.125 range 0.0..255.0;
+ type Float_Type is digits 7 range 0.0..1.0E5;
+ type Modular_Type is mod 256;
+ subtype Str_Type is String(1..4);
+
+ type Char_Array_Type is array (1..TC_Items) of Character;
+ type Enum_Array_Type is array (1..TC_Items) of Enum_Type;
+ type Fixed_Array_Type is array (1..TC_Items) of Fixed_Type;
+ type Float_Array_Type is array (1..TC_Items) of Float_Type;
+ type Int_Array_Type is array (1..TC_Items) of Integer;
+ type Mod_Array_Type is array (1..TC_Items) of Modular_Type;
+ type Str_Array_Type is array (1..TC_Items) of Str_Type;
+ type Unb_Str_Array_Type is array (1..TC_Items) of Unbounded_String;
+
+ Char_Array : Char_Array_Type := ('A', 'z', Yen_Sign);
+ TC_Char_Array_1,
+ TC_Char_Array_2 : Char_Array_Type := (others => Space);
+
+ Enum_Array : Enum_Array_Type := (Blue, Yellow, Indigo);
+ TC_Enum_Array_1,
+ TC_Enum_Array_2 : Enum_Array_Type := (others => Red);
+
+ Fix_Array : Fixed_Array_Type := (0.125, 123.5, 250.750);
+ TC_Fix_Array_1,
+ TC_Fix_Array_2 : Fixed_Array_Type := (others => 0.0);
+
+ Flt_Array : Float_Array_Type := (1.0, 150.0, 1500.0);
+ TC_Flt_Array_1,
+ TC_Flt_Array_2 : Float_Array_Type := (others => 0.0);
+
+ Int_Array : Int_Array_Type := (124, 2349, -24_001);
+ TC_Int_Array_1,
+ TC_Int_Array_2 : Int_Array_Type := (others => -99);
+
+ Mod_Array : Mod_Array_Type := (10, 127, 255);
+ TC_Mod_Array_1,
+ TC_Mod_Array_2 : Mod_Array_Type := (others => 0);
+
+ Str_Array : Str_Array_Type := ("abcd", "klmn", "wxyz");
+ TC_Str_Array_1,
+ TC_Str_Array_2 : Str_Array_Type := (others => " ");
+
+ UStr_Array : Unb_Str_Array_Type :=
+ (To_Unbounded_String("cat"),
+ To_Unbounded_String("testing"),
+ To_Unbounded_String("ACVC"));
+ TC_UStr_Array_1,
+ TC_UStr_Array_2 : Unb_Str_Array_Type :=
+ (others => Null_Unbounded_String);
+
+ -- Create a stream access object pointing to the data file.
+
+ Data_Stream : Ada.Text_IO.Text_Streams.Stream_Access :=
+ Ada.Text_IO.Text_Streams.Stream(File => Data_File);
+
+ begin
+
+ -- Use the 'Write attribute to enter the three sets of data items
+ -- into the data stream.
+ -- Note that the data will be mixed within the text file.
+
+ for i in 1..TC_Items loop
+ Character'Write (Data_Stream, Char_Array(i));
+ Enum_Type'Write (Data_Stream, Enum_Array(i));
+ Fixed_Type'Write (Data_Stream, Fix_Array(i));
+ Float_Type'Write (Data_Stream, Flt_Array(i));
+ Integer'Write (Data_Stream, Int_Array(i));
+ Modular_Type'Write (Data_Stream, Mod_Array(i));
+ Str_Type'Write (Data_Stream, Str_Array(i));
+ Unbounded_String'Write(Data_Stream, UStr_Array(i));
+ end loop;
+
+ -- Use the 'Output attribute to enter the entire arrays of each
+ -- type of data items into the data stream.
+ -- Note that the array bounds will be written to the stream as part
+ -- of the action of the 'Output attribute.
+
+ Char_Array_Type'Output (Data_Stream, Char_Array);
+ Enum_Array_Type'Output (Data_Stream, Enum_Array);
+ Fixed_Array_Type'Output (Data_Stream, Fix_Array);
+ Float_Array_Type'Output (Data_Stream, Flt_Array);
+ Int_Array_Type'Output (Data_Stream, Int_Array);
+ Mod_Array_Type'Output (Data_Stream, Mod_Array);
+ Str_Array_Type'Output (Data_Stream, Str_Array);
+ Unb_Str_Array_Type'Output (Data_Stream, UStr_Array);
+
+ -- Reset the data file to mode In_File. The data file will now serve
+ -- as the source of data which will be compared to the original data
+ -- written to the file above.
+ Reset1:
+ begin
+ Ada.Text_IO.Reset (File => Data_File, Mode => Ada.Text_IO.In_File);
+ exception
+ when Ada.Text_IO.Use_Error =>
+ Report.Not_Applicable
+ ( "Reset to In_File not supported for Text_IO" );
+ raise Incomplete;
+ end Reset1;
+
+ -- Extract and validate all the single data items from the stream.
+
+ for i in 1..TC_Items loop
+ Character'Read (Data_Stream, TC_Char_Array_1(i));
+ Enum_Type'Read (Data_Stream, TC_Enum_Array_1(i));
+ Fixed_Type'Read (Data_Stream, TC_Fix_Array_1(i));
+ Float_Type'Read (Data_Stream, TC_Flt_Array_1(i));
+ Integer'Read (Data_Stream, TC_Int_Array_1(i));
+ Modular_Type'Read (Data_Stream, TC_Mod_Array_1(i));
+ Str_Type'Read (Data_Stream, TC_Str_Array_1(i));
+ Unbounded_String'Read (Data_Stream, TC_UStr_Array_1(i));
+ end loop;
+
+ if TC_Char_Array_1 /= Char_Array then
+ Report.Failed("Character values do not match");
+ end if;
+ if TC_Enum_Array_1 /= Enum_Array then
+ Report.Failed("Enumeration values do not match");
+ end if;
+ if TC_Fix_Array_1 /= Fix_Array then
+ Report.Failed("Fixed point values do not match");
+ end if;
+ if TC_Flt_Array_1 /= Flt_Array then
+ Report.Failed("Floating point values do not match");
+ end if;
+ if TC_Int_Array_1 /= Int_Array then
+ Report.Failed("Integer values do not match");
+ end if;
+ if TC_Mod_Array_1 /= Mod_Array then
+ Report.Failed("Modular values do not match");
+ end if;
+ if TC_Str_Array_1 /= Str_Array then
+ Report.Failed("String values do not match");
+ end if;
+ if TC_UStr_Array_1 /= UStr_Array then
+ Report.Failed("Unbounded_String values do not match");
+ end if;
+
+ -- Extract and validate all data arrays from the data stream.
+ -- Note that the 'Input attribute denotes a function, whereas the
+ -- other stream oriented attributes in this test denote procedures.
+
+ TC_Char_Array_2 := Char_Array_Type'Input(Data_Stream);
+ TC_Enum_Array_2 := Enum_Array_Type'Input(Data_Stream);
+ TC_Fix_Array_2 := Fixed_Array_Type'Input(Data_Stream);
+ TC_Flt_Array_2 := Float_Array_Type'Input(Data_Stream);
+ TC_Int_Array_2 := Int_Array_Type'Input(Data_Stream);
+ TC_Mod_Array_2 := Mod_Array_Type'Input(Data_Stream);
+ TC_Str_Array_2 := Str_Array_Type'Input(Data_Stream);
+ TC_UStr_Array_2 := Unb_Str_Array_Type'Input(Data_Stream);
+
+ if TC_Char_Array_2 /= Char_Array then
+ Report.Failed("Character array values do not match");
+ end if;
+ if TC_Enum_Array_2 /= Enum_Array then
+ Report.Failed("Enumeration array values do not match");
+ end if;
+ if TC_Fix_Array_2 /= Fix_Array then
+ Report.Failed("Fixed point array values do not match");
+ end if;
+ if TC_Flt_Array_2 /= Flt_Array then
+ Report.Failed("Floating point array values do not match");
+ end if;
+ if TC_Int_Array_2 /= Int_Array then
+ Report.Failed("Integer array values do not match");
+ end if;
+ if TC_Mod_Array_2 /= Mod_Array then
+ Report.Failed("Modular array values do not match");
+ end if;
+ if TC_Str_Array_2 /= Str_Array then
+ Report.Failed("String array values do not match");
+ end if;
+ if TC_UStr_Array_2 /= UStr_Array then
+ Report.Failed("Unbounded_String array values do not match");
+ end if;
+
+ exception
+ when Incomplete =>
+ raise;
+ when others => Report.Failed ("Exception raised in Test_Block");
+ end Test_Block;
+
+ Deletion:
+ begin
+ -- Delete the data file.
+ if not Ada.Text_IO.Is_Open(Data_File) then
+ Ada.Text_IO.Open(Data_File, Ada.Text_IO.In_File, Data_Filename);
+ end if;
+ Ada.Text_IO.Delete(Data_File);
+
+ exception
+ when others =>
+ Report.Failed
+ ( "Delete not properly implemented for Text_IO" );
+
+ end Deletion;
+
+ Report.Result;
+
+exception
+ when Incomplete =>
+ Report.Result;
+ when others =>
+ Report.Failed ( "Unexpected exception" );
+ Report.Result;
+
+end CXAC004;