-- CXF3A06.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 Ada.Text_IO.Editing.Put and Ada.Text_IO.Put have the same -- effect. -- -- TEST DESCRIPTION: -- This test is structured using tables of data, consisting of -- numerical values, picture strings, and expected image -- result strings. These data tables are found in package FXF3A00. -- -- The testing approach used in this test is that of writing edited -- output data to a text file, using two different approaches. First, -- Ada.Text_IO.Put is used, with a call to an instantiated version of -- Function Image supplied as the actual for parameter Item. The -- second approach is to use a version of Function Put from an -- instantiation of Ada.Text_IO.Editing.Decimal_Output, with the -- appropriate parameters for decimal data, picture, and format -- specific parameters. A call to New_Line follows each Put, so that -- each entry is placed on a separate line in the text file. -- -- Edited output for decimal data with two decimal places is in the -- first loop, and once the data has been written to the file, the -- text file is closed, then opened in In_File mode. The edited -- output data is read from the file, and data on successive lines -- is compared with the expected edited output result. The edited -- output data produced by both of the Put procedures should be -- identical. -- -- This process is repeated for decimal data with no decimal places. -- The file is reopened in Append_File mode, and the edited output -- data is added to the file in the same manner as described above. -- The file is closed, and reopened to verify the data written. -- The data written above (with two decimal places) is skipped, then -- the data to be verified is extracted as above and verified against -- the expected edited output string values. -- -- APPLICABILITY CRITERIA: -- This test is applicable only to implementations that support -- external text files. -- -- TEST FILES: -- The following files comprise this test: -- -- FXF3A00.A (foundation code) -- => CXF3A06.A -- -- -- CHANGE HISTORY: -- 26 JAN 95 SAIC Initial prerelease version. -- 26 FEB 97 PWB.CTA Made input buffers sufficiently long -- and removed code depending on shorter buffers --! with FXF3A00; with Ada.Text_IO.Editing; with Report; procedure CXF3A06 is use Ada; begin Report.Test ("CXF3A06", "Check that Ada.Text_IO.Editing.Put and " & "Ada.Text_IO.Put have the same effect"); Test_for_Text_IO_Support: declare Text_File : Ada.Text_IO.File_Type; Text_Filename : constant String := Report.Legal_File_Name(1); begin -- Use_Error will be raised if Text_IO operations or external files -- are not supported. Text_IO.Create (Text_File, Text_IO.Out_File, Text_Filename); Test_Block: declare use Ada.Text_IO; -- Instantiate the Decimal_Output generic package for two -- different decimal data types. package Pack_2DP is -- Uses decimal type with delta 0.01. new Editing.Decimal_Output(FXF3A00.Decimal_Type_2DP); package Pack_NDP is -- Uses decimal type with delta 1.0. new Editing.Decimal_Output(Num => FXF3A00.Decimal_Type_NDP, Default_Currency => "$", Default_Fill => '*', Default_Separator => ',', Default_Radix_Mark => '.'); TC_Picture : Editing.Picture; TC_Start_Loop : constant := 1; TC_End_Loop_1 : constant := FXF3A00.Number_Of_2DP_Items - -- 20-10 FXF3A00.Number_Of_Foreign_Strings; TC_End_Loop_2 : constant := FXF3A00.Number_Of_NDP_Items; -- 12 TC_Offset : constant := FXF3A00.Number_Of_2DP_Items; -- 20 TC_String_1, TC_String_2 : String(1..255) := (others => ' '); TC_Last_1, TC_Last_2 : Natural := 0; begin -- Use the two versions of Put, for data with two decimal points, -- to write edited output strings to the text file. Use a separate -- line for each string entry. for i in TC_Start_Loop..TC_End_Loop_1 loop -- 1..10 -- Create the picture object from the picture string. TC_Picture := Editing.To_Picture(FXF3A00.Valid_Strings(i).all); -- Use the Text_IO version of Put to place an edited output -- string into a text file. Use default parameters in the call -- to Image for Currency, Fill, Separator, and Radix_Mark. Text_IO.Put(Text_File, Pack_2DP.Image(Item => FXF3A00.Data_With_2DP(i), Pic => TC_Picture)); Text_IO.New_Line(Text_File); -- Use the version of Put from the instantiation of -- Decimal_Output to place an edited output string on a separate -- line of the Text_File. Use default parameters for Currency, -- Fill, Separator, and Radix_Mark. Pack_2DP.Put(File => Text_File, Item => FXF3A00.Data_With_2DP(i), Pic => TC_Picture); Text_IO.New_Line(Text_File); end loop; Text_IO.Close(Text_File); -- Reopen the text file in In_File mode, and verify the edited -- output found on consecutive lines of the file. Text_IO.Open(Text_File, Text_IO.In_File, Text_Filename); for i in TC_Start_Loop..TC_End_Loop_1 loop -- Read successive lines in the text file. Text_IO.Get_Line(Text_File, TC_String_1, TC_Last_1); Text_IO.Get_Line(Text_File, TC_String_2, TC_Last_2); -- Compare the two strings for equality with the expected edited -- output result. Failure results if strings don't match, or if -- a reading error occurred from the attempted Get_Line resulting -- from an improperly formed edited output string. if TC_String_1(1..TC_Last_1) /= FXF3A00.Edited_Output(i).all or TC_String_2(1..TC_Last_2) /= FXF3A00.Edited_Output(i).all then Report.Failed("Failed comparison of two edited output " & "strings from data with two decimal points " & ", loop number = " & Integer'Image(i)); end if; end loop; Text_IO.Close(Text_File); -- Reopen the text file in Append_File mode. -- Use the two versions of Put, for data with no decimal points, -- to write edited output strings to the text file. Use a separate -- line for each string entry. Text_IO.Open(Text_File, Text_IO.Append_File, Text_Filename); for i in TC_Start_Loop..TC_End_Loop_2 loop -- 1..12 -- Create the picture object from the picture string specific to -- data with no decimal points. Use appropriate offset into the -- Valid_Strings array to account for the string data used above. TC_Picture := Editing.To_Picture(FXF3A00.Valid_Strings(i+TC_End_Loop_1).all); -- Use the Text_IO version of Put to place an edited output -- string into a text file. Use non-default parameters in the -- call to Image for Currency, Fill, Separator, and Radix_Mark. Text_IO.Put(Text_File, Pack_NDP.Image(Item => FXF3A00.Data_With_NDP(i), Pic => TC_Picture, Currency => "$", Fill => '*', Separator => ',', Radix_Mark => '.')); Text_IO.New_Line(Text_File); -- Use the version of Put from the instantiation of -- Decimal_Output to place an edited output string on a separate -- line of the Text_File. Use non-default parameters for -- Currency, Fill, Separator, and Radix_Mark. Pack_NDP.Put(File => Text_File, Item => FXF3A00.Data_With_NDP(i), Pic => TC_Picture, Currency => "$", Fill => '*', Separator => ',', Radix_Mark => '.'); Text_IO.New_Line(Text_File); end loop; Text_IO.Close(Text_File); -- Reopen the text file in In_File mode, and verify the edited -- output found on consecutive lines of the file. Text_IO.Open(Text_File, Text_IO.In_File, Text_Filename); -- Read past data that has been verified above, skipping two lines -- of the data file for each loop. for i in TC_Start_Loop..TC_End_Loop_1 loop -- 1..10 Text_IO.Skip_Line(Text_File, 2); end loop; -- Verify the last data set that was written to the file. for i in TC_Start_Loop..TC_End_Loop_2 loop -- 1..12 Text_IO.Get_Line(Text_File, TC_String_1, TC_Last_1); Text_IO.Get_Line(Text_File, TC_String_2, TC_Last_2); -- Compare the two strings for equality with the expected edited -- output result. Failure results if strings don't match, or if -- a reading error occurred from the attempted Get_Line resulting -- from an improperly formed edited output string. if TC_String_1(1..TC_Last_1) /= FXF3A00.Edited_Output(i+TC_Offset).all or TC_String_2(1..TC_Last_2) /= FXF3A00.Edited_Output(i+TC_Offset).all then Report.Failed("Failed comparison of two edited output " & "strings from data with no decimal points " & ", loop number = " & Integer'Image(i)); end if; end loop; exception when others => Report.Failed("Exception raised in Test_Block"); end Test_Block; -- Delete the external file. if Text_IO.Is_Open (Text_File) then Text_IO.Delete (Text_File); else Text_IO.Open (Text_File, Text_IO.In_File, Text_Filename); Text_IO.Delete (Text_File); end if; exception -- Since Use_Error can be raised if, for the specified mode, -- the environment does not support Text_IO operations, the -- following handlers are included: when Text_IO.Use_Error => Report.Not_Applicable ("Use_Error raised on Text_IO Create"); when Text_IO.Name_Error => Report.Not_Applicable ("Name_Error raised on Text_IO Create"); when others => Report.Failed ("Unexpected exception raised in Create block"); end Test_for_Text_IO_Support; Report.Result; end CXF3A06;