| -- CXF3004.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 statically identifiable picture strings can be used |
| -- in conjunction with function Image to produce output strings |
| -- appropriate to foreign currency representations. |
| -- |
| -- Check that statically identifiable picture strings will cause |
| -- function Image to raise Layout_Error under the appropriate |
| -- conditions. |
| -- |
| -- TEST DESCRIPTION: |
| -- This test defines several picture strings that are statically |
| -- identifiable, (i.e., Pic : Picture := To_Picture("..."); ). |
| -- These picture strings are used in conjunction with decimal data |
| -- as parameters in calls to function Image. |
| -- |
| -- |
| -- CHANGE HISTORY: |
| -- 11 Apr 96 SAIC Initial release for 2.1. |
| -- |
| --! |
| |
| with Report; |
| with Ada.Text_IO.Editing; |
| with Ada.Exceptions; |
| |
| procedure CXF3004 is |
| begin |
| |
| Report.Test ("CXF3004", "Check that statically identifiable " & |
| "picture strings will cause function Image " & |
| "to raise Layout_Error under appropriate " & |
| "conditions"); |
| |
| Test_Block: |
| declare |
| |
| use Ada.Exceptions; |
| use Ada.Text_IO.Editing; |
| |
| FF_Currency : constant String := "FF"; |
| DM_Currency : constant String := "DM"; |
| FF_Separator : constant Character := '.'; |
| DM_Separator : constant Character := ','; |
| FF_Radix : constant Character := ','; |
| DM_Radix : constant Character := '.'; |
| Blank_Fill : constant Character := ' '; |
| Star_Fill : constant Character := '*'; |
| |
| |
| -- Define a decimal data type, and instantiate the Decimal_Output |
| -- generic package for the data type. |
| |
| type Decimal_Data_Type is delta 0.01 digits 16; |
| |
| package Image_IO is |
| new Decimal_Output(Num => Decimal_Data_Type, |
| Default_Currency => "$", |
| Default_Fill => Star_Fill, |
| Default_Separator => Default_Separator, |
| Default_Radix_Mark => DM_Radix); |
| |
| |
| |
| -- The following decimal data items are used with picture strings |
| -- in evaluating use of foreign currency symbols. |
| |
| Dec_Data_1 : Decimal_Data_Type := 123456.78; |
| Dec_Data_2 : Decimal_Data_Type := 32.10; |
| Dec_Data_3 : Decimal_Data_Type := -1234.57; |
| Dec_Data_4 : Decimal_Data_Type := 123456.78; |
| Dec_Data_5 : Decimal_Data_Type := 12.34; |
| Dec_Data_6 : Decimal_Data_Type := 12.34; |
| Dec_Data_7 : Decimal_Data_Type := 12345.67; |
| |
| |
| -- Statically identifiable picture strings. |
| -- These strings are used in conjunction with non-default values |
| -- for Currency string, Radix mark, and Separator in calls to |
| -- function Image. |
| |
| Picture_1 : Picture := To_Picture("-###**_***_**9.99"); -- FF |
| Picture_2 : Picture := To_Picture("###z_ZZ9.99"); -- FF |
| Picture_3 : Picture := To_Picture("<<<<_<<<.<<###>"); -- DM |
| Picture_4 : Picture := To_Picture("-$_$$$_$$$_$$9.99"); -- DM |
| Picture_5 : Picture := To_Picture("$Zz9.99"); -- DM |
| Picture_6 : Picture := To_Picture("$$$9.99"); -- DM |
| Picture_7 : Picture := To_Picture("###_###_##9.99"); -- CHF |
| |
| |
| -- The following ten edited output strings correspond to the ten |
| -- foreign currency picture strings. |
| |
| Output_1 : constant String := " FF***123.456,78"; |
| Output_2 : constant String := " FF 32,10"; |
| Output_3 : constant String := " (1,234.57DM )"; |
| Output_4 : constant String := " DM123,456.78"; |
| Output_5 : constant String := "DM 12.34"; |
| Output_6 : constant String := " DM12.34"; |
| Output_7 : constant String := " CHF12,345.67"; |
| |
| |
| begin |
| |
| -- Check the results of function Image, using the picture strings |
| -- constructed above, in creating foreign currency edited output |
| -- strings. |
| |
| if Image_IO.Image(Item => Dec_Data_1, |
| Pic => Picture_1, |
| Currency => FF_Currency, |
| Fill => Star_Fill, |
| Separator => FF_Separator, |
| Radix_Mark => FF_Radix) /= Output_1 |
| then |
| Report.Failed("Incorrect result from Fn. Image using Picture_1"); |
| end if; |
| |
| if Image_IO.Image(Item => Dec_Data_2, |
| Pic => Picture_2, |
| Currency => FF_Currency, |
| Fill => Blank_Fill, |
| Separator => FF_Separator, |
| Radix_Mark => FF_Radix) /= Output_2 |
| then |
| Report.Failed("Incorrect result from Fn. Image using Picture_2"); |
| end if; |
| |
| if Image_IO.Image(Item => Dec_Data_3, |
| Pic => Picture_3, |
| Currency => DM_Currency, |
| Fill => Blank_Fill, |
| Separator => DM_Separator, |
| Radix_Mark => DM_Radix) /= Output_3 |
| then |
| Report.Failed("Incorrect result from Fn. Image using Picture_3"); |
| end if; |
| |
| if Image_IO.Image(Item => Dec_Data_4, |
| Pic => Picture_4, |
| Currency => DM_Currency, |
| Fill => Blank_Fill, |
| Separator => DM_Separator, |
| Radix_Mark => DM_Radix) /= Output_4 |
| then |
| Report.Failed("Incorrect result from Fn. Image using Picture_4"); |
| end if; |
| |
| if Image_IO.Image(Item => Dec_Data_5, |
| Pic => Picture_5, |
| Currency => DM_Currency, |
| Fill => Blank_Fill, |
| Separator => DM_Separator, |
| Radix_Mark => DM_Radix) /= Output_5 |
| then |
| Report.Failed("Incorrect result from Fn. Image using Picture_5"); |
| end if; |
| |
| if Image_IO.Image(Item => Dec_Data_6, |
| Pic => Picture_6, |
| Currency => DM_Currency, |
| Fill => Blank_Fill, |
| Separator => DM_Separator, |
| Radix_Mark => DM_Radix) /= Output_6 |
| then |
| Report.Failed("Incorrect result from Fn. Image using Picture_6"); |
| end if; |
| |
| if Image_IO.Image(Item => Dec_Data_7, |
| Pic => Picture_7, |
| Currency => "CHF", |
| Fill => Blank_Fill, |
| Separator => ',', |
| Radix_Mark => '.') /= Output_7 |
| then |
| Report.Failed("Incorrect result from Fn. Image using Picture_7"); |
| end if; |
| |
| |
| -- The following calls of Function Image, using the specific |
| -- decimal values and picture strings provided, will cause |
| -- a Layout_Error to be raised. |
| -- 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. |
| |
| Exception_Block_1 : |
| declare |
| Erroneous_Data_1 : Decimal_Data_Type := 12.34; |
| Erroneous_Picture_1 : Picture := To_Picture("9.99"); |
| N : constant Natural := Image_IO.Length(Erroneous_Picture_1); |
| TC_String : String(1..N); |
| begin |
| TC_String := Image_IO.Image(Erroneous_Data_1, Erroneous_Picture_1); |
| Report.Failed("Layout_Error not raised by combination of " & |
| "Erroneous_Picture_1 and Erroneous_Data_1"); |
| Report.Comment("Should never be printed: " & TC_String); |
| exception |
| when Ada.Text_IO.Layout_Error => null; -- OK, expected exception. |
| when The_Error : others => |
| Report.Failed |
| ("The following exception was incorrectly raised in " & |
| "Exception_Block_1: " & Exception_Name(The_Error)); |
| end Exception_Block_1; |
| |
| Exception_Block_2 : |
| declare |
| Erroneous_Data_2 : Decimal_Data_Type := -12.34; |
| Erroneous_Picture_2 : Picture := To_Picture("99.99"); |
| N : constant Natural := Image_IO.Length(Erroneous_Picture_2); |
| TC_String : String(1..N); |
| begin |
| TC_String := Image_IO.Image(Erroneous_Data_2, Erroneous_Picture_2); |
| Report.Failed("Layout_Error not raised by combination of " & |
| "Erroneous_Picture_2 and Erroneous_Data_2"); |
| Report.Comment("Should never be printed: " & TC_String); |
| exception |
| when Ada.Text_IO.Layout_Error => null; -- OK, expected exception. |
| when The_Error : others => |
| Report.Failed |
| ("The following exception was incorrectly raised in " & |
| "Exception_Block_2: " & Exception_Name(The_Error)); |
| end Exception_Block_2; |
| |
| exception |
| when The_Error : others => |
| Report.Failed("The following exception was raised in the " & |
| "Test_Block: " & Exception_Name(The_Error)); |
| end Test_Block; |
| |
| Report.Result; |
| |
| end CXF3004; |