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