blob: 9eee39bb69432f2ca1cd9c75beb6646af0fcd116 [file] [log] [blame]
-- 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;