111
|
1 -- CXB3015.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 "+" and "-" functions with Pointer and ptrdiff_t
|
|
28 -- parameters that return Pointer values produce correct results,
|
|
29 -- based on the size of the array elements.
|
|
30 --
|
|
31 -- Check that the "-" function with two Pointer parameters that
|
|
32 -- returns a ptrdiff_t type parameter produces correct results,
|
|
33 -- based on the size of the array elements.
|
|
34 --
|
|
35 -- Check that each of the "+" and "-" functions above will
|
|
36 -- propagate Pointer_Error if a Pointer parameter is null.
|
|
37 --
|
|
38 -- Check that the Increment and Decrement procedures provide the
|
|
39 -- correct "pointer arithmetic" operations.
|
|
40 --
|
|
41 -- TEST DESCRIPTION:
|
|
42 -- This test checks that the functions "+" and "-", and the procedures
|
|
43 -- Increment and Decrement in the generic package Interfaces.C.Pointers
|
|
44 -- will allow the user to perform "pointer arithmetic" operations on
|
|
45 -- Pointer values.
|
|
46 -- Package Interfaces.C.Pointers is instantiated three times, for
|
|
47 -- short values, chars, and arrays of arrays. Pointers from each
|
|
48 -- instantiated package are then used to reference different elements
|
|
49 -- of array objects. Pointer arithmetic operations are performed on
|
|
50 -- these pointers, and the results of these operations are verified
|
|
51 -- against expected pointer positions along the referenced arrays.
|
|
52 -- The propagation of Pointer_Error is checked for when the function
|
|
53 -- Pointer parameter is null.
|
|
54 --
|
|
55 -- The following chart indicates the combinations of subprograms and
|
|
56 -- parameter types used in this test.
|
|
57 --
|
|
58 --
|
|
59 -- Short Char Array
|
|
60 -- --------------------------
|
|
61 -- "+" Pointer, ptrdiff_t | X | | X |
|
|
62 -- |--------------------------|
|
|
63 -- "+" ptrdiff_t, Pointer | X | | X |
|
|
64 -- |--------------------------|
|
|
65 -- "-" Pointer, ptrdiff_t | | X | X |
|
|
66 -- |--------------------------|
|
|
67 -- "-" Pointer, Pointer | | X | X |
|
|
68 -- |--------------------------|
|
|
69 -- Increment (Pointer) | X | | X |
|
|
70 -- |--------------------------|
|
|
71 -- Decrement (Pointer) | X | | X |
|
|
72 -- --------------------------
|
|
73 --
|
|
74 -- This test assumes that the following characters are all included
|
|
75 -- in the implementation defined type Interfaces.C.char:
|
|
76 -- ' ', and 'a'..'z'.
|
|
77 --
|
|
78 -- APPLICABILITY CRITERIA:
|
|
79 -- This test is applicable to all implementations that provide
|
|
80 -- package Interfaces.C.Pointers. If an implementation provides
|
|
81 -- package Interfaces.C.Pointers, this test must compile, execute, and
|
|
82 -- report "PASSED".
|
|
83 --
|
|
84 --
|
|
85 -- CHANGE HISTORY:
|
|
86 -- 26 Oct 95 SAIC Initial prerelease version.
|
|
87 -- 13 May 96 SAIC Incorporated reviewer comments for ACVC 2.1.
|
|
88 -- 26 Oct 96 SAIC Incorporated reviewer comments.
|
|
89 -- 06 Mar 00 RLB Repaired so that array of arrays component
|
|
90 -- type is statically constrained. (C does not have
|
|
91 -- an analog to an array of dynamically constrained
|
|
92 -- arrays.)
|
|
93
|
|
94 with Report;
|
|
95 with Ada.Exceptions;
|
|
96 with Interfaces.C.Pointers; -- N/A => ERROR
|
|
97
|
|
98 procedure CXB3015 is
|
|
99 begin
|
|
100
|
|
101 Report.Test ("CXB3015", "Check that +, -, Increment, and Decrement " &
|
|
102 "subprograms in Package Interfaces.C.Pointers " &
|
|
103 "produce correct results");
|
|
104
|
|
105 Test_Block:
|
|
106 declare
|
|
107
|
|
108 use Ada.Exceptions;
|
|
109 use type Interfaces.C.short;
|
|
110 use type Interfaces.C.size_t, Interfaces.C.ptrdiff_t;
|
|
111 use type Interfaces.C.char, Interfaces.C.char_array;
|
|
112
|
|
113 TC_Count : Interfaces.C.size_t;
|
|
114 TC_Increment : Interfaces.C.ptrdiff_t;
|
|
115 TC_ptrdiff_t : Interfaces.C.ptrdiff_t;
|
|
116 TC_Short : Interfaces.C.short := 0;
|
|
117 TC_Verbose : Boolean := False;
|
|
118 Constant_Min_Array_Size : constant Interfaces.C.size_t := 0;
|
|
119 Constant_Max_Array_Size : constant Interfaces.C.size_t := 20;
|
|
120 Min_Array_Size : Interfaces.C.size_t := Interfaces.C.size_t(
|
|
121 Report.Ident_Int(Integer(Constant_Min_Array_Size)));
|
|
122 Max_Array_Size : Interfaces.C.size_t := Interfaces.C.size_t(
|
|
123 Report.Ident_Int(Integer(Constant_Max_Array_Size)));
|
|
124 Min_size_t,
|
|
125 Max_size_t : Interfaces.C.size_t;
|
|
126 Short_Terminator : Interfaces.C.short := Interfaces.C.short'Last;
|
|
127 Alphabet : constant String := "abcdefghijklmnopqrstuvwxyz";
|
|
128
|
|
129
|
|
130 type Short_Array_Type is
|
|
131 array (Interfaces.C.size_t range <>) of aliased Interfaces.C.short;
|
|
132
|
|
133 type Constrained_Array_Type is
|
|
134 array (Min_Array_Size..Max_Array_Size) of aliased Interfaces.C.short;
|
|
135
|
|
136 type Static_Constrained_Array_Type is
|
|
137 array (Constant_Min_Array_Size .. Constant_Max_Array_Size) of
|
|
138 aliased Interfaces.C.short;
|
|
139
|
|
140 type Array_of_Arrays_Type is
|
|
141 array (Interfaces.C.size_t range <>) of aliased
|
|
142 Static_Constrained_Array_Type;
|
|
143
|
|
144
|
|
145 Short_Array : Short_Array_Type(Min_Array_Size..Max_Array_Size);
|
|
146
|
|
147 Constrained_Array : Constrained_Array_Type;
|
|
148
|
|
149 Terminator_Array : Static_Constrained_Array_Type :=
|
|
150 (others => Short_Terminator);
|
|
151
|
|
152 Ch_Array : Interfaces.C.char_array
|
|
153 (0..Interfaces.C.size_t(Alphabet'Length)) :=
|
|
154 Interfaces.C.To_C(Alphabet, True);
|
|
155
|
|
156 Array_of_Arrays : Array_of_Arrays_Type
|
|
157 (Min_Array_Size..Max_Array_Size);
|
|
158
|
|
159
|
|
160 package Short_Pointers is new
|
|
161 Interfaces.C.Pointers (Index => Interfaces.C.size_t,
|
|
162 Element => Interfaces.C.short,
|
|
163 Element_Array => Short_Array_Type,
|
|
164 Default_Terminator => Short_Terminator);
|
|
165
|
|
166 package Char_Pointers is new
|
|
167 Interfaces.C.Pointers (Interfaces.C.size_t,
|
|
168 Interfaces.C.char,
|
|
169 Element_Array => Interfaces.C.char_array,
|
|
170 Default_Terminator => Interfaces.C.nul);
|
|
171
|
|
172 package Array_Pointers is new
|
|
173 Interfaces.C.Pointers (Interfaces.C.size_t,
|
|
174 Static_Constrained_Array_Type,
|
|
175 Array_of_Arrays_Type,
|
|
176 Terminator_Array);
|
|
177
|
|
178
|
|
179 use Short_Pointers, Char_Pointers, Array_Pointers;
|
|
180
|
|
181 Short_Ptr : Short_Pointers.Pointer := Short_Array(0)'Access;
|
|
182 Char_Ptr : Char_Pointers.Pointer := Ch_Array(0)'Access;
|
|
183 Start_Char_Ptr : Char_Pointers.Pointer := Ch_Array(1)'Access;
|
|
184 End_Char_Ptr : Char_Pointers.Pointer := Ch_Array(10)'Access;
|
|
185 Array_Ptr : Array_Pointers.Pointer := Array_of_Arrays(0)'Access;
|
|
186 Start_Array_Ptr : Array_Pointers.Pointer := Array_of_Arrays(1)'Access;
|
|
187 End_Array_Ptr : Array_Pointers.Pointer := Array_of_Arrays(10)'Access;
|
|
188
|
|
189 begin
|
|
190
|
|
191 -- Provide initial values for the arrays that hold short int values.
|
|
192
|
|
193 for i in Min_Array_Size..Max_Array_Size-1 loop
|
|
194 Short_Array(i) := Interfaces.C.short(i);
|
|
195 for j in Min_Array_Size..Max_Array_Size loop
|
|
196 -- Initialize this "array of arrays" so that element (i)(0)
|
|
197 -- is different for each value of i.
|
|
198 Array_of_Arrays(i)(j) := TC_Short;
|
|
199 TC_Short := TC_Short + 1;
|
|
200 end loop;
|
|
201 end loop;
|
|
202
|
|
203 -- Set the final element of each array object to be the "terminator"
|
|
204 -- element used in the instantiations above.
|
|
205
|
|
206 Short_Array(Max_Array_Size) := Short_Terminator;
|
|
207 Array_of_Arrays(Max_Array_Size) := Terminator_Array;
|
|
208
|
|
209 -- Check starting pointer positions.
|
|
210
|
|
211 if Short_Ptr.all /= 0 or
|
|
212 Char_Ptr.all /= Ch_Array(0) or
|
|
213 Array_Ptr.all /= Array_of_Arrays(0)
|
|
214 then
|
|
215 Report.Failed("Incorrect initial value for the first " &
|
|
216 "Short_Array, Ch_Array, or Array_of_Array values");
|
|
217 end if;
|
|
218
|
|
219
|
|
220 -- Check that both versions of the "+" function with Pointer and
|
|
221 -- ptrdiff_t parameters, that return a Pointer value, produce correct
|
|
222 -- results, based on the size of the array elements.
|
|
223
|
|
224 for i in Min_Array_Size + 1 .. Max_Array_Size loop
|
|
225
|
|
226 if Integer(i)/2*2 /= Integer(i) then -- Odd numbered loops.
|
|
227 -- Pointer + ptrdiff_t, increment by 1.
|
|
228 Short_Ptr := Short_Ptr + 1;
|
|
229 else -- Even numbered loops.
|
|
230 -- ptrdiff_t + Pointer, increment by 1.
|
|
231 Short_Ptr := 1 + Short_Ptr;
|
|
232 end if;
|
|
233
|
|
234 if Short_Ptr.all /= Short_Array(i) then
|
|
235 Report.Failed("Incorrect value returned following use " &
|
|
236 "of the function +, incrementing by 1, " &
|
|
237 "array position : " & Integer'Image(Integer(i)));
|
|
238 if not TC_Verbose then
|
|
239 exit;
|
|
240 end if;
|
|
241 end if;
|
|
242 end loop;
|
|
243
|
|
244 Array_Ptr := Array_of_Arrays(Min_Array_Size)'Access;
|
|
245 TC_Count := Min_Array_Size;
|
|
246 TC_Increment := 3;
|
|
247 while TC_Count+Interfaces.C.size_t(TC_Increment) < Max_Array_Size loop
|
|
248
|
|
249 if Integer(TC_Count)/2*2 /= Integer(TC_Count) then
|
|
250 -- Odd numbered loops.
|
|
251 -- Pointer + ptrdiff_t, increment by 3.
|
|
252 Array_Ptr := Array_Pointers."+"(Array_Ptr, TC_Increment);
|
|
253 else
|
|
254 -- Odd numbered loops.
|
|
255 -- ptrdiff_t + Pointer, increment by 3.
|
|
256 Array_Ptr := Array_Pointers."+"(Left => TC_Increment,
|
|
257 Right => Array_Ptr);
|
|
258 end if;
|
|
259
|
|
260 if Array_Ptr.all /=
|
|
261 Array_of_Arrays(TC_Count+Interfaces.C.size_t(TC_Increment))
|
|
262 then
|
|
263 Report.Failed("Incorrect value returned following use " &
|
|
264 "of the function +, incrementing by " &
|
|
265 Integer'Image(Integer(TC_Increment)) &
|
|
266 ", array position : " &
|
|
267 Integer'Image(Integer(TC_Count) +
|
|
268 Integer(TC_Increment)));
|
|
269 if not TC_Verbose then
|
|
270 exit;
|
|
271 end if;
|
|
272 end if;
|
|
273
|
|
274 TC_Count := TC_Count + Interfaces.C.size_t(TC_Increment);
|
|
275 end loop;
|
|
276
|
|
277
|
|
278
|
|
279 -- Check that the "-" function with Pointer and ptrdiff_t parameters,
|
|
280 -- that returns a Pointer result, produces correct results, based
|
|
281 -- on the size of the array elements.
|
|
282
|
|
283 -- Set the pointer to the last element in the char_array, which is a
|
|
284 -- nul char.
|
|
285 Char_Ptr := Ch_Array(Interfaces.C.size_t(Alphabet'Length))'Access;
|
|
286
|
|
287 if Char_Ptr.all /= Interfaces.C.nul then
|
|
288 Report.Failed("Incorrect initial value for the last " &
|
|
289 "Ch_Array value");
|
|
290 end if;
|
|
291
|
|
292 Min_size_t := 1;
|
|
293 Max_size_t := Interfaces.C.size_t(Alphabet'Length);
|
|
294
|
|
295 for i in reverse Min_size_t..Max_size_t loop
|
|
296
|
|
297 -- Subtract 1 from the pointer; it should now point to the previous
|
|
298 -- element in the array.
|
|
299 Char_Ptr := Char_Ptr - 1;
|
|
300
|
|
301 if Char_Ptr.all /= Ch_Array(i-1) then
|
|
302 Report.Failed("Incorrect value returned following use " &
|
|
303 "of the function '-' with char element values, " &
|
|
304 "array position : " & Integer'Image(Integer(i-1)));
|
|
305 if not TC_Verbose then
|
|
306 exit;
|
|
307 end if;
|
|
308 end if;
|
|
309 end loop;
|
|
310
|
|
311 Array_Ptr := Array_of_Arrays(Max_Array_Size)'Access;
|
|
312 TC_Count := Max_Array_Size;
|
|
313 TC_Increment := 3;
|
|
314 while TC_Count > Min_Array_Size+Interfaces.C.size_t(TC_Increment) loop
|
|
315
|
|
316 -- Decrement the pointer by 3.
|
|
317 Array_Ptr := Array_Pointers."-"(Array_Ptr, Right => 3);
|
|
318
|
|
319 if Array_Ptr.all /=
|
|
320 Array_of_Arrays(TC_Count - Interfaces.C.size_t(TC_Increment))
|
|
321 then
|
|
322 Report.Failed("Incorrect value returned following use " &
|
|
323 "of the function -, decrementing by " &
|
|
324 Integer'Image(Integer(TC_Increment)) &
|
|
325 ", array position : " &
|
|
326 Integer'Image(Integer(TC_Count-3)));
|
|
327 if not TC_Verbose then
|
|
328 exit;
|
|
329 end if;
|
|
330 end if;
|
|
331
|
|
332 TC_Count := TC_Count - Interfaces.C.size_t(TC_Increment);
|
|
333 end loop;
|
|
334
|
|
335
|
|
336
|
|
337 -- Check that the "-" function with two Pointer parameters, that
|
|
338 -- returns a ptrdiff_t type result, produces correct results,
|
|
339 -- based on the size of the array elements.
|
|
340
|
|
341 TC_ptrdiff_t := 9;
|
|
342 if Char_Pointers."-"(Left => End_Char_Ptr,
|
|
343 Right => Start_Char_Ptr) /= TC_ptrdiff_t
|
|
344 then
|
|
345 Report.Failed("Incorrect result from pointer-pointer " &
|
|
346 "subtraction - 1");
|
|
347 end if;
|
|
348
|
|
349 Start_Char_Ptr := Ch_Array(1)'Access;
|
|
350 End_Char_Ptr := Ch_Array(25)'Access;
|
|
351
|
|
352 TC_ptrdiff_t := 24;
|
|
353 if Char_Pointers."-"(End_Char_Ptr,
|
|
354 Right => Start_Char_Ptr) /= TC_ptrdiff_t
|
|
355 then
|
|
356 Report.Failed("Incorrect result from pointer-pointer " &
|
|
357 "subtraction - 2");
|
|
358 end if;
|
|
359
|
|
360 TC_ptrdiff_t := 9;
|
|
361 if Array_Pointers."-"(End_Array_Ptr,
|
|
362 Start_Array_Ptr) /= TC_ptrdiff_t
|
|
363 then
|
|
364 Report.Failed("Incorrect result from pointer-pointer " &
|
|
365 "subtraction - 3");
|
|
366 end if;
|
|
367
|
|
368 Start_Array_Ptr := Array_of_Arrays(Min_Array_Size)'Access;
|
|
369 End_Array_Ptr := Array_of_Arrays(Max_Array_Size)'Access;
|
|
370
|
|
371 TC_ptrdiff_t := Interfaces.C.ptrdiff_t(Max_Array_Size) -
|
|
372 Interfaces.C.ptrdiff_t(Min_Array_Size);
|
|
373 if End_Array_Ptr - Start_Array_Ptr /= TC_ptrdiff_t then
|
|
374 Report.Failed("Incorrect result from pointer-pointer " &
|
|
375 "subtraction - 4");
|
|
376 end if;
|
|
377
|
|
378
|
|
379
|
|
380 -- Check that the Increment procedure produces correct results,
|
|
381 -- based upon the size of the array elements.
|
|
382
|
|
383 Short_Ptr := Short_Array(0)'Access;
|
|
384
|
|
385 for i in Min_Array_Size + 1 .. Max_Array_Size loop
|
|
386 -- Increment the value of the Pointer; it should now point
|
|
387 -- to the next element in the array.
|
|
388 Increment(Ref => Short_Ptr);
|
|
389
|
|
390 if Short_Ptr.all /= Short_Array(i) then
|
|
391 Report.Failed("Incorrect value returned following use " &
|
|
392 "of the Procedure Increment on pointer to an " &
|
|
393 "array of short values, array position : " &
|
|
394 Integer'Image(Integer(i)));
|
|
395 if not TC_Verbose then
|
|
396 exit;
|
|
397 end if;
|
|
398 end if;
|
|
399 end loop;
|
|
400
|
|
401 Array_Ptr := Array_of_Arrays(0)'Access;
|
|
402
|
|
403 for i in Min_Array_Size + 1 .. Max_Array_Size loop
|
|
404 -- Increment the value of the Pointer; it should now point
|
|
405 -- to the next element in the array.
|
|
406 Increment(Array_Ptr);
|
|
407
|
|
408 if Array_Ptr.all /= Array_of_Arrays(i) then
|
|
409 Report.Failed("Incorrect value returned following use " &
|
|
410 "of the Procedure Increment on an array of " &
|
|
411 "arrays, array position : " &
|
|
412 Integer'Image(Integer(i)));
|
|
413 if not TC_Verbose then
|
|
414 exit;
|
|
415 end if;
|
|
416 end if;
|
|
417 end loop;
|
|
418
|
|
419
|
|
420 -- Check that the Decrement procedure produces correct results,
|
|
421 -- based upon the size of the array elements.
|
|
422
|
|
423 Short_Ptr := Short_Array(Max_Array_Size)'Access;
|
|
424
|
|
425 for i in reverse Min_Array_Size .. Max_Array_Size - 1 loop
|
|
426 -- Decrement the value of the Pointer; it should now point
|
|
427 -- to the previous element in the array.
|
|
428 Decrement(Ref => Short_Ptr);
|
|
429
|
|
430 if Short_Ptr.all /= Short_Array(i) then
|
|
431 Report.Failed("Incorrect value returned following use " &
|
|
432 "of the Procedure Decrement on pointer to an " &
|
|
433 "array of short values, array position : " &
|
|
434 Integer'Image(Integer(i)));
|
|
435 if not TC_Verbose then
|
|
436 exit;
|
|
437 end if;
|
|
438 end if;
|
|
439 end loop;
|
|
440
|
|
441 Array_Ptr := Array_of_Arrays(Max_Array_Size)'Access;
|
|
442
|
|
443 for i in reverse Min_Array_Size .. Max_Array_Size - 1 loop
|
|
444 -- Decrement the value of the Pointer; it should now point
|
|
445 -- to the previous array element.
|
|
446 Decrement(Array_Ptr);
|
|
447
|
|
448 if Array_Ptr.all /= Array_of_Arrays(i) then
|
|
449 Report.Failed("Incorrect value returned following use " &
|
|
450 "of the Procedure Decrement on an array of " &
|
|
451 "arrays, array position : " &
|
|
452 Integer'Image(Integer(i)));
|
|
453 if not TC_Verbose then
|
|
454 exit;
|
|
455 end if;
|
|
456 end if;
|
|
457 end loop;
|
|
458
|
|
459
|
|
460
|
|
461 -- Check that each of the "+" and "-" functions above will
|
|
462 -- propagate Pointer_Error if a Pointer parameter is null.
|
|
463
|
|
464 begin
|
|
465 Short_Ptr := null;
|
|
466 Short_Ptr := Short_Ptr + 4;
|
|
467 Report.Failed("Pointer_Error not raised by Function + when " &
|
|
468 "the Pointer parameter is null");
|
|
469 if Short_Ptr /= null then -- To avoid optimization.
|
|
470 Report.Comment("This should never be printed");
|
|
471 end if;
|
|
472 exception
|
|
473 when Short_Pointers.Pointer_Error => null; -- OK, expected exception.
|
|
474 when others =>
|
|
475 Report.Failed("Unexpected exception raised by Function + " &
|
|
476 "when the Pointer parameter is null");
|
|
477 end;
|
|
478
|
|
479
|
|
480 begin
|
|
481 Char_Ptr := null;
|
|
482 Char_Ptr := Char_Ptr - 1;
|
|
483 Report.Failed("Pointer_Error not raised by Function - when " &
|
|
484 "the Pointer parameter is null");
|
|
485 if Char_Ptr /= null then -- To avoid optimization.
|
|
486 Report.Comment("This should never be printed");
|
|
487 end if;
|
|
488 exception
|
|
489 when Char_Pointers.Pointer_Error => null; -- OK, expected exception.
|
|
490 when others =>
|
|
491 Report.Failed("Unexpected exception raised by Function - " &
|
|
492 "when the Pointer parameter is null");
|
|
493 end;
|
|
494
|
|
495
|
|
496 begin
|
|
497 Array_Ptr := null;
|
|
498 Decrement(Array_Ptr);
|
|
499 Report.Failed("Pointer_Error not raised by Procedure Decrement " &
|
|
500 "when the Pointer parameter is null");
|
|
501 if Array_Ptr /= null then -- To avoid optimization.
|
|
502 Report.Comment("This should never be printed");
|
|
503 end if;
|
|
504 exception
|
|
505 when Array_Pointers.Pointer_Error => null; -- OK, expected exception.
|
|
506 when others =>
|
|
507 Report.Failed("Unexpected exception raised by Procedure " &
|
|
508 "Decrement when the Pointer parameter is null");
|
|
509 end;
|
|
510
|
|
511
|
|
512 exception
|
|
513 when The_Error : others =>
|
|
514 Report.Failed ("The following exception was raised in the " &
|
|
515 "Test_Block: " & Exception_Name(The_Error));
|
|
516 end Test_Block;
|
|
517
|
|
518 Report.Result;
|
|
519
|
|
520 end CXB3015;
|