| -- CXF3A04.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 edited output string value returned by Function Image |
| -- is correct. |
| -- |
| -- 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 results of the Image function are examined under a number of |
| -- circumstances. The generic package Decimal_Output is instantiated |
| -- twice, for decimal data with delta 0.01 and delta 1.0. Each version |
| -- of Image is called with both default parameters and user-provided |
| -- parameters. The results of each call to Image are compared to an |
| -- expected edited output result string. |
| -- |
| -- In addition, three calls to Image are designed to raise Layout_Error, |
| -- due to the combination of decimal value and picture string provided |
| -- as input parameters. If Layout_Error is not raised, or an alternate |
| -- exception is raised instead, test failure results. |
| -- |
| -- TEST FILES: |
| -- The following files comprise this test: |
| -- |
| -- FXF3A00.A (foundation code) |
| -- => CXF3A04.A |
| -- |
| -- |
| -- CHANGE HISTORY: |
| -- 22 JAN 95 SAIC Initial prerelease version. |
| -- 11 MAR 97 PWB.CTA Corrected incorrect index expression |
| --! |
| |
| with FXF3A00; |
| with Ada.Text_IO.Editing; |
| with Report; |
| |
| procedure CXF3A04 is |
| begin |
| |
| Report.Test ("CXF3A04", "Check that the string value returned by " & |
| "Function Image is correct, based on the " & |
| "numerical data and picture formatting " & |
| "parameters provided to the function"); |
| |
| Test_Block: |
| declare |
| |
| use Ada.Text_IO; |
| |
| -- Instantiate the Decimal_Output generic package for the two data |
| -- types, using the default values for the Default_Currency, |
| -- Default_Fill, Default_Separator, and Default_Radix_Mark |
| -- parameters. |
| |
| package Pack_NDP is |
| new Editing.Decimal_Output (FXF3A00.Decimal_Type_NDP); |
| |
| package Pack_2DP is |
| new Editing.Decimal_Output (FXF3A00.Decimal_Type_2DP); |
| |
| TC_Currency : constant String := "$"; |
| TC_Fill : constant Character := '*'; |
| TC_Separator : constant Character := ','; |
| TC_Radix_Mark : constant Character := '.'; |
| |
| TC_Picture : Editing.Picture; |
| |
| |
| begin |
| |
| Two_Decimal_Place_Data: |
| -- Use a decimal fixed point type with delta 0.01 (two decimal places) |
| -- and valid picture strings. Evaluate the result of function Image |
| -- with the expected edited output result string. |
| declare |
| |
| TC_Loop_End : constant := -- 10 |
| FXF3A00.Number_Of_2DP_Items - FXF3A00.Number_Of_Foreign_Strings; |
| |
| begin |
| -- The first 10 picture strings in the Valid_Strings array |
| -- correspond to data values of a decimal type with delta 0.01. |
| |
| -- Compare string result of Image with expected edited output |
| -- string. Evaluate data using both default parameters of Image |
| -- and user-provided parameter values. |
| for i in 1..TC_Loop_End loop |
| |
| -- Create the picture object from the picture string. |
| TC_Picture := Editing.To_Picture(FXF3A00.Valid_Strings(i).all); |
| |
| -- Use the default parameters for this loop evaluation of Image. |
| if Pack_2DP.Image(FXF3A00.Data_With_2DP(i), TC_Picture) /= |
| FXF3A00.Edited_Output(i).all |
| then |
| Report.Failed("Incorrect result from Function Image, " & |
| "when used with a decimal type with delta " & |
| "0.01, picture string " & |
| FXF3A00.Valid_Strings(i).all & |
| ", and the default parameters of Image"); |
| end if; |
| |
| -- Use user-provided parameters for this loop evaluation of Image. |
| |
| if Pack_2DP.Image(Item => FXF3A00.Data_With_2DP(i), |
| Pic => TC_Picture, |
| Currency => TC_Currency, |
| Fill => TC_Fill, |
| Separator => TC_Separator, |
| Radix_Mark => TC_Radix_Mark) /= |
| FXF3A00.Edited_Output(i).all |
| then |
| Report.Failed("Incorrect result from Function Image, " & |
| "when used with a decimal type with delta " & |
| "0.01, picture string " & |
| FXF3A00.Valid_Strings(i).all & |
| ", and user-provided parameters"); |
| end if; |
| |
| end loop; |
| |
| exception |
| when others => |
| Report.Failed("Exception raised in Two_Decimal_Place_Data block"); |
| end Two_Decimal_Place_Data; |
| |
| |
| |
| No_Decimal_Place_Data: |
| -- Use a decimal fixed point type with delta 1.00 (no decimal places) |
| -- and valid picture strings. Evaluate the result of function Image |
| -- with the expected result string. |
| declare |
| |
| use Editing, FXF3A00; |
| |
| TC_Offset : constant := 10; |
| TC_Loop_Start : constant := TC_Offset + 1; -- 11 |
| TC_Loop_End : constant := TC_Loop_Start + |
| Number_Of_NDP_Items - 1; -- 22 |
| |
| begin |
| -- The following evaluations correspond to data values of a |
| -- decimal type with delta 1.0. |
| |
| -- Compare string result of Image with expected edited output |
| -- string. Evaluate data using both default parameters of Image |
| -- and user-provided parameter values. |
| -- Note: TC_Offset is used to align corresponding data the various |
| -- data tables in foundation package FXF3A00. |
| |
| for i in TC_Loop_Start..TC_Loop_End loop |
| |
| -- Create the picture object from the picture string. |
| TC_Picture := To_Picture(Valid_Strings(i).all); |
| |
| -- Use the default parameters for this loop evaluation of Image. |
| if not (Pack_NDP.Image(Data_With_NDP(i-TC_Offset), TC_Picture) = |
| Edited_Output(TC_Offset+i).all) |
| then |
| Report.Failed("Incorrect result from Function Image, " & |
| "when used with a decimal type with delta " & |
| "1.0, picture string " & |
| Valid_Strings(i).all & |
| ", and the default parameters of Image"); |
| end if; |
| |
| -- Use user-provided parameters for this loop evaluation of Image. |
| if Pack_NDP.Image(Item => Data_With_NDP(i - TC_Offset), |
| Pic => TC_Picture, |
| Currency => TC_Currency, |
| Fill => TC_Fill, |
| Separator => TC_Separator, |
| Radix_Mark => TC_Radix_Mark) /= |
| Edited_Output(TC_Offset+i).all |
| then |
| Report.Failed("Incorrect result from Function Image, " & |
| "when used with a decimal type with delta " & |
| "1.0, picture string " & |
| Valid_Strings(i).all & |
| ", and user-provided parameters"); |
| end if; |
| |
| end loop; |
| |
| exception |
| when others => |
| Report.Failed("Exception raised in No_Decimal_Place_Data block"); |
| end No_Decimal_Place_Data; |
| |
| |
| |
| Exception_Block: |
| -- The following three calls of Function Image, using the specific |
| -- decimal values and picture strings provided, will cause |
| -- a Layout_Error to be raised. |
| -- The first two evaluations use the instantiation of Decimal_Output |
| -- with a decimal type with delta 0.01, while the last evaluation |
| -- uses the instantiation with decimal type with delta 1.0. |
| |
| -- Note: The data and the picture strings used in the following |
| -- evaluations are not themselves erroneous, but when used in |
| -- combination will cause Layout_Error to be raised. |
| |
| begin |
| |
| for i in 1..FXF3A00.Number_Of_Erroneous_Conditions loop -- 1..3 |
| begin |
| -- Create the picture object from the picture string. |
| TC_Picture := |
| Editing.To_Picture(FXF3A00.Erroneous_Strings(i).all); |
| |
| -- Layout_Error must be raised by the following calls to |
| -- Function Image. |
| |
| if i < 3 then -- Choose the appropriate instantiation. |
| declare |
| N : constant Natural := Pack_2DP.Length(TC_Picture); |
| TC_String : String(1..N); |
| begin |
| TC_String := Pack_2DP.Image(FXF3A00.Erroneous_Data(i), |
| TC_Picture); |
| end; |
| else |
| declare |
| use FXF3A00; |
| N : constant Natural := Pack_NDP.Length(TC_Picture, |
| TC_Currency); |
| TC_String : String(1..N); |
| begin |
| TC_String := |
| Pack_NDP.Image(Item => Decimal_Type_NDP( |
| Erroneous_Data(i)), |
| Pic => TC_Picture, |
| Currency => TC_Currency, |
| Fill => TC_Fill, |
| Separator => TC_Separator, |
| Radix_Mark => TC_Radix_Mark); |
| end; |
| end if; |
| |
| Report.Failed("Layout_Error not raised by combination " & |
| "# " & Integer'Image(i) & " " & |
| "of decimal data and picture string"); |
| |
| exception |
| when Layout_Error => null; -- Expected exception. |
| when others => |
| Report.Failed("Incorrect exception raised by combination " & |
| "# " & Integer'Image(i) & " " & |
| "of decimal data and picture string"); |
| end; |
| end loop; |
| |
| exception |
| when others => |
| Report.Failed("Unexpected exception raised in Exception_Block"); |
| end Exception_Block; |
| |
| |
| exception |
| when others => Report.Failed ("Exception raised in Test_Block"); |
| end Test_Block; |
| |
| Report.Result; |
| |
| end CXF3A04; |