comparison gcc/testsuite/ada/acats/tests/cxb/cxb2001.a @ 111:04ced10e8804

gcc 7
author kono
date Fri, 27 Oct 2017 22:46:09 +0900
parents
children
comparison
equal deleted inserted replaced
68:561a7518be6b 111:04ced10e8804
1 -- CXB2001.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 subprograms Shift_Left, Shift_Right,
28 -- Shift_Right_Arithmetic, Rotate_Left, and Rotate_Right are available
29 -- and produce correct results for values of signed and modular
30 -- integer types of 8 bits.
31 --
32 -- TEST DESCRIPTION:
33 -- This test uses the shift and rotate functions of package Interfaces
34 -- with a modular type representative of 8 bits. The functions
35 -- are used as the right hand of assignment statements, as part of
36 -- conditional statements, and as arguments in other function calls.
37 --
38 -- A check is performed in the test to determine whether the bit
39 -- ordering method used by the machine/implementation is high-order
40 -- first ("Big Endian") or low-order first ("Little Endian"). The
41 -- specific subtests use this information to evaluate the results of
42 -- each of the functions under test.
43 --
44 -- Note: In the string associated with each Report.Failed statement, the
45 -- acronym BE refers to Big Endian, LE refers to Little Endian.
46 --
47 -- APPLICABILITY CRITERIA:
48 -- This test is applicable to all implementations that support signed
49 -- and modular integer types of 8 bits.
50 --
51 --
52 -- CHANGE HISTORY:
53 -- 21 Aug 95 SAIC Initial prerelease version.
54 -- 07 May 96 SAIC Incorporated reviewer comments for ACVC 2.1.
55 --
56 --!
57
58 with Report;
59 with Interfaces;
60 with Ada.Exceptions;
61
62 procedure CXB2001 is
63 begin
64
65 Report.Test ("CXB2001",
66 "Check that subprograms Shift_Left, Shift_Right, " &
67 "Shift_Right_Arithmetic, Rotate_Left, and Rotate_Right " &
68 "produce correct results for values of signed and " &
69 "modular integer types of 8 bits");
70
71 Test_Block:
72 declare
73
74 use Ada.Exceptions;
75 use Interfaces;
76
77 TC_Amount : Natural := Natural'First;
78 Big_Endian : Boolean := False;
79
80 -- Range of type Unsigned_8 is 0..255 (0..Modulus-1).
81 TC_Val_Unsigned_8,
82 TC_Result_Unsigned_8 : Unsigned_8 := Unsigned_8'First;
83
84 begin
85
86 -- Determine whether the machine uses high-order first or low-order
87 -- first bit ordering.
88 -- On a high-order first machine, bit zero of a storage element is
89 -- the most significant bit (interpreting the sequence of bits that
90 -- represent a component as an unsigned integer value).
91 -- On a low-order first machine, bit zero is the least significant.
92 -- In this check, a right shift of one place on a Big Endian machine
93 -- will yield a result of one, while on a Little Endian machine the
94 -- result would be four.
95
96 TC_Val_Unsigned_8 := 2;
97 Big_Endian := (Shift_Right(TC_Val_Unsigned_8, 1) = 1);
98
99
100 -- Note: The shifting and rotating subprograms operate on a bit-by-bit
101 -- basis, using the binary representation of the value of the
102 -- operands to yield a binary representation for the result.
103
104 -- Function Shift_Left.
105
106 if Big_Endian then -- High-order first bit ordering.
107
108 TC_Amount := 1;
109 TC_Val_Unsigned_8 := Unsigned_8'Last; -- 255.
110 TC_Result_Unsigned_8 := Shift_Left(Value => TC_Val_Unsigned_8,
111 Amount => TC_Amount);
112 if TC_Result_Unsigned_8 /= 254 then
113 Report.Failed("Incorrect result from BE Shift_Left - 1");
114 end if;
115
116 if Shift_Left(TC_Val_Unsigned_8, 2) /= 252 or
117 Shift_Left(TC_Val_Unsigned_8, 3) /= 248 or
118 Shift_Left(TC_Val_Unsigned_8, 5) /= 224 or
119 Shift_Left(TC_Val_Unsigned_8, 8) /= 0 or
120 Shift_Left(TC_Val_Unsigned_8, 9) /= 0 or
121 Shift_Left(TC_Val_Unsigned_8, 0) /= TC_Val_Unsigned_8
122 then
123 Report.Failed("Incorrect result from BE Shift_Left - 2");
124 end if;
125
126 TC_Val_Unsigned_8 := 1;
127 if Shift_Left(TC_Val_Unsigned_8, 1) /= 2 or
128 Shift_Left(TC_Val_Unsigned_8, Amount => 3) /= 8
129 then
130 Report.Failed("Incorrect result from BE Shift_Left - 3");
131 end if;
132
133 TC_Val_Unsigned_8 := 7;
134 if Shift_Left(TC_Val_Unsigned_8, Amount => 4) /= 112 or
135 Shift_Left(Shift_Left(TC_Val_Unsigned_8, 7), 1) /= 0
136 then
137 Report.Failed("Incorrect result from BE Shift_Left - 4");
138 end if;
139
140 else -- Low-order first bit ordering.
141
142 TC_Amount := 1;
143 TC_Val_Unsigned_8 := Unsigned_8'Last; -- 255.
144 TC_Result_Unsigned_8 := Shift_Left(TC_Val_Unsigned_8, TC_Amount);
145
146 if TC_Result_Unsigned_8 /= 127 then
147 Report.Failed("Incorrect result from LE Shift_Left - 1");
148 end if;
149
150 if Shift_Left(TC_Val_Unsigned_8, 2) /= 63 or
151 Shift_Left(TC_Val_Unsigned_8, 3) /= 31 or
152 Shift_Left(TC_Val_Unsigned_8, 5) /= 7 or
153 Shift_Left(TC_Val_Unsigned_8, 8) /= 0 or
154 Shift_Left(TC_Val_Unsigned_8, 0) /= TC_Val_Unsigned_8
155 then
156 Report.Failed("Incorrect result from LE Shift_Left - 2");
157 end if;
158
159 TC_Val_Unsigned_8 := 1;
160 if Shift_Left(TC_Val_Unsigned_8, 1) /= 0 or
161 Shift_Left(TC_Val_Unsigned_8, 7) /= 0
162 then
163 Report.Failed("Incorrect result from LE Shift_Left - 3");
164 end if;
165
166 TC_Val_Unsigned_8 := 129;
167 if Shift_Left(TC_Val_Unsigned_8, 4) /= 8 or
168 Shift_Left(Shift_Left(TC_Val_Unsigned_8, 7), 1) /= 0
169 then
170 Report.Failed("Incorrect result from LE Shift_Left - 4");
171 end if;
172
173 end if;
174
175
176
177 -- Function Shift_Right.
178
179 if Big_Endian then -- High-order first bit ordering.
180
181 TC_Amount := 1;
182 TC_Val_Unsigned_8 := Unsigned_8'Last; -- 255.
183 TC_Result_Unsigned_8 := Shift_Right(TC_Val_Unsigned_8, TC_Amount);
184
185 if TC_Result_Unsigned_8 /= 127 then
186 Report.Failed("Incorrect result from BE Shift_Right - 1");
187 end if;
188
189 if Shift_Right(TC_Val_Unsigned_8, 2) /= 63 or
190 Shift_Right(TC_Val_Unsigned_8, 3) /= 31 or
191 Shift_Right(TC_Val_Unsigned_8, 5) /= 7 or
192 Shift_Right(TC_Val_Unsigned_8, 8) /= 0 or
193 Shift_Right(TC_Val_Unsigned_8, 0) /= TC_Val_Unsigned_8
194 then
195 Report.Failed("Incorrect result from BE Shift_Right - 2");
196 end if;
197
198 TC_Val_Unsigned_8 := 1;
199 if Shift_Right(TC_Val_Unsigned_8, 1) /= 0 or
200 Shift_Right(TC_Val_Unsigned_8, 7) /= 0
201 then
202 Report.Failed("Incorrect result from BE Shift_Right - 3");
203 end if;
204
205 TC_Val_Unsigned_8 := 129;
206 if Shift_Right(TC_Val_Unsigned_8, 4) /= 8 or
207 Shift_Right(Shift_Right(TC_Val_Unsigned_8, 7), 1) /= 0
208 then
209 Report.Failed("Incorrect result from BE Shift_Right - 4");
210 end if;
211
212 else -- Low-order first bit ordering.
213
214 TC_Amount := 1;
215 TC_Val_Unsigned_8 := Unsigned_8'Last; -- 255.
216 TC_Result_Unsigned_8 := Shift_Right(Value => TC_Val_Unsigned_8,
217 Amount => TC_Amount);
218 if TC_Result_Unsigned_8 /= 254 then
219 Report.Failed("Incorrect result from LE Shift_Right - 1");
220 end if;
221
222 if Shift_Right(TC_Val_Unsigned_8, 2) /= 252 or
223 Shift_Right(TC_Val_Unsigned_8, 3) /= 248 or
224 Shift_Right(TC_Val_Unsigned_8, 5) /= 224 or
225 Shift_Right(TC_Val_Unsigned_8, 8) /= 0 or
226 Shift_Right(TC_Val_Unsigned_8, 9) /= 0 or
227 Shift_Right(TC_Val_Unsigned_8, 0) /= TC_Val_Unsigned_8
228 then
229 Report.Failed("Incorrect result from LE Shift_Right - 2");
230 end if;
231
232 TC_Val_Unsigned_8 := 1;
233 if Shift_Right(TC_Val_Unsigned_8, 1) /= 2 or
234 Shift_Right(TC_Val_Unsigned_8, Amount => 3) /= 8
235 then
236 Report.Failed("Incorrect result from LE Shift_Right - 3");
237 end if;
238
239 TC_Val_Unsigned_8 := 7;
240 if Shift_Right(TC_Val_Unsigned_8, Amount => 4) /= 112 or
241 Shift_Right(Shift_Right(TC_Val_Unsigned_8, 7), 1) /= 0
242 then
243 Report.Failed("Incorrect result from LE Shift_Right - 4");
244 end if;
245
246 end if;
247
248
249
250 -- Tests of Shift_Left and Shift_Right in combination.
251
252 if Big_Endian then -- High-order first bit ordering.
253
254 TC_Val_Unsigned_8 := 32;
255
256 if Shift_Left(Shift_Right(TC_Val_Unsigned_8, 2), 2) /=
257 TC_Val_Unsigned_8 or
258 Shift_Left(Shift_Right(TC_Val_Unsigned_8, 1), 3) /= 128 or
259 Shift_Right(Shift_Left(TC_Val_Unsigned_8, 2), 6) /= 2 or
260 Shift_Right(Shift_Left(TC_Val_Unsigned_8, 2), 8) /= 0
261 then
262 Report.Failed("Incorrect result from BE Shift_Left - " &
263 "Shift_Right functions used in combination");
264 end if;
265
266 else -- Low-order first bit ordering.
267
268 TC_Val_Unsigned_8 := 32;
269
270 if Shift_Left(Shift_Right(TC_Val_Unsigned_8, 2), 2) /=
271 TC_Val_Unsigned_8 or
272 Shift_Left(Shift_Right(TC_Val_Unsigned_8, 1), 3) /= 8 or
273 Shift_Right(Shift_Left(TC_Val_Unsigned_8, 2), 3) /= 64 or
274 Shift_Right(Shift_Left(TC_Val_Unsigned_8, 2), 4) /= 128
275 then
276 Report.Failed("Incorrect result from LE Shift_Left - " &
277 "Shift_Right functions used in combination");
278 end if;
279
280 end if;
281
282
283
284 -- Function Shift_Right_Arithmetic.
285
286 if Big_Endian then -- High-order first bit ordering.
287
288 -- Case where the parameter Value is less than
289 -- one half of the modulus. Zero bits will be shifted in.
290 -- Modulus of type Unsigned_8 is 256; half of the modulus is 128.
291
292 TC_Amount := 1;
293 TC_Val_Unsigned_8 := 127; -- Less than one half of modulus.
294 TC_Result_Unsigned_8 := Shift_Right_Arithmetic(TC_Val_Unsigned_8,
295 TC_Amount);
296 if TC_Result_Unsigned_8 /= 63 then
297 Report.Failed
298 ("Incorrect result from BE Shift_Right_Arithmetic - 1");
299 end if;
300
301 if Shift_Right_Arithmetic(TC_Val_Unsigned_8, 2) /= 31 or
302 Shift_Right_Arithmetic(TC_Val_Unsigned_8, 3) /= 15 or
303 Shift_Right_Arithmetic(TC_Val_Unsigned_8, 5) /= 3 or
304 Shift_Right_Arithmetic(TC_Val_Unsigned_8, 8) /= 0 or
305 Shift_Right_Arithmetic(TC_Val_Unsigned_8, 0) /= TC_Val_Unsigned_8
306 then
307 Report.Failed
308 ("Incorrect result from BE Shift_Right_Arithmetic - 2");
309 end if;
310
311 TC_Val_Unsigned_8 := 1;
312 if Shift_Right_Arithmetic(TC_Val_Unsigned_8, Amount => 1) /= 0 or
313 Shift_Right_Arithmetic(TC_Val_Unsigned_8, 3) /= 0
314 then
315 Report.Failed
316 ("Incorrect result from BE Shift_Right_Arithmetic - 3");
317 end if;
318
319 -- Case where the parameter Value is greater than or equal to
320 -- one half of the modulus. One bits will be shifted in.
321
322 TC_Amount := 1;
323 TC_Val_Unsigned_8 := 128; -- One half of modulus.
324 TC_Result_Unsigned_8 := Shift_Right_Arithmetic(TC_Val_Unsigned_8,
325 Amount => TC_Amount);
326 if TC_Result_Unsigned_8 /= 192 then
327 Report.Failed
328 ("Incorrect result from BE Shift_Right_Arithmetic - 4");
329 end if;
330
331 TC_Amount := 1;
332 TC_Val_Unsigned_8 := 129; -- Greater than one half of modulus.
333 TC_Result_Unsigned_8 := Shift_Right_Arithmetic(TC_Val_Unsigned_8,
334 Amount => TC_Amount);
335 if TC_Result_Unsigned_8 /= 192 then
336 Report.Failed
337 ("Incorrect result from BE Shift_Right_Arithmetic - 5");
338 end if;
339
340 if Shift_Right_Arithmetic(TC_Val_Unsigned_8, 2) /= 224 or
341 Shift_Right_Arithmetic(TC_Val_Unsigned_8, 3) /= 240 or
342 Shift_Right_Arithmetic(TC_Val_Unsigned_8, 5) /= 252 or
343 Shift_Right_Arithmetic(TC_Val_Unsigned_8, 7) /= Unsigned_8'Last or
344 Shift_Right_Arithmetic(TC_Val_Unsigned_8, 0) /= TC_Val_Unsigned_8
345 then
346 Report.Failed
347 ("Incorrect result from BE Shift_Right_Arithmetic - 6");
348 end if;
349
350 TC_Val_Unsigned_8 := Unsigned_8'Last;
351 if Shift_Right_Arithmetic(TC_Val_Unsigned_8, 1) /=
352 Unsigned_8'Last
353 then
354 Report.Failed
355 ("Incorrect result from BE Shift_Right_Arithmetic - 7");
356 end if;
357
358 else -- Low-order first bit ordering
359
360 -- Case where the parameter Value is less than
361 -- one half of the modulus. Zero bits will be shifted in.
362
363 TC_Amount := 1;
364 TC_Val_Unsigned_8 := 127; -- Less than one half of modulus.
365 TC_Result_Unsigned_8 := Shift_Right_Arithmetic(TC_Val_Unsigned_8,
366 TC_Amount);
367 if TC_Result_Unsigned_8 /= 254 then
368 Report.Failed
369 ("Incorrect result from LE Shift_Right_Arithmetic - 1");
370 end if;
371
372 TC_Val_Unsigned_8 := 2;
373 if Shift_Right_Arithmetic(TC_Val_Unsigned_8, 2) /= 8 or
374 Shift_Right_Arithmetic(TC_Val_Unsigned_8, 3) /= 16 or
375 Shift_Right_Arithmetic(TC_Val_Unsigned_8, 5) /= 64 or
376 Shift_Right_Arithmetic(TC_Val_Unsigned_8, 8) /= 0 or
377 Shift_Right_Arithmetic(TC_Val_Unsigned_8, 0) /= TC_Val_Unsigned_8
378 then
379 Report.Failed
380 ("Incorrect result from LE Shift_Right_Arithmetic - 2");
381 end if;
382
383 TC_Val_Unsigned_8 := 64;
384 if Shift_Right_Arithmetic(TC_Val_Unsigned_8, Amount => 1) /= 128 or
385 Shift_Right_Arithmetic(TC_Val_Unsigned_8, 3) /= 0
386 then
387 Report.Failed
388 ("Incorrect result from LE Shift_Right_Arithmetic - 3");
389 end if;
390
391 -- Case where the parameter Value is greater than or equal to
392 -- one half of the modulus. One bits will be shifted in.
393
394 TC_Amount := 1;
395 TC_Val_Unsigned_8 := 128; -- One half of modulus.
396 TC_Result_Unsigned_8 := Shift_Right_Arithmetic(TC_Val_Unsigned_8,
397 Amount => TC_Amount);
398
399 if TC_Result_Unsigned_8 /= 3 then
400 Report.Failed
401 ("Incorrect result from LE Shift_Right_Arithmetic - 4");
402 end if;
403
404 TC_Amount := 1;
405 TC_Val_Unsigned_8 := 129; -- Greater than one half of modulus.
406 TC_Result_Unsigned_8 := Shift_Right_Arithmetic(TC_Val_Unsigned_8,
407 Amount => TC_Amount);
408
409 if TC_Result_Unsigned_8 /= 3 then
410 Report.Failed
411 ("Incorrect result from LE Shift_Right_Arithmetic - 5");
412 end if;
413
414 TC_Val_Unsigned_8 := 135; -- Greater than one half of modulus.
415 if Shift_Right_Arithmetic(TC_Val_Unsigned_8, 2) /= 31 or
416 Shift_Right_Arithmetic(TC_Val_Unsigned_8, 3) /= 63 or
417 Shift_Right_Arithmetic(TC_Val_Unsigned_8, 5) /= Unsigned_8'Last or
418 Shift_Right_Arithmetic(TC_Val_Unsigned_8, 7) /= Unsigned_8'Last or
419 Shift_Right_Arithmetic(TC_Val_Unsigned_8, 0) /= TC_Val_Unsigned_8
420 then
421 Report.Failed
422 ("Incorrect result from LE Shift_Right_Arithmetic - 6");
423 end if;
424
425 TC_Val_Unsigned_8 := Unsigned_8'Last;
426 if Shift_Right_Arithmetic(TC_Val_Unsigned_8, 1) /=
427 Unsigned_8'Last
428 then
429 Report.Failed
430 ("Incorrect result from LE Shift_Right_Arithmetic - 7");
431 end if;
432
433 end if;
434
435
436
437 -- Function Rotate_Left.
438
439 if Big_Endian then -- High-order first bit ordering.
440
441 TC_Amount := 1;
442 TC_Val_Unsigned_8 := 129;
443 TC_Result_Unsigned_8 := Rotate_Left(Value => TC_Val_Unsigned_8,
444 Amount => TC_Amount);
445 if TC_Result_Unsigned_8 /= 3 then
446 Report.Failed("Incorrect result from BE Rotate_Left - 1");
447 end if;
448
449 if Rotate_Left(TC_Val_Unsigned_8, 2) /= 6 or
450 Rotate_Left(TC_Val_Unsigned_8, 3) /= 12 or
451 Rotate_Left(TC_Val_Unsigned_8, 5) /= 48 or
452 Rotate_Left(TC_Val_Unsigned_8, 8) /= 129 or
453 Rotate_Left(TC_Val_Unsigned_8, 0) /= TC_Val_Unsigned_8
454 then
455 Report.Failed("Incorrect result from BE Rotate_Left - 2");
456 end if;
457
458 TC_Val_Unsigned_8 := 1;
459 if Rotate_Left(Value => TC_Val_Unsigned_8, Amount => 1) /= 2 or
460 Rotate_Left(TC_Val_Unsigned_8, Amount => 3) /= 8
461 then
462 Report.Failed("Incorrect result from BE Rotate_Left - 3");
463 end if;
464
465 TC_Val_Unsigned_8 := 82;
466 if Rotate_Left(TC_Val_Unsigned_8, Amount => 4) /= 37 or
467 Rotate_Left(Rotate_Left(TC_Val_Unsigned_8, 7), 1) /= 82
468 then
469 Report.Failed("Incorrect result from BE Rotate_Left - 4");
470 end if;
471
472 else -- Low-order first bit ordering.
473
474 TC_Amount := 1;
475 TC_Val_Unsigned_8 := 1;
476 TC_Result_Unsigned_8 := Rotate_Left(TC_Val_Unsigned_8, TC_Amount);
477
478 if TC_Result_Unsigned_8 /= 128 then
479 Report.Failed("Incorrect result from LE Rotate_Left - 1");
480 end if;
481
482 TC_Val_Unsigned_8 := 15;
483 if Rotate_Left(TC_Val_Unsigned_8, 2) /= 195 or
484 Rotate_Left(TC_Val_Unsigned_8, 3) /= 225 or
485 Rotate_Left(TC_Val_Unsigned_8, 5) /= 120 or
486 Rotate_Left(TC_Val_Unsigned_8, 8) /= TC_Val_Unsigned_8 or
487 Rotate_Left(TC_Val_Unsigned_8, 0) /= TC_Val_Unsigned_8
488 then
489 Report.Failed("Incorrect result from LE Rotate_Left - 2");
490 end if;
491
492 TC_Val_Unsigned_8 := Unsigned_8'Last;
493 if Rotate_Left(TC_Val_Unsigned_8, 1) /= Unsigned_8'Last then
494 Report.Failed("Incorrect result from LE Rotate_Left - 3");
495 end if;
496
497 TC_Val_Unsigned_8 := 12;
498 if Rotate_Left(TC_Val_Unsigned_8, 1) /= 6 or
499 Rotate_Left(TC_Val_Unsigned_8, 3) /= 129
500 then
501 Report.Failed("Incorrect result from LE Rotate_Left - 4");
502 end if;
503
504 TC_Val_Unsigned_8 := 129;
505 if Rotate_Left(TC_Val_Unsigned_8, 4) /= 24 or
506 Rotate_Left(Rotate_Left(TC_Val_Unsigned_8, 7), 1) /= 129
507 then
508 Report.Failed("Incorrect result from LE Rotate_Left - 5");
509 end if;
510
511 end if;
512
513
514
515 -- Function Rotate_Right.
516
517 if Big_Endian then -- High-order first bit ordering.
518
519 TC_Amount := 1;
520 TC_Val_Unsigned_8 := 1;
521 TC_Result_Unsigned_8 := Rotate_Right(TC_Val_Unsigned_8, TC_Amount);
522
523 if TC_Result_Unsigned_8 /= 128 then
524 Report.Failed("Incorrect result from BE Rotate_Right - 1");
525 end if;
526
527 TC_Val_Unsigned_8 := 15;
528 if Rotate_Right(TC_Val_Unsigned_8, 2) /= 195 or
529 Rotate_Right(TC_Val_Unsigned_8, 3) /= 225 or
530 Rotate_Right(TC_Val_Unsigned_8, 5) /= 120 or
531 Rotate_Right(TC_Val_Unsigned_8, 8) /= TC_Val_Unsigned_8 or
532 Rotate_Right(TC_Val_Unsigned_8, 0) /= TC_Val_Unsigned_8
533 then
534 Report.Failed("Incorrect result from BE Rotate_Right - 2");
535 end if;
536
537 TC_Val_Unsigned_8 := Unsigned_8'Last;
538 if Rotate_Right(TC_Val_Unsigned_8, 1) /= Unsigned_8'Last then
539 Report.Failed("Incorrect result from BE Rotate_Right - 3");
540 end if;
541
542 TC_Val_Unsigned_8 := 12;
543 if Rotate_Right(TC_Val_Unsigned_8, 1) /= 6 or
544 Rotate_Right(TC_Val_Unsigned_8, 3) /= 129
545 then
546 Report.Failed("Incorrect result from BE Rotate_Right - 4");
547 end if;
548
549 TC_Val_Unsigned_8 := 129;
550 if Rotate_Right(TC_Val_Unsigned_8, 4) /= 24 or
551 Rotate_Right(Rotate_Right(TC_Val_Unsigned_8, 7), 1) /= 129
552 then
553 Report.Failed("Incorrect result from BE Rotate_Right - 5");
554 end if;
555
556 else -- Low-order first bit ordering.
557
558 TC_Amount := 1;
559 TC_Val_Unsigned_8 := 129;
560 TC_Result_Unsigned_8 := Rotate_Right(Value => TC_Val_Unsigned_8,
561 Amount => TC_Amount);
562 if TC_Result_Unsigned_8 /= 3 then
563 Report.Failed("Incorrect result from LE Rotate_Right - 1");
564 end if;
565
566 if Rotate_Right(TC_Val_Unsigned_8, 2) /= 6 or
567 Rotate_Right(TC_Val_Unsigned_8, 3) /= 12 or
568 Rotate_Right(TC_Val_Unsigned_8, 5) /= 48 or
569 Rotate_Right(TC_Val_Unsigned_8, 8) /= 129 or
570 Rotate_Right(TC_Val_Unsigned_8, 0) /= TC_Val_Unsigned_8
571 then
572 Report.Failed("Incorrect result from LE Rotate_Right - 2");
573 end if;
574
575 TC_Val_Unsigned_8 := 1;
576 if Rotate_Right(Value => TC_Val_Unsigned_8, Amount => 1) /= 2 or
577 Rotate_Right(TC_Val_Unsigned_8, Amount => 3) /= 8
578 then
579 Report.Failed("Incorrect result from LE Rotate_Right - 3");
580 end if;
581
582 TC_Val_Unsigned_8 := 82;
583 if Rotate_Right(TC_Val_Unsigned_8, Amount => 4) /= 37 or
584 Rotate_Right(Rotate_Right(TC_Val_Unsigned_8, 7), 1) /= 82
585 then
586 Report.Failed("Incorrect result from LE Rotate_Right - 4");
587 end if;
588
589 end if;
590
591
592
593 -- Tests of Rotate_Left and Rotate_Right in combination.
594
595 if Big_Endian then -- High-order first bit ordering.
596
597 TC_Val_Unsigned_8 := 17;
598
599 if Rotate_Left(Rotate_Right(TC_Val_Unsigned_8, 2), 2) /=
600 TC_Val_Unsigned_8 or
601 Rotate_Left(Rotate_Right(TC_Val_Unsigned_8, 1), 3) /= 68 or
602 Rotate_Right(Rotate_Left(TC_Val_Unsigned_8, 3), 7) /= 17 or
603 Rotate_Right(Rotate_Left(TC_Val_Unsigned_8, 2), 8) /= 68
604 then
605 Report.Failed("Incorrect result from BE Rotate_Left - " &
606 "Rotate_Right functions used in combination");
607 end if;
608
609 else -- Low-order first bit ordering.
610
611 TC_Val_Unsigned_8 := 4;
612
613 if Rotate_Left(Rotate_Right(TC_Val_Unsigned_8, 2), 2) /=
614 TC_Val_Unsigned_8 or
615 Rotate_Left(Rotate_Right(TC_Val_Unsigned_8, 1), 3) /= 1 or
616 Rotate_Right(Rotate_Left(TC_Val_Unsigned_8, 3), 7) /= 64 or
617 Rotate_Right(Rotate_Left(TC_Val_Unsigned_8, 2), 8) /= 1
618 then
619 Report.Failed("Incorrect result from LE Rotate_Left - " &
620 "Rotate_Right functions used in combination");
621 end if;
622
623 end if;
624
625 exception
626 when The_Error : others =>
627 Report.Failed ("The following exception was raised in the " &
628 "Test_Block: " & Exception_Name(The_Error));
629 end Test_Block;
630
631 Report.Result;
632
633 end CXB2001;