1-- CXF3003.A 2-- 3-- Grant of Unlimited Rights 4-- 5-- Under contracts F33600-87-D-0337, F33600-84-D-0280, MDA903-79-C-0687, 6-- F08630-91-C-0015, and DCA100-97-D-0025, the U.S. Government obtained 7-- unlimited rights in the software and documentation contained herein. 8-- Unlimited rights are defined in DFAR 252.227-7013(a)(19). By making 9-- this public release, the Government intends to confer upon all 10-- recipients unlimited rights equal to those held by the Government. 11-- These rights include rights to use, duplicate, release or disclose the 12-- released technical data and computer software in whole or in part, in 13-- any manner and for any purpose whatsoever, and to have or permit others 14-- to do so. 15-- 16-- DISCLAIMER 17-- 18-- ALL MATERIALS OR INFORMATION HEREIN RELEASED, MADE AVAILABLE OR 19-- DISCLOSED ARE AS IS. THE GOVERNMENT MAKES NO EXPRESS OR IMPLIED 20-- WARRANTY AS TO ANY MATTER WHATSOEVER, INCLUDING THE CONDITIONS OF THE 21-- SOFTWARE, DOCUMENTATION OR OTHER INFORMATION RELEASED, MADE AVAILABLE 22-- OR DISCLOSED, OR THE OWNERSHIP, MERCHANTABILITY, OR FITNESS FOR A 23-- PARTICULAR PURPOSE OF SAID MATERIAL. 24--* 25-- 26-- OBJECTIVE: 27-- Check that statically identifiable picture strings can be used to 28-- produce correctly formatted edited output. 29-- 30-- TEST DESCRIPTION: 31-- This test defines several picture strings that are statically 32-- identifiable, (i.e., Pic : Picture := To_Picture("..."); ). 33-- These picture strings are used in conjunction with decimal data 34-- as parameters in calls to functions Valid and Image. These 35-- functions are created by an instantiation of the generic package 36-- Ada.Text_IO.Editing.Decimal_Output. 37-- 38-- 39-- CHANGE HISTORY: 40-- 04 Apr 96 SAIC Initial release for 2.1. 41-- 13 Feb 97 PWB.CTA corrected incorrect picture strings. 42--! 43 44with Report; 45with Ada.Text_IO.Editing; 46with Ada.Exceptions; 47 48procedure CXF3003 is 49begin 50 51 Report.Test ("CXF3003", "Check that statically identifiable " & 52 "picture strings can be used to produce " & 53 "correctly formatted edited output"); 54 55 Test_Block: 56 declare 57 58 use Ada.Exceptions; 59 use Ada.Text_IO.Editing; 60 61 Def_Cur : constant String := "$"; 62 Def_Fill : constant Character := '*'; 63 Def_Sep : constant Character := Default_Separator; 64 Def_Radix : constant Character := 65 Ada.Text_IO.Editing.Default_Radix_Mark; 66 67 type Str_Ptr is access String; 68 type Edited_Output_Array_Type is array (Integer range <>) of Str_Ptr; 69 70 -- Define a decimal data type, and instantiate the Decimal_Output 71 -- generic package for the data type. 72 73 type Decimal_Data_Type is delta 0.01 digits 16; 74 75 package Image_IO is 76 new Decimal_Output(Num => Decimal_Data_Type, 77 Default_Currency => Def_Cur, 78 Default_Fill => '*', 79 Default_Separator => Default_Separator, 80 Default_Radix_Mark => Def_Radix); 81 82 83 type Decimal_Data_Array_Type is 84 array (Integer range <>) of Decimal_Data_Type; 85 86 Decimal_Data : Decimal_Data_Array_Type(1..5) := 87 (1 => 1357.99, 88 2 => -9029.01, 89 3 => 0.00, 90 4 => 0.20, 91 5 => 3.45); 92 93 -- Statically identifiable picture strings. 94 95 Picture_1 : Picture := To_Picture("-$$_$$9.99"); 96 Picture_2 : Picture := To_Picture("-$$_$$$.$$"); 97 Picture_3 : Picture := To_Picture("-ZZZZ.ZZ"); 98 Picture_5 : Picture := To_Picture("-$$$_999.99"); 99 Picture_6 : Picture := To_Picture("-###**_***_**9.99"); 100 Picture_7 : Picture := To_Picture("-$**_***_**9.99"); 101 Picture_8 : Picture := To_Picture("-$$$$$$.$$"); 102 Picture_9 : Picture := To_Picture("-$$$$$$.$$"); 103 Picture_10 : Picture := To_Picture("+BBBZZ_ZZZ_ZZZ.ZZ"); 104 Picture_11 : Picture := To_Picture("--_---_---_--9"); 105 Picture_12 : Picture := To_Picture("-$_$$$_$$$_$$9.99"); 106 Picture_14 : Picture := To_Picture("$_$$9.99"); 107 Picture_15 : Picture := To_Picture("$$9.99"); 108 109 110 Picture_1_Output : Edited_Output_Array_Type(1..5) := 111 ( 1 => new String'(" $1,357.99"), 112 2 => new String'("-$9,029.01"), 113 3 => new String'(" $0.00"), 114 4 => new String'(" $0.20"), 115 5 => new String'(" $3.45")); 116 117 Picture_2_Output : Edited_Output_Array_Type(1..5) := 118 (1 => new String'(" $1,357.99"), 119 2 => new String'("-$9,029.01"), 120 3 => new String'(" "), 121 4 => new String'(" $.20"), 122 5 => new String'(" $3.45")); 123 124 Picture_3_Output : Edited_Output_Array_Type(1..5) := 125 (1 => new String'(" 1357.99"), 126 2 => new String'("-9029.01"), 127 3 => new String'(" "), 128 4 => new String'(" .20"), 129 5 => new String'(" 3.45")); 130 131 Picture_5_Output : Edited_Output_Array_Type(1..5) := 132 (1 => new String'(" $1,357.99"), 133 2 => new String'("- $9,029.01"), 134 3 => new String'(" $ 000.00"), 135 4 => new String'(" $ 000.20"), 136 5 => new String'(" $ 003.45")); 137 138 begin 139 140 -- Check the results of function Valid, using the first five decimal 141 -- data items and picture strings. 142 143 if not Image_IO.Valid(Decimal_Data(1), Picture_1) then 144 Report.Failed("Picture string 1 not valid"); 145 elsif not Image_IO.Valid(Decimal_Data(2), Picture_2) then 146 Report.Failed("Picture string 2 not valid"); 147 elsif not Image_IO.Valid(Decimal_Data(3), Picture_3) then 148 Report.Failed("Picture string 3 not valid"); 149 elsif not Image_IO.Valid(Decimal_Data(5), Picture_5) then 150 Report.Failed("Picture string 5 not valid"); 151 end if; 152 153 154 -- Check the results of function Image, using the picture strings 155 -- constructed above, with a variety of named vs. positional 156 -- parameter notation and defaulted parameters. 157 158 for i in 1..5 loop 159 if Image_IO.Image(Item => Decimal_Data(i), Pic => Picture_1) /= 160 Picture_1_Output(i).all 161 then 162 Report.Failed("Incorrect result from function Image with " & 163 "decimal data item #" & Integer'Image(i) & ", " & 164 "combined with Picture_1 picture string." & 165 "Expected: " & Picture_1_Output(i).all & ", " & 166 "Found: " & 167 Image_IO.Image(Decimal_Data(i),Picture_1)); 168 end if; 169 170 if Image_IO.Image(Decimal_Data(i), Pic => Picture_2) /= 171 Picture_2_Output(i).all 172 then 173 Report.Failed("Incorrect result from function Image with " & 174 "decimal data item #" & Integer'Image(i) & ", " & 175 "combined with Picture_2 picture string." & 176 "Expected: " & Picture_2_Output(i).all & ", " & 177 "Found: " & 178 Image_IO.Image(Decimal_Data(i),Picture_2)); 179 end if; 180 181 if Image_IO.Image(Decimal_Data(i), Picture_3) /= 182 Picture_3_Output(i).all 183 then 184 Report.Failed("Incorrect result from function Image with " & 185 "decimal data item #" & Integer'Image(i) & ", " & 186 "combined with Picture_3 picture string." & 187 "Expected: " & Picture_3_Output(i).all & ", " & 188 "Found: " & 189 Image_IO.Image(Decimal_Data(i),Picture_3)); 190 end if; 191 192 if Image_IO.Image(Decimal_Data(i), Picture_5) /= 193 Picture_5_Output(i).all 194 then 195 Report.Failed("Incorrect result from function Image with " & 196 "decimal data item #" & Integer'Image(i) & ", " & 197 "combined with Picture_5 picture string." & 198 "Expected: " & Picture_5_Output(i).all & ", " & 199 "Found: " & 200 Image_IO.Image(Decimal_Data(i),Picture_5)); 201 end if; 202 end loop; 203 204 205 if Image_IO.Image(Item => 123456.78, 206 Pic => Picture_6, 207 Currency => "$", 208 Fill => Def_Fill, 209 Separator => Def_Sep, 210 Radix_Mark => Def_Radix) /= " $***123,456.78" 211 then 212 Report.Failed("Incorrect result from Fn. Image using Picture_6"); 213 end if; 214 215 if Image_IO.Image(123456.78, 216 Pic => Picture_7, 217 Currency => Def_Cur, 218 Fill => '*', 219 Separator => Def_Sep, 220 Radix_Mark => Def_Radix) /= " $***123,456.78" 221 then 222 Report.Failed("Incorrect result from Fn. Image using Picture_7"); 223 end if; 224 225 if Image_IO.Image(0.0, 226 Picture_8, 227 Currency => "$", 228 Fill => '*', 229 Separator => Def_Sep, 230 Radix_Mark => Def_Radix) /= " " 231 then 232 Report.Failed("Incorrect result from Fn. Image using Picture_8"); 233 end if; 234 235 if Image_IO.Image(0.20, 236 Picture_9, 237 Def_Cur, 238 Fill => Def_Fill, 239 Separator => Default_Separator, 240 Radix_Mark => Default_Radix_Mark) /= " $.20" 241 then 242 Report.Failed("Incorrect result from Fn. Image using Picture_9"); 243 end if; 244 245 if Image_IO.Image(123456.00, 246 Picture_10, 247 "$", 248 '*', 249 Separator => Def_Sep, 250 Radix_Mark => Def_Radix) /= "+ 123,456.00" 251 then 252 Report.Failed("Incorrect result from Fn. Image using Picture_10"); 253 end if; 254 255 if Image_IO.Image(-123456.78, 256 Picture_11, 257 Default_Currency, 258 Default_Fill, 259 Default_Separator, 260 Radix_Mark => Def_Radix) /= " -123,457" 261 then 262 Report.Failed("Incorrect result from Fn. Image using Picture_11"); 263 end if; 264 265 if Image_IO.Image(123456.78, Picture_12, "$", '*', ',', '.') /= 266 " $123,456.78" 267 then 268 Report.Failed("Incorrect result from Fn. Image using Picture_12"); 269 end if; 270 271 if Image_IO.Image(1.23, 272 Picture_14, 273 Currency => Def_Cur, 274 Fill => Def_Fill) /= " $1.23" 275 then 276 Report.Failed("Incorrect result from Fn. Image using Picture_14"); 277 end if; 278 279 if Image_IO.Image(12.34, Pic => Picture_15) /= "$12.34" 280 then 281 Report.Failed("Incorrect result from Fn. Image using Picture_15"); 282 end if; 283 284 exception 285 when The_Error : others => 286 Report.Failed("The following exception was raised in the " & 287 "Test_Block: " & Exception_Name(The_Error)); 288 end Test_Block; 289 290 Report.Result; 291 292end CXF3003; 293