| -- 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; |