3 -- Grant of Unlimited Rights
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
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.
27 -- Check that the subprograms defined in package
28 -- Ada.Strings.Wide_Unbounded are available, and that they produce
29 -- correct results. Specifically, check the subprograms Head, Index,
30 -- Index_Non_Blank, Insert, Length, Overwrite, Replace_Slice, Slice,
31 -- Tail, To_Wide_String, To_Unbounded_Wide_String, "*", "&",
32 -- and "=", "<=", ">=".
35 -- This test demonstrates the uses of many of the subprograms defined
36 -- in package Ada.Strings.Wide_Unbounded for use with unbounded wide
38 -- The test attempts to simulate how unbounded wide strings could be used
39 -- to simulate paragraphs of text. Modifications could be easily be
40 -- performed using the provided subprograms (although in this test, the
41 -- main modification performed was the addition of more text to the
42 -- string). One would not have to worry about the formatting of the
43 -- paragraph until it was finished and correct in content. Then, once
44 -- all required editing is complete, the unbounded strings can be divided
45 -- up into the appropriate lengths based on particular formatting
46 -- requirements. The test then compares the formatted text product
47 -- with a predefined "finished product".
49 -- This test attempts to use a large number of the subprograms provided
50 -- by package Ada.Strings.Wide_Unbounded. Often, the processing involved
51 -- could have been performed more efficiently using a minimum number
52 -- of the subprograms, in conjunction with loops, etc. However, for
53 -- testing purposes, and in the interest of minimizing the number of
54 -- tests developed, subprogram variety and feature mixing was stressed.
58 -- 06 Dec 94 SAIC ACVC 2.0
63 with Ada
.Characters
.Handling
;
64 with Ada
.Strings
.Wide_Maps
;
65 with Ada
.Strings
.Wide_Unbounded
;
69 -- The following two functions are used to translate character and string
70 -- values to "Wide" values. They will be applied to all the Wide_Bounded
71 -- subprogram character and string parameters to simulate the use of non-
72 -- character Wide_Characters and Wide_Strings in actual practice.
73 -- Note: These functions do not actually return "equivalent" wide
74 -- characters to their character inputs, just "non-character"
77 function Equiv
(Ch
: Character) return Wide_Character is
81 return Ada
.Characters
.Handling
.To_Wide_Character
(C
);
83 return Wide_Character'Val(Character'Pos(Ch
) +
84 Character'Pos(Character'Last) + 1);
89 function Equiv
(Str
: String) return Wide_String is
90 WS
: Wide_String(Str
'First..Str
'Last);
92 for i
in Str
'First..Str
'Last loop
93 WS
(i
) := Equiv
(Str
(i
));
100 Report
.Test
("CXA4021", "Check that the subprograms defined in " &
101 "package Ada.Strings.Wide_Unbounded are " &
102 "available, and that they produce correct " &
108 package ASW
renames Ada
.Strings
.Wide_Unbounded
;
109 use type ASW
.Unbounded_Wide_String
;
112 Pamphlet_Paragraph_Count
: constant := 2;
113 Lines
: constant := 4;
114 Line_Length
: constant := 40;
116 type Document_Type
is array (Positive range <>)
117 of ASW
.Unbounded_Wide_String
;
119 type Camera_Ready_Copy_Type
is array (1..Lines
)
120 of Wide_String (1..Line_Length
);
122 Pamphlet
: Document_Type
(1..Pamphlet_Paragraph_Count
);
124 Camera_Ready_Copy
: Camera_Ready_Copy_Type
:=
125 (others => (others => Ada
.Strings
.Wide_Space
));
127 TC_Finished_Product
: Camera_Ready_Copy_Type
:=
128 ( 1 => Equiv
("Ada is a programming language designed "),
129 2 => Equiv
("to support long-lived, reliable software"),
130 3 => Equiv
(" systems. "),
131 4 => Equiv
("Go with Ada! "));
136 procedure Enter_Text_Into_Document
(Document
: in out Document_Type
) is
139 -- Fill in both "paragraphs" of the document. Each unbounded wide
140 -- string functions as an individual paragraph, containing an
141 -- unspecified number of characters.
142 -- Use a variety of different unbounded wide string subprograms to
146 ASW
.To_Unbounded_Wide_String
(Equiv
("Ada is a language"));
148 -- Insert the word "programming" prior to "language".
150 ASW
.Insert
(Document
(1),
151 ASW
.Index
(Document
(1),
153 ASW
.To_Wide_String
(Equiv
("progra") & -- Wd Str &
154 ASW
."*"(2,Equiv
('m')) & -- Wd Unbd &
155 Equiv
("ing "))); -- Wd Str
158 -- Overwrite the word "language" with "language" + additional text.
160 ASW
.Overwrite
(Document
(1),
161 ASW
.Index
(Document
(1),
163 ASW
.Tail
(Document
(1), 8, Equiv
(' '))),
164 Ada
.Strings
.Backward
),
165 Equiv
("language designed to support long-lifed"));
168 -- Replace the word "lifed" with "lived".
170 ASW
.Replace_Slice
(Document
(1),
171 ASW
.Index
(Document
(1), Equiv
("lifed")),
172 ASW
.Length
(Document
(1)),
176 -- Overwrite the word "lived" with "lived" + additional text.
178 ASW
.Overwrite
(Document
(1),
179 ASW
.Index
(Document
(1),
181 (ASW
.Tail
(Document
(1), 5, Equiv
(' '))),
182 Ada
.Strings
.Backward
),
183 Equiv
("lived, reliable software systems."));
186 -- Use several of the overloaded versions of "&" to form this
187 -- unbounded wide string.
189 Document
(2) := Equiv
('G') &
190 ASW
.To_Unbounded_Wide_String
(Equiv
("o ")) &
191 ASW
.To_Unbounded_Wide_String
(Equiv
("with")) &
195 end Enter_Text_Into_Document
;
201 procedure Create_Camera_Ready_Copy
202 (Document
: in Document_Type
;
203 Camera_Copy
: out Camera_Ready_Copy_Type
) is
205 -- Break the unbounded wide strings into fixed lengths.
207 -- Search the first unbounded wide string for portions of text that
208 -- are less than or equal to the length of a wide string in the
209 -- Camera_Ready_Copy_Type object.
211 Camera_Copy
(1) := -- Take characters 1-39,
212 ASW
.Slice
(Document
(1), -- and append a blank space.
214 ASW
.Index
(ASW
.To_Unbounded_Wide_String
215 (ASW
.Slice
(Document
(1),
218 Ada
.Strings
.Wide_Maps
.To_Set
(Equiv
(' ')),
220 Ada
.Strings
.Backward
)) & Equiv
(' ');
222 Camera_Copy
(2) := -- Take characters 40-79.
223 ASW
.Slice
(Document
(1),
225 (ASW
.Index_Non_Blank
-- Should return 79
226 (ASW
.To_Unbounded_Wide_String
227 (ASW
.Slice
(Document
(1), -- Slice (40..79)
230 Ada
.Strings
.Backward
) + 39)); -- Increment since
234 Camera_Copy
(3)(1..9) := ASW
.Slice
(Document
(1), -- Characters 80-88
236 ASW
.Length
(Document
(1)));
239 -- Break the second unbounded wide string into the appropriate
240 -- length. It is only twelve characters in length, so the entire
241 -- unbounded wide string will be placed on one string of the output
244 Camera_Copy
(4)(1..ASW
.Length
(Document
(2))) :=
245 ASW
.To_Wide_String
(ASW
.Head
(Document
(2),
246 ASW
.Length
(Document
(2))));
248 end Create_Camera_Ready_Copy
;
254 function Valid_Proofread
(Draft
, Master
: Camera_Ready_Copy_Type
)
258 -- Evaluate wide strings for equality, using the operators defined
259 -- in package Ada.Strings.Wide_Unbounded. The less than/greater
260 -- than or equal comparisons should evaluate to "equals => True".
262 if ASW
.To_Unbounded_Wide_String
(Draft
(1)) = -- "="(WUnb,WUnb)
263 ASW
.To_Unbounded_Wide_String
(Master
(1)) and
264 ASW
.To_Unbounded_Wide_String
(Draft
(2)) <= -- "<="(WUnb,WUnb)
265 ASW
.To_Unbounded_Wide_String
(Master
(2)) and
266 ASW
.To_Unbounded_Wide_String
(Draft
(3)) >= -- ">="(WUnb,WUnb)
267 ASW
.To_Unbounded_Wide_String
(Master
(3)) and
268 ASW
.To_Unbounded_Wide_String
(Draft
(4)) = -- "="(WUnb,WUnb)
269 ASW
.To_Unbounded_Wide_String
(Master
(4))
284 -- Enter text into the unbounded wide string paragraphs of the document.
286 Enter_Text_Into_Document
(Pamphlet
);
289 -- Reformat the unbounded wide strings into fixed wide string format.
291 Create_Camera_Ready_Copy
(Document
=> Pamphlet
,
292 Camera_Copy
=> Camera_Ready_Copy
);
295 -- Verify the conversion process.
297 if not Valid_Proofread
(Draft
=> Camera_Ready_Copy
,
298 Master
=> TC_Finished_Product
)
300 Report
.Failed
("Incorrect unbounded wide string processing result");
305 when others => Report
.Failed
("Exception raised in Test_Block");