1-- CXA4032.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 procedures defined in package Ada.Strings.Unbounded 28-- are available, and that they produce correct results. Specifically, 29-- check the procedures Replace_Slice, Insert, Overwrite, Delete, 30-- Trim (2 versions), Head, and Tail. 31-- 32-- TEST DESCRIPTION: 33-- This test demonstrates the uses of many of the procedures defined 34-- in package Ada.Strings.Unbounded for use with unbounded strings. 35-- The test simulates how unbounded strings could be processed in a 36-- user environment, using the procedures provided in this package. 37-- 38-- This test, when taken in conjunction with tests CXA4010, CXA4011, 39-- CXA4030, and CXA4031 will constitute a test of all the functionality 40-- contained in package Ada.Strings.Unbounded. This test uses a variety 41-- of the procedures defined in the unbounded string package in ways 42-- typical of common usage. 43-- 44-- 45-- CHANGE HISTORY: 46-- 02 Mar 95 SAIC Initial prerelease version. 47-- 48--! 49 50with Report; 51with Ada.Strings; 52with Ada.Strings.Maps; 53with Ada.Strings.Maps.Constants; 54with Ada.Strings.Unbounded; 55 56procedure CXA4032 is 57begin 58 59 Report.Test ("CXA4032", "Check that the subprograms defined in " & 60 "package Ada.Strings.Unbounded are available, " & 61 "and that they produce correct results"); 62 63 Test_Block: 64 declare 65 66 package Unb renames Ada.Strings.Unbounded; 67 use Unb; 68 use Ada.Strings; 69 70 TC_Null_String : constant String := ""; 71 TC_String_5 : String(1..5) := "ABCDE"; 72 73 TC_Unb_String : Unb.Unbounded_String := 74 Unb.To_Unbounded_String("Test String"); 75 76 begin 77 78 -- Procedure Replace_Slice 79 80 begin -- Low > Source'Last+1 81 Unb.Replace_Slice(Source => TC_Unb_String, 82 Low => Unb.Length(TC_Unb_String) + 2, 83 High => Unb.Length(TC_Unb_String), 84 By => TC_String_5); 85 Report.Failed("Index_Error not raised by Replace_Slice when Low " & 86 "> Source'Last+1"); 87 exception 88 when Index_Error => null; -- OK, expected exception. 89 when others => 90 Report.Failed("Unexpected exception raised by Replace_Slice" & 91 "when Low > Source'Last+1"); 92 end; 93 94 -- High >= Low 95 96 TC_Unb_String := Unb.To_Unbounded_String("Test String"); 97 98 Unb.Replace_Slice(TC_Unb_String, 5, 5, TC_String_5); 99 100 if TC_Unb_String /= Unb.To_Unbounded_String("TestABCDEString") then 101 Report.Failed("Incorrect results from Replace_Slice - 1"); 102 end if; 103 104 Unb.Replace_Slice(TC_Unb_String, 1, 4, TC_String_5); 105 106 if TC_Unb_String /= Unb.To_Unbounded_String("ABCDEABCDEString") then 107 Report.Failed("Incorrect results from Replace_Slice - 2"); 108 end if; 109 110 Unb.Replace_Slice(TC_Unb_String, 111 11, 112 Unb.Length(TC_Unb_String), 113 TC_Null_String); 114 115 if TC_Unb_String /= Unb.To_Unbounded_String("ABCDEABCDE") then 116 Report.Failed("Incorrect results from Replace_Slice - 3"); 117 end if; 118 119 -- High < Low 120 121 Unb.Replace_Slice(TC_Unb_String, Low => 4, High => 1, By => "xxx"); 122 123 if TC_Unb_String /= Unb.To_Unbounded_String("ABCxxxDEABCDE") then 124 Report.Failed("Incorrect results from Replace_Slice - 4"); 125 end if; 126 127 Unb.Replace_Slice(TC_Unb_String, Low => 1, High => 0, By => "yyy"); 128 129 if TC_Unb_String /= Unb.To_Unbounded_String("yyyABCxxxDEABCDE") then 130 Report.Failed("Incorrect results from Replace_Slice - 5"); 131 end if; 132 133 Unb.Replace_Slice(TC_Unb_String, 134 Unb.Length(TC_Unb_String) + 1, 135 Unb.Length(TC_Unb_String), 136 By => "zzz"); 137 138 if TC_Unb_String /= Unb.To_Unbounded_String("yyyABCxxxDEABCDEzzz") then 139 Report.Failed("Incorrect results from Replace_Slice - 6"); 140 end if; 141 142 143 -- Procedure Insert 144 145 TC_Unb_String := Unb.To_Unbounded_String("Test String"); 146 147 begin -- Before not in Source'First..Source'Last + 1 148 Unb.Insert(Source => TC_Unb_String, 149 Before => Unb.Length(TC_Unb_String) + 2, 150 New_Item => TC_String_5); 151 Report.Failed("Index_Error not raised by Insert when Before " & 152 "not in the range Source'First..Source'Last+1"); 153 exception 154 when Index_Error => null; -- OK, expected exception. 155 when others => 156 Report.Failed 157 ("Unexpected exception raised by Insert when Before not in " & 158 "the range Source'First..Source'Last+1"); 159 end; 160 161 Unb.Insert(TC_Unb_String, 1, "**"); 162 163 if TC_Unb_String /= Unb.To_Unbounded_String("**Test String") then 164 Report.Failed("Incorrect results from Insert - 1"); 165 end if; 166 167 Unb.Insert(TC_Unb_String, Unb.Length(TC_Unb_String)+1, "**"); 168 169 if TC_Unb_String /= Unb.To_Unbounded_String("**Test String**") then 170 Report.Failed("Incorrect results from Insert - 2"); 171 end if; 172 173 Unb.Insert(TC_Unb_String, 8, "---"); 174 175 if TC_Unb_String /= Unb.To_Unbounded_String("**Test ---String**") then 176 Report.Failed("Incorrect results from Insert - 3"); 177 end if; 178 179 Unb.Insert(TC_Unb_String, 3, TC_Null_String); 180 181 if TC_Unb_String /= Unb.To_Unbounded_String("**Test ---String**") then 182 Report.Failed("Incorrect results from Insert - 4"); 183 end if; 184 185 186 -- Procedure Overwrite 187 188 begin -- Position not in Source'First..Source'Last + 1 189 Unb.Overwrite(Source => TC_Unb_String, 190 Position => Unb.Length(TC_Unb_String) + 2, 191 New_Item => TC_String_5); 192 Report.Failed("Index_Error not raised by Overwrite when Position " & 193 "not in the range Source'First..Source'Last+1"); 194 exception 195 when Index_Error => null; -- OK, expected exception. 196 when others => 197 Report.Failed 198 ("Unexpected exception raised by Overwrite when Position not " & 199 "in the range Source'First..Source'Last+1"); 200 end; 201 202 TC_Unb_String := Unb.To_Unbounded_String("Test String"); 203 204 Unb.Overwrite(Source => TC_Unb_String, 205 Position => 1, 206 New_Item => "XXXX"); 207 208 if TC_Unb_String /= Unb.To_Unbounded_String("XXXX String") then 209 Report.Failed("Incorrect results from Overwrite - 1"); 210 end if; 211 212 Unb.Overwrite(TC_Unb_String, Unb.Length(TC_Unb_String)+1, "**"); 213 214 if TC_Unb_String /= Unb.To_Unbounded_String("XXXX String**") then 215 Report.Failed("Incorrect results from Overwrite - 2"); 216 end if; 217 218 Unb.Overwrite(TC_Unb_String, 3, TC_Null_String); 219 220 if TC_Unb_String /= Unb.To_Unbounded_String("XXXX String**") then 221 Report.Failed("Incorrect results from Overwrite - 3"); 222 end if; 223 224 Unb.Overwrite(TC_Unb_String, 1, "abcdefghijklmn"); 225 226 if TC_Unb_String /= Unb.To_Unbounded_String("abcdefghijklmn") then 227 Report.Failed("Incorrect results from Overwrite - 4"); 228 end if; 229 230 231 -- Procedure Delete 232 233 TC_Unb_String := Unb.To_Unbounded_String("Test String"); 234 235 -- From > Through (No change to Source) 236 237 Unb.Delete(Source => TC_Unb_String, 238 From => Unb.Length(TC_Unb_String), 239 Through => Unb.Length(TC_Unb_String)-1); 240 241 if TC_Unb_String /= Unb.To_Unbounded_String("Test String") then 242 Report.Failed("Incorrect results from Delete - 1"); 243 end if; 244 245 Unb.Delete(TC_Unb_String, 1, 0); 246 247 if TC_Unb_String /= Unb.To_Unbounded_String("Test String") then 248 Report.Failed("Incorrect results from Delete - 2"); 249 end if; 250 251 -- From <= Through 252 253 Unb.Delete(TC_Unb_String, 1, 5); 254 255 if TC_Unb_String /= Unb.To_Unbounded_String("String") then 256 Report.Failed("Incorrect results from Delete - 3"); 257 end if; 258 259 Unb.Delete(TC_Unb_String, 3, 3); 260 261 if TC_Unb_String /= Unb.To_Unbounded_String("Sting") then 262 Report.Failed("Incorrect results from Delete - 4"); 263 end if; 264 265 266 -- Procedure Trim 267 268 TC_Unb_String := Unb.To_Unbounded_String("No Spaces"); 269 270 Unb.Trim(Source => TC_Unb_String, Side => Ada.Strings.Both); 271 272 if TC_Unb_String /= Unb.To_Unbounded_String("No Spaces") then 273 Report.Failed("Incorrect results from Trim - 1"); 274 end if; 275 276 TC_Unb_String := Unb.To_Unbounded_String(" Leading Spaces "); 277 278 Unb.Trim(TC_Unb_String, Ada.Strings.Left); 279 280 if TC_Unb_String /= Unb.To_Unbounded_String("Leading Spaces ") then 281 Report.Failed("Incorrect results from Trim - 2"); 282 end if; 283 284 TC_Unb_String := Unb.To_Unbounded_String(" Ending Spaces "); 285 286 Unb.Trim(TC_Unb_String, Ada.Strings.Right); 287 288 if TC_Unb_String /= Unb.To_Unbounded_String(" Ending Spaces") then 289 Report.Failed("Incorrect results from Trim - 3"); 290 end if; 291 292 TC_Unb_String := 293 Unb.To_Unbounded_String(" Spaces on both ends "); 294 295 Unb.Trim(TC_Unb_String, Ada.Strings.Both); 296 297 if TC_Unb_String /= 298 Unb.To_Unbounded_String("Spaces on both ends") 299 then 300 Report.Failed("Incorrect results from Trim - 4"); 301 end if; 302 303 304 -- Procedure Trim (with Character Set parameters) 305 306 TC_Unb_String := Unb.To_Unbounded_String("lowerCASEletters"); 307 308 Unb.Trim(Source => TC_Unb_String, 309 Left => Ada.Strings.Maps.Constants.Lower_Set, 310 Right => Ada.Strings.Maps.Constants.Lower_Set); 311 312 if TC_Unb_String /= Unb.To_Unbounded_String("CASE") then 313 Report.Failed("Incorrect results from Trim with Sets - 1"); 314 end if; 315 316 TC_Unb_String := Unb.To_Unbounded_String("lowerCASEletters"); 317 318 Unb.Trim(TC_Unb_String, 319 Ada.Strings.Maps.Constants.Upper_Set, 320 Ada.Strings.Maps.Constants.Upper_Set); 321 322 if TC_Unb_String /= Unb.To_Unbounded_String("lowerCASEletters") then 323 Report.Failed("Incorrect results from Trim with Sets - 2"); 324 end if; 325 326 TC_Unb_String := Unb.To_Unbounded_String("012abcdefghGFEDCBA789ab"); 327 328 Unb.Trim(TC_Unb_String, 329 Ada.Strings.Maps.Constants.Hexadecimal_Digit_Set, 330 Ada.Strings.Maps.Constants.Hexadecimal_Digit_Set); 331 332 if TC_Unb_String /= Unb.To_Unbounded_String("ghG") then 333 Report.Failed("Incorrect results from Trim with Sets - 3"); 334 end if; 335 336 337 -- Procedure Head 338 339 -- Count <= Source'Length 340 341 TC_Unb_String := Unb.To_Unbounded_String("Test String"); 342 343 Unb.Head(Source => TC_Unb_String, 344 Count => 0, 345 Pad => '*'); 346 347 if TC_Unb_String /= Unb.Null_Unbounded_String then 348 Report.Failed("Incorrect results from Head - 1"); 349 end if; 350 351 TC_Unb_String := Unb.To_Unbounded_String("Test String"); 352 353 Unb.Head(Source => TC_Unb_String, 354 Count => 4, 355 Pad => '*'); 356 357 if TC_Unb_String /= Unb.To_Unbounded_String("Test") then 358 Report.Failed("Incorrect results from Head - 2"); 359 end if; 360 361 TC_Unb_String := Unb.To_Unbounded_String("Test String"); 362 363 Unb.Head(Source => TC_Unb_String, 364 Count => Unb.Length(TC_Unb_String), 365 Pad => '*'); 366 367 if TC_Unb_String /= Unb.To_Unbounded_String("Test String") then 368 Report.Failed("Incorrect results from Head - 3"); 369 end if; 370 371 -- Count > Source'Length 372 373 TC_Unb_String := Unb.To_Unbounded_String("Test String"); 374 375 Unb.Head(Source => TC_Unb_String, 376 Count => Unb.Length(TC_Unb_String) + 4, 377 Pad => '*'); 378 379 if TC_Unb_String /= Unb.To_Unbounded_String("Test String****") then 380 Report.Failed("Incorrect results from Head - 4"); 381 end if; 382 383 TC_Unb_String := Unb.Null_Unbounded_String; 384 385 Unb.Head(Source => TC_Unb_String, 386 Count => Unb.Length(TC_Unb_String) + 3, 387 Pad => '*'); 388 389 if TC_Unb_String /= Unb.To_Unbounded_String("***") then 390 Report.Failed("Incorrect results from Head - 5"); 391 end if; 392 393 394 -- Procedure Tail 395 396 -- Count <= Source'Length 397 398 TC_Unb_String := Unb.To_Unbounded_String("Test String"); 399 400 Unb.Tail(Source => TC_Unb_String, 401 Count => 0, 402 Pad => '*'); 403 404 if TC_Unb_String /= Unb.Null_Unbounded_String then 405 Report.Failed("Incorrect results from Tail - 1"); 406 end if; 407 408 TC_Unb_String := Unb.To_Unbounded_String("Test String"); 409 410 Unb.Tail(Source => TC_Unb_String, 411 Count => 6, 412 Pad => '*'); 413 414 if TC_Unb_String /= Unb.To_Unbounded_String("String") then 415 Report.Failed("Incorrect results from Tail - 2"); 416 end if; 417 418 TC_Unb_String := Unb.To_Unbounded_String("Test String"); 419 420 Unb.Tail(Source => TC_Unb_String, 421 Count => Unb.Length(TC_Unb_String), 422 Pad => '*'); 423 424 if TC_Unb_String /= Unb.To_Unbounded_String("Test String") then 425 Report.Failed("Incorrect results from Tail - 3"); 426 end if; 427 428 -- Count > Source'Length 429 430 TC_Unb_String := Unb.To_Unbounded_String("Test String"); 431 432 Unb.Tail(Source => TC_Unb_String, 433 Count => Unb.Length(TC_Unb_String) + 5, 434 Pad => 'x'); 435 436 if TC_Unb_String /= Unb.To_Unbounded_String("xxxxxTest String") then 437 Report.Failed("Incorrect results from Tail - 4"); 438 end if; 439 440 TC_Unb_String := Unb.Null_Unbounded_String; 441 442 Unb.Tail(Source => TC_Unb_String, 443 Count => Unb.Length(TC_Unb_String) + 3, 444 Pad => 'X'); 445 446 if TC_Unb_String /= Unb.To_Unbounded_String("XXX") then 447 Report.Failed("Incorrect results from Tail - 5"); 448 end if; 449 450 451 exception 452 when others => Report.Failed ("Exception raised in Test_Block"); 453 end Test_Block; 454 455 Report.Result; 456 457end CXA4032; 458