| -- CXF3A03.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 function Length in the generic package Decimal_Output |
| -- returns the number of characters in the edited output string |
| -- produced by function Image, for a particular decimal type, |
| -- currency string, and radix mark. |
| -- Check that function Valid in the generic package Decimal_Output |
| -- returns correct results based on the particular decimal value, |
| -- and the Picture and Currency string parameters. |
| -- |
| -- TEST DESCRIPTION: |
| -- This test uses two instantiations of package Decimal_Output, one |
| -- for decimal data with delta 0.01, the other for decimal data with |
| -- delta 1.0. The functions Length and Valid found in this generic |
| -- package are evaluated for each instantiation. |
| -- Function Length is examined with picture and currency string input |
| -- parameters of different sizes. |
| -- Function Valid is examined with a decimal type data item, picture |
| -- object, and currency string, for cases that are both valid and |
| -- invalid (Layout_Error would result from the particular items as |
| -- input parameters to function Image). |
| -- |
| -- TEST FILES: |
| -- The following files comprise this test: |
| -- |
| -- FXF3A00.A (foundation code) |
| -- => CXF3A03.A |
| -- |
| -- |
| -- CHANGE HISTORY: |
| -- 06 Dec 94 SAIC ACVC 2.0 |
| -- |
| --! |
| |
| with FXF3A00; |
| with Ada.Text_IO.Editing; |
| with Report; |
| |
| procedure CXF3A03 is |
| begin |
| |
| Report.Test ("CXF3A03", "Check that function Length returns the " & |
| "number of characters in the edited output " & |
| "string produced by function Image, for a " & |
| "particular decimal type, currency string, " & |
| "and radix mark. Check that function Valid " & |
| "returns correct results based on the " & |
| "particular decimal value, and the Picture " & |
| "and Currency string parameters"); |
| |
| Test_Block: |
| declare |
| |
| use Ada.Text_IO; |
| use FXF3A00; |
| |
| type Instantiation_Type is (NDP, TwoDP); |
| |
| -- Defaults used for all other generic parameters in these |
| -- instantiations. |
| package Pack_NDP is new Editing.Decimal_Output (Decimal_Type_NDP); |
| package Pack_2DP is new Editing.Decimal_Output (Decimal_Type_2DP); |
| |
| TC_Lower_Bound, |
| TC_Higher_Bound : Integer := 0; |
| |
| TC_Picture : Editing.Picture; |
| TC_US_String : constant String := "$"; |
| TC_FF_String : constant String := "FF"; |
| TC_DM_String : constant String := "DM"; |
| TC_CHF_String : constant String := "CHF"; |
| |
| |
| function Dollar_Sign_Present (Str : String) return Boolean is |
| begin |
| for i in 1..Str'Length loop |
| if Str(i) = '$' then |
| return True; |
| end if; |
| end loop; |
| return False; |
| end Dollar_Sign_Present; |
| |
| function V_Present (Str : String) return Boolean is |
| begin |
| for i in 1..Str'Length loop |
| if Str(i) = 'V' or Str(i) = 'v' then |
| return True; |
| end if; |
| end loop; |
| return False; |
| end V_Present; |
| |
| |
| function Accurate_Length (Pict_Str : String; |
| Inst : Instantiation_Type; |
| Currency_String : String) |
| return Boolean is |
| |
| TC_Length : Natural := 0; |
| TC_Currency_Length_Adjustment : Natural := 0; |
| TC_Radix_Adjustment : Natural := 0; |
| begin |
| |
| -- Create the picture object from the picture string. |
| TC_Picture := Editing.To_Picture(Pict_Str); |
| |
| -- Calculate the currency length adjustment. |
| if Dollar_Sign_Present (Editing.Pic_String(TC_Picture)) then |
| TC_Currency_Length_Adjustment := Currency_String'Length - 1; |
| end if; |
| |
| -- Calculate the Radix adjustment. |
| if V_Present (Editing.Pic_String(TC_Picture)) then |
| TC_Radix_Adjustment := 1; |
| end if; |
| |
| -- Calculate the length, using the version of Length that comes |
| -- from the appropriate instantiation of Decimal_Output, based |
| -- on the decimal type used in the instantiation. |
| if Inst = NDP then |
| TC_Length := Pack_NDP.Length(TC_Picture, |
| Currency_String); |
| else |
| TC_Length := Pack_2DP.Length(TC_Picture, |
| Currency_String); |
| end if; |
| |
| return TC_Length = Editing.Pic_String(TC_Picture)'Length + |
| TC_Currency_Length_Adjustment - |
| TC_Radix_Adjustment; |
| end Accurate_Length; |
| |
| |
| begin |
| |
| Length_Block: |
| begin |
| |
| -- The first 10 picture strings in the Valid_Strings array correspond |
| -- to data values of a decimal type with delta 0.01. |
| -- Note: The appropriate instantiation of the Decimal_Output package |
| -- (and therefore function Length) is used by function |
| -- Accurate_Length to calculate length. |
| |
| for i in 1..10 loop |
| if not Accurate_Length (FXF3A00.Valid_Strings(i).all, |
| TwoDP, |
| TC_US_String) |
| then |
| Report.Failed("Incorrect result from function Length, " & |
| "when used with a decimal type with delta .01 " & |
| "and with the currency string " & TC_US_String & |
| " in evaluating picture string " & |
| FXF3A00.Valid_Strings(i).all ); |
| end if; |
| end loop; |
| |
| |
| -- Picture strings 17-20 in the Valid_Strings array correspond |
| -- to data values of a decimal type with delta 1.0. Again, the |
| -- instantiation of Decimal_Output used is based on this particular |
| -- decimal type. |
| |
| for i in 17..20 loop |
| if not Accurate_Length (FXF3A00.Valid_Strings(i).all, |
| NDP, |
| TC_US_String) |
| then |
| Report.Failed("Incorrect result from function Length, " & |
| "when used with a decimal type with delta 1.0 " & |
| "and with the currency string " & TC_US_String & |
| " in evaluating picture string " & |
| FXF3A00.Valid_Strings(i).all ); |
| end if; |
| end loop; |
| |
| |
| -- The first 4 picture strings in the Foreign_Strings array |
| -- correspond to data values of a decimal type with delta 0.01, |
| -- and to the currency string "FF" (two characters). |
| |
| for i in 1..FXF3A00.Number_of_FF_Strings loop |
| if not Accurate_Length (FXF3A00.Foreign_Strings(i).all, |
| TwoDP, |
| TC_FF_String) |
| then |
| Report.Failed("Incorrect result from function Length, " & |
| "when used with a decimal type with delta .01 " & |
| "and with the currency string " & TC_FF_String & |
| " in evaluating picture string " & |
| FXF3A00.Foreign_Strings(i).all ); |
| end if; |
| end loop; |
| |
| |
| -- Picture strings 5-9 in the Foreign_Strings array correspond |
| -- to data values of a decimal type with delta 0.01, and to the |
| -- currency string "DM" (two characters). |
| |
| TC_Lower_Bound := FXF3A00.Number_of_FF_Strings + 1; |
| TC_Higher_Bound := FXF3A00.Number_of_FF_Strings + |
| FXF3A00.Number_of_DM_Strings; |
| |
| for i in TC_Lower_Bound..TC_Higher_Bound loop |
| if not Accurate_Length (FXF3A00.Foreign_Strings(i).all, |
| TwoDP, |
| TC_DM_String) |
| then |
| Report.Failed("Incorrect result from function Length, " & |
| "when used with a decimal type with delta .01 " & |
| "and with the currency string " & TC_DM_String & |
| " in evaluating picture string " & |
| FXF3A00.Foreign_Strings(i).all ); |
| end if; |
| end loop; |
| |
| |
| -- Picture string #10 in the Foreign_Strings array corresponds |
| -- to a data value of a decimal type with delta 0.01, and to the |
| -- currency string "CHF" (three characters). |
| |
| if not Accurate_Length (FXF3A00.Foreign_Strings(10).all, |
| TwoDP, |
| TC_CHF_String) |
| then |
| Report.Failed("Incorrect result from function Length, " & |
| "when used with a decimal type with delta .01 " & |
| "and with the currency string " & |
| TC_CHF_String); |
| end if; |
| |
| exception |
| when others => |
| Report.Failed("Unexpected exception raised in Length_Block"); |
| end Length_Block; |
| |
| |
| Valid_Block: |
| declare |
| |
| -- This offset value is used to align picture string and decimal |
| -- data values from package FXF3A00 for proper correspondence for |
| -- the evaluations below. |
| |
| TC_Offset : constant Natural := 10; |
| |
| begin |
| |
| -- The following four For Loops examine cases where the |
| -- decimal data/picture string/currency combinations used will |
| -- generate valid Edited Output strings. These combinations, when |
| -- provided to the Function Valid (from instantiations of |
| -- Decimal_Output), should result in a return result of True. |
| -- The particular instantiated version of Valid used in these loops |
| -- is that for decimal data with delta 0.01. |
| |
| -- The first 4 picture strings in the Foreign_Strings array |
| -- correspond to data values of a decimal type with delta 0.01, |
| -- and to the currency string "FF" (two characters). |
| |
| for i in 1..FXF3A00.Number_of_FF_Strings loop |
| -- Create the picture object from the picture string. |
| TC_Picture := Editing.To_Picture(FXF3A00.Foreign_Strings(i).all); |
| |
| if not Pack_2DP.Valid (FXF3A00.Data_With_2DP(TC_Offset + i), |
| TC_Picture, |
| TC_FF_String) |
| then |
| Report.Failed("Incorrect result from function Valid, " & |
| "when used with a decimal type with delta .01 " & |
| "and with the currency string " & TC_FF_String & |
| " in evaluating picture string " & |
| FXF3A00.Foreign_Strings(i).all ); |
| end if; |
| end loop; |
| |
| |
| -- Picture strings 5-9 in the Foreign_Strings array correspond |
| -- to data values of a decimal type with delta 0.01, and to the |
| -- currency string "DM" (two characters). |
| |
| TC_Lower_Bound := FXF3A00.Number_of_FF_Strings + 1; |
| TC_Higher_Bound := FXF3A00.Number_of_FF_Strings + |
| FXF3A00.Number_of_DM_Strings; |
| |
| for i in TC_Lower_Bound..TC_Higher_Bound loop |
| -- Create the picture object from the picture string. |
| TC_Picture := Editing.To_Picture(FXF3A00.Foreign_Strings(i).all); |
| |
| if not Pack_2DP.Valid (FXF3A00.Data_With_2DP(TC_Offset + i), |
| TC_Picture, |
| TC_DM_String) |
| then |
| Report.Failed("Incorrect result from function Valid, " & |
| "when used with a decimal type with delta .01 " & |
| "and with the currency string " & TC_DM_String & |
| " in evaluating picture string " & |
| FXF3A00.Foreign_Strings(i).all ); |
| end if; |
| end loop; |
| |
| |
| -- Picture string #10 in the Foreign_Strings array corresponds |
| -- to a data value of a decimal type with delta 0.01, and to the |
| -- currency string "CHF" (three characters). |
| |
| -- Create the picture object from the picture string. |
| TC_Picture := Editing.To_Picture(FXF3A00.Foreign_Strings(10).all); |
| |
| if not Pack_2DP.Valid (FXF3A00.Data_With_2DP(TC_Offset + 10), |
| TC_Picture, |
| TC_CHF_String) |
| then |
| Report.Failed("Incorrect result from function Valid, " & |
| "when used with a decimal type with delta .01 " & |
| "and with the currency string " & |
| TC_CHF_String); |
| end if; |
| |
| |
| -- The following For Loop examines cases where the |
| -- decimal data/picture string/currency combinations used will |
| -- generate valid Edited Output strings. |
| -- The particular instantiated version of Valid used in this loop |
| -- is that for decimal data with delta 1.0; the others above have |
| -- been for decimal data with delta 0.01. |
| -- Note: TC_Offset is used here to align picture strings from the |
| -- FXF3A00.Valid_Strings table with the appropriate decimal |
| -- data in the FXF3A00.Data_With_NDP table. |
| |
| for i in 1..FXF3A00.Number_Of_NDP_Items loop |
| -- Create the picture object from the picture string. |
| TC_Picture := |
| Editing.To_Picture(FXF3A00.Valid_Strings(TC_Offset + i).all); |
| |
| if not Pack_NDP.Valid (FXF3A00.Data_With_NDP(i), |
| TC_Picture, |
| TC_US_String) |
| then |
| Report.Failed("Incorrect result from function Valid, " & |
| "when used with a decimal type with delta .01 " & |
| "and with the currency string " & TC_US_String & |
| " in evaluating picture string " & |
| FXF3A00.Valid_Strings(i).all ); |
| end if; |
| end loop; |
| |
| |
| -- The following three evaluations of picture strings, used in |
| -- conjunction with the specific decimal values provided, will cause |
| -- Editing.Image to raise Layout_Error (to be examined in other |
| -- tests). Function Valid should return a False result for these |
| -- combinations. |
| -- 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. |
| |
| for i in 1..FXF3A00.Number_of_Erroneous_Conditions loop |
| |
| -- Create the picture object from the picture string. |
| TC_Picture := |
| Editing.To_Picture(FXF3A00.Erroneous_Strings(i).all); |
| |
| if i < 3 then -- Choose the appropriate instantiation. |
| if Pack_2DP.Valid(Item => FXF3A00.Erroneous_Data(i), |
| Pic => TC_Picture, |
| Currency => TC_US_String) |
| then |
| Report.Failed("Incorrect result from function Valid, " & |
| "when used with a decimal type with delta " & |
| "0.01 and with the currency string " & |
| TC_US_String & |
| " in evaluating picture string " & |
| FXF3A00.Valid_Strings(i).all ); |
| end if; |
| else |
| if Pack_NDP.Valid(Item => FXF3A00.Decimal_Type_NDP( |
| FXF3A00.Erroneous_Data(i)), |
| Pic => TC_Picture, |
| Currency => TC_US_String) |
| then |
| Report.Failed("Incorrect result from function Valid, " & |
| "when used with a decimal type with delta " & |
| "1.0 and with the currency string " & |
| TC_US_String & |
| " in evaluating picture string " & |
| FXF3A00.Valid_Strings(i).all ); |
| end if; |
| end if; |
| end loop; |
| |
| exception |
| when others => |
| Report.Failed("Unexpected exception raised in Valid_Block"); |
| end Valid_Block; |
| |
| |
| exception |
| when others => Report.Failed ("Exception raised in Test_Block"); |
| end Test_Block; |
| |
| Report.Result; |
| |
| end CXF3A03; |