1-- CXA4031.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 the subprograms defined in package Ada.Strings.Unbounded 28-- are available, and that they produce correct results. Specifically, 29-- check the functions To_Unbounded_String (version with Length 30-- parameter), "=", "<", "<=", ">", ">=" (all with String-Unbounded 31-- String parameter mix), as well as three versions of Procedure Append. 32-- 33-- TEST DESCRIPTION: 34-- This test demonstrates the uses of many of the subprograms defined 35-- in package Ada.Strings.Unbounded for use with unbounded strings. 36-- The test simulates how unbounded strings could be processed in a 37-- user environment, using the subprograms provided in this package. 38-- 39-- This test, when taken in conjunction with tests CXA4010, CXA4011, 40-- CXA4030, and CXA4032 will constitute a test of all the functionality 41-- contained in package Ada.Strings.Unbounded. This test uses a variety 42-- of the subprograms defined in the unbounded string package in ways 43-- typical of common usage. 44-- 45-- 46-- CHANGE HISTORY: 47-- 27 Feb 95 SAIC Initial prerelease version. 48-- 18 Apr 96 SAIC Incorporated reviewer comments for ACVC 2.1. 49-- 50--! 51 52with Report; 53with Ada.Exceptions; 54with Ada.Strings.Maps; 55with Ada.Strings.Unbounded; 56 57procedure CXA4031 is 58begin 59 60 Report.Test ("CXA4031", "Check that the subprograms defined in " & 61 "package Ada.Strings.Unbounded are available, " & 62 "and that they produce correct results"); 63 64 Test_Block: 65 declare 66 67 package Unb renames Ada.Strings.Unbounded; 68 use Unb; 69 use Ada.Exceptions; 70 71 subtype LC_Characters is Character range 'a'..'z'; 72 73 Null_String : constant String := ""; 74 TC_String : constant String := "A Standard String"; 75 76 TC_Unb_String, 77 TC_New_Unb_String : Unb.Unbounded_String := Unb.Null_Unbounded_String; 78 79 begin 80 81 -- Function To_Unbounded_String (version with Length parameter) 82 -- returns an unbounded string that represents an uninitialized String 83 -- whose length is Length. 84 -- Note: Unbounded_String length can vary conceptually between 0 and 85 -- Natural'Last. 86 87 if Unb.Length(Unb.To_Unbounded_String(Length => 10)) /= 10 or 88 Unb.Length(Unb.To_Unbounded_String(1)) /= 1 or 89 Unb.Length(Unb.To_Unbounded_String(0)) /= 0 or 90 Unb.Length(Unb."&"(Unb.To_Unbounded_String(Length => 10), 91 Unb."&"(Unb.To_Unbounded_String(1), 92 Unb.To_Unbounded_String(0) ))) /= 10+1+0 93 then 94 Report.Failed 95 ("Incorrect results from Function To_Unbounded_String with " & 96 "Length parameter"); 97 end if; 98 99 100 -- Procedure Append (Unbounded - Unbounded) 101 -- Note: For each of the Append procedures, the resulting string 102 -- represented by the Source parameter is given by the 103 -- concatenation of the original value of Source and the value 104 -- of New_Item. 105 106 TC_Unb_String := Unb.To_Unbounded_String("Sample string of length L"); 107 TC_New_Unb_String := Unb.To_Unbounded_String(" and then some"); 108 109 Unb.Append(Source => TC_Unb_String, New_Item => TC_New_Unb_String); 110 111 if TC_Unb_String /= 112 Unb.To_Unbounded_String("Sample string of length L and then some") 113 then 114 Report.Failed("Incorrect results from Procedure Append with " & 115 "unbounded string parameters - 1"); 116 end if; 117 118 119 TC_Unb_String := Unb.To_Unbounded_String("Sample string of length L"); 120 TC_New_Unb_String := Unb.Null_Unbounded_String; 121 122 Unb.Append(TC_Unb_String, TC_New_Unb_String); 123 124 if TC_Unb_String /= 125 Unb.To_Unbounded_String("Sample string of length L") 126 then 127 Report.Failed("Incorrect results from Procedure Append with " & 128 "unbounded string parameters - 2"); 129 end if; 130 131 132 TC_Unb_String := Unb.Null_Unbounded_String; 133 134 Unb.Append(TC_Unb_String, 135 Unb.To_Unbounded_String("New Unbounded String")); 136 137 if TC_Unb_String /= 138 Unb.To_Unbounded_String("New Unbounded String") 139 then 140 Report.Failed("Incorrect results from Procedure Append with " & 141 "unbounded string parameters - 3"); 142 end if; 143 144 145 -- Procedure Append (Unbounded - String) 146 147 TC_Unb_String := Unb.To_Unbounded_String("An Unbounded String and "); 148 149 Unb.Append(Source => TC_Unb_String, New_Item => TC_String); 150 151 if TC_Unb_String /= 152 Unb.To_Unbounded_String("An Unbounded String and A Standard String") 153 then 154 Report.Failed("Incorrect results from Procedure Append with " & 155 "an unbounded string parameter and a string " & 156 "parameter - 1"); 157 end if; 158 159 160 TC_Unb_String := Unb.To_Unbounded_String("An Unbounded String"); 161 162 Unb.Append(TC_Unb_String, New_Item => Null_String); 163 164 if TC_Unb_String /= 165 Unb.To_Unbounded_String("An Unbounded String") 166 then 167 Report.Failed("Incorrect results from Procedure Append with " & 168 "an unbounded string parameter and a string " & 169 "parameter - 2"); 170 end if; 171 172 173 TC_Unb_String := Unb.Null_Unbounded_String; 174 175 Unb.Append(TC_Unb_String, TC_String); 176 177 if TC_Unb_String /= Unb.To_Unbounded_String("A Standard String") then 178 Report.Failed("Incorrect results from Procedure Append with " & 179 "an unbounded string parameter and a string " & 180 "parameter - 3"); 181 end if; 182 183 184 -- Procedure Append (Unbounded - Character) 185 186 TC_Unb_String := Unb.To_Unbounded_String("Lower Case = "); 187 188 for i in LC_Characters'Range loop 189 Unb.Append(Source => TC_Unb_String, New_Item => LC_Characters(i)); 190 end loop; 191 192 if TC_Unb_String /= 193 Unb.To_Unbounded_String("Lower Case = abcdefghijklmnopqrstuvwxyz") 194 then 195 Report.Failed("Incorrect results from Procedure Append with " & 196 "an unbounded string parameter and a character " & 197 "parameter - 1"); 198 end if; 199 200 201 TC_Unb_String := Unb.Null_Unbounded_String; 202 203 Unb.Append(TC_Unb_String, New_Item => 'a'); 204 205 if TC_Unb_String /= Unb.To_Unbounded_String("a") then 206 Report.Failed("Incorrect results from Procedure Append with " & 207 "an unbounded string parameter and a character " & 208 "parameter - 2"); 209 end if; 210 211 212 -- Function "=" 213 214 TC_Unb_String := Unb.To_Unbounded_String(TC_String); 215 216 if not (TC_Unb_String = TC_String) or -- (Unb_Str, Str) 217 not Unb."="("A Standard String", TC_Unb_String) or -- (Str, Unb_Str) 218 not ((Unb.Null_Unbounded_String = "") and -- (Unb_Str, Str) 219 ("Test String" = -- (Str, Unb_Str) 220 Unb.To_Unbounded_String("Test String"))) 221 then 222 Report.Failed("Incorrect results from function ""="" with " & 223 "string - unbounded string parameter combinations"); 224 end if; 225 226 227 -- Function "<" 228 229 if not ("Extra Space" < Unb.To_Unbounded_String("Extra Space ") and 230 Unb.To_Unbounded_String("tess") < "test" and 231 Unb.To_Unbounded_String("best") < "test") or 232 Unb.Null_Unbounded_String < Null_String or 233 " leading blank" < Unb.To_Unbounded_String(" leading blank") or 234 "ending blank " < Unb.To_Unbounded_String("ending blank ") 235 then 236 Report.Failed("Incorrect results from function ""<"" with " & 237 "string - unbounded string parameter combinations"); 238 end if; 239 240 241 -- Function "<=" 242 243 TC_Unb_String := Unb.To_Unbounded_String("Sample string"); 244 245 if TC_Unb_String <= "Sample strin" or -- (Unb_Str, Str) 246 "sample string" <= TC_Unb_String or -- (Str, Unb_Str) 247 not(Unb.Null_Unbounded_String <= "") or -- (Unb_Str, Str) 248 not("Sample string" <= TC_Unb_String) -- (Str, Unb_Str) 249 then 250 Report.Failed("Incorrect results from function ""<="" with " & 251 "string - unbounded string parameter combinations"); 252 end if; 253 254 255 -- Function ">" 256 257 TC_Unb_String := Unb.To_Unbounded_String("A MUCH LONGER STRING"); 258 259 if not ("A much longer string" > TC_Unb_String and 260 Unb.To_Unbounded_String(TC_String) > "A Standard Strin" and 261 "abcdefgh" > Unb.To_Unbounded_String("ABCDEFGH")) or 262 Unb.Null_Unbounded_String > Null_String 263 then 264 Report.Failed("Incorrect results from function "">"" with " & 265 "string - unbounded string parameter combinations"); 266 end if; 267 268 269 -- Function ">=" 270 271 TC_Unb_String := Unb.To_Unbounded_String(TC_String); 272 273 if not (TC_Unb_String >= TC_String and 274 Null_String >= Unb.Null_Unbounded_String and 275 "test" >= Unb.To_Unbounded_String("tess") and 276 Unb.To_Unbounded_String("Programming") >= "PROGRAMMING") 277 then 278 Report.Failed("Incorrect results from function "">="" with " & 279 "string - unbounded string parameter combinations"); 280 end if; 281 282 283 exception 284 when The_Error : others => 285 Report.Failed ("The following exception was raised in the " & 286 "Test_Block: " & Exception_Name(The_Error)); 287 end Test_Block; 288 289 Report.Result; 290 291end CXA4031; 292