]> git.proxmox.com Git - mirror_edk2.git/blame - MdePkg/Test/GoogleTest/Library/BaseSafeIntLib/TestBaseSafeIntLib.cpp
MdePkg/Test: Add port of BaseSafeIntLib unit tests to GoogleTest
[mirror_edk2.git] / MdePkg / Test / GoogleTest / Library / BaseSafeIntLib / TestBaseSafeIntLib.cpp
CommitLineData
6d55ad9a
MK
1/** @file\r
2 UEFI OS based application for unit testing the SafeIntLib.\r
3\r
4 Copyright (c) Microsoft Corporation.<BR>\r
5 Copyright (c) 2018 - 2022, Intel Corporation. All rights reserved.<BR>\r
6 SPDX-License-Identifier: BSD-2-Clause-Patent\r
7**/\r
8\r
9#include <gtest/gtest.h>\r
10extern "C" {\r
11 #include <Base.h>\r
12 #include <Library/SafeIntLib.h>\r
13}\r
14\r
15//\r
16// Conversion function tests:\r
17//\r
18TEST(ConversionTestSuite, TestSafeInt8ToUint8) {\r
19 RETURN_STATUS Status;\r
20 INT8 Operand;\r
21 UINT8 Result;\r
22\r
23 //\r
24 // Positive UINT8 should result in just a cast\r
25 //\r
26 Operand = 0x5b;\r
27 Result = 0;\r
28 Status = SafeInt8ToUint8 (Operand, &Result);\r
29 ASSERT_EQ (Status, RETURN_SUCCESS);\r
30 ASSERT_EQ (0x5b, Result);\r
31\r
32 //\r
33 // Negative number should result in an error status\r
34 //\r
35 Operand = (-56);\r
36 Status = SafeInt8ToUint8 (Operand, &Result);\r
37 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
38}\r
39\r
40TEST(ConversionTestSuite, TestSafeInt8ToUint16) {\r
41 RETURN_STATUS Status;\r
42 INT8 Operand;\r
43 UINT16 Result;\r
44\r
45 //\r
46 // Positive UINT8 should result in just a cast\r
47 //\r
48 Operand = 0x5b;\r
49 Result = 0;\r
50 Status = SafeInt8ToUint16 (Operand, &Result);\r
51 ASSERT_EQ (Status, RETURN_SUCCESS);\r
52 ASSERT_EQ (0x5b, Result);\r
53\r
54 //\r
55 // Negative number should result in an error status\r
56 //\r
57 Operand = (-56);\r
58 Status = SafeInt8ToUint16 (Operand, &Result);\r
59 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
60}\r
61\r
62TEST(ConversionTestSuite, TestSafeInt8ToUint32) {\r
63 RETURN_STATUS Status;\r
64 INT8 Operand;\r
65 UINT32 Result;\r
66\r
67 //\r
68 // Positive UINT8 should result in just a cast\r
69 //\r
70 Operand = 0x5b;\r
71 Result = 0;\r
72 Status = SafeInt8ToUint32 (Operand, &Result);\r
73 ASSERT_EQ (Status, RETURN_SUCCESS);\r
74 ASSERT_EQ ((UINT32)0x5b, Result);\r
75\r
76 //\r
77 // Negative number should result in an error status\r
78 //\r
79 Operand = (-56);\r
80 Status = SafeInt8ToUint32 (Operand, &Result);\r
81 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
82}\r
83\r
84TEST(ConversionTestSuite, TestSafeInt8ToUintn) {\r
85 RETURN_STATUS Status;\r
86 INT8 Operand;\r
87 UINTN Result;\r
88\r
89 //\r
90 // Positive UINT8 should result in just a cast\r
91 //\r
92 Operand = 0x5b;\r
93 Result = 0;\r
94 Status = SafeInt8ToUintn (Operand, &Result);\r
95 ASSERT_EQ (Status, RETURN_SUCCESS);\r
96 ASSERT_EQ ((UINTN)0x5b, Result);\r
97\r
98 //\r
99 // Negative number should result in an error status\r
100 //\r
101 Operand = (-56);\r
102 Status = SafeInt8ToUintn (Operand, &Result);\r
103 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
104}\r
105\r
106TEST(ConversionTestSuite, TestSafeInt8ToUint64) {\r
107 RETURN_STATUS Status;\r
108 INT8 Operand;\r
109 UINT64 Result;\r
110\r
111 //\r
112 // Positive UINT8 should result in just a cast\r
113 //\r
114 Operand = 0x5b;\r
115 Result = 0;\r
116 Status = SafeInt8ToUint64 (Operand, &Result);\r
117 ASSERT_EQ (Status, RETURN_SUCCESS);\r
118 ASSERT_EQ ((UINT64)0x5b, Result);\r
119\r
120 //\r
121 // Negative number should result in an error status\r
122 //\r
123 Operand = (-56);\r
124 Status = SafeInt8ToUint64 (Operand, &Result);\r
125 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
126}\r
127\r
128TEST(ConversionTestSuite, TestSafeUint8ToInt8) {\r
129 RETURN_STATUS Status;\r
130 UINT8 Operand;\r
131 INT8 Result;\r
132\r
133 //\r
134 // Operand <= 0x7F (MAX_INT8) should result in a cast\r
135 //\r
136 Operand = 0x5b;\r
137 Result = 0;\r
138 Status = SafeUint8ToInt8 (Operand, &Result);\r
139 ASSERT_EQ (Status, RETURN_SUCCESS);\r
140 ASSERT_EQ (0x5b, Result);\r
141\r
142 //\r
143 // Operand larger than 0x7f should result in an error status\r
144 //\r
145 Operand = 0xaf;\r
146 Status = SafeUint8ToInt8 (Operand, &Result);\r
147 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
148}\r
149\r
150TEST(ConversionTestSuite, TestSafeUint8ToChar8) {\r
151 RETURN_STATUS Status;\r
152 UINT8 Operand;\r
153 CHAR8 Result;\r
154\r
155 //\r
156 // CHAR8 is typedefed as char, which by default is signed, thus\r
157 // CHAR8 is same as INT8, so same tests as above:\r
158 //\r
159\r
160 //\r
161 // Operand <= 0x7F (MAX_INT8) should result in a cast\r
162 //\r
163 Operand = 0x5b;\r
164 Result = 0;\r
165 Status = SafeUint8ToChar8 (Operand, &Result);\r
166 ASSERT_EQ (Status, RETURN_SUCCESS);\r
167 ASSERT_EQ (0x5b, Result);\r
168\r
169 //\r
170 // Operand larger than 0x7f should result in an error status\r
171 //\r
172 Operand = 0xaf;\r
173 Status = SafeUint8ToChar8 (Operand, &Result);\r
174 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
175}\r
176\r
177TEST(ConversionTestSuite, TestSafeInt16ToInt8) {\r
178 RETURN_STATUS Status;\r
179 INT16 Operand;\r
180 INT8 Result;\r
181\r
182 //\r
183 // If Operand is between MIN_INT8 and MAX_INT8 inclusive, then it's a cast\r
184 //\r
185 Operand = 0x5b;\r
186 Result = 0;\r
187 Status = SafeInt16ToInt8 (Operand, &Result);\r
188 ASSERT_EQ (Status, RETURN_SUCCESS);\r
189 ASSERT_EQ (0x5b, Result);\r
190\r
191 Operand = (-35);\r
192 Status = SafeInt16ToInt8 (Operand, &Result);\r
193 ASSERT_EQ (Status, RETURN_SUCCESS);\r
194 ASSERT_EQ ((-35), Result);\r
195\r
196 //\r
197 // Otherwise should result in an error status\r
198 //\r
199 Operand = 0x1234;\r
200 Status = SafeInt16ToInt8 (Operand, &Result);\r
201 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
202\r
203 Operand = (-17835);\r
204 Status = SafeInt16ToInt8 (Operand, &Result);\r
205 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
206}\r
207\r
208TEST(ConversionTestSuite, TestSafeInt16ToChar8) {\r
209 RETURN_STATUS Status;\r
210 INT16 Operand;\r
211 CHAR8 Result;\r
212\r
213 //\r
214 // CHAR8 is typedefed as char, which may be signed or unsigned based\r
215 // on the compiler. Thus, for compatibility CHAR8 should be between 0 and MAX_INT8.\r
216 //\r
217\r
218 //\r
219 // If Operand is between 0 and MAX_INT8 inclusive, then it's a cast\r
220 //\r
221 Operand = 0x5b;\r
222 Result = 0;\r
223 Status = SafeInt16ToChar8 (Operand, &Result);\r
224 ASSERT_EQ (Status, RETURN_SUCCESS);\r
225 ASSERT_EQ (0x5b, Result);\r
226\r
227 Operand = 0;\r
228 Result = 0;\r
229 Status = SafeInt16ToChar8 (Operand, &Result);\r
230 ASSERT_EQ (Status, RETURN_SUCCESS);\r
231 ASSERT_EQ (0, Result);\r
232\r
233 Operand = MAX_INT8;\r
234 Result = 0;\r
235 Status = SafeInt16ToChar8 (Operand, &Result);\r
236 ASSERT_EQ (Status, RETURN_SUCCESS);\r
237 ASSERT_EQ (MAX_INT8, Result);\r
238\r
239 //\r
240 // Otherwise should result in an error status\r
241 //\r
242 Operand = (-35);\r
243 Status = SafeInt16ToChar8 (Operand, &Result);\r
244 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
245\r
246 Operand = 0x1234;\r
247 Status = SafeInt16ToChar8 (Operand, &Result);\r
248 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
249\r
250 Operand = (-17835);\r
251 Status = SafeInt16ToChar8 (Operand, &Result);\r
252 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
253}\r
254\r
255TEST(ConversionTestSuite, TestSafeInt16ToUint8) {\r
256 RETURN_STATUS Status;\r
257 INT16 Operand;\r
258 UINT8 Result;\r
259\r
260 //\r
261 // If Operand is between 0 and MAX_INT8 inclusive, then it's a cast\r
262 //\r
263 Operand = 0x5b;\r
264 Result = 0;\r
265 Status = SafeInt16ToUint8 (Operand, &Result);\r
266 ASSERT_EQ (Status, RETURN_SUCCESS);\r
267 ASSERT_EQ (0x5b, Result);\r
268\r
269 //\r
270 // Otherwise should result in an error status\r
271 //\r
272 Operand = 0x1234;\r
273 Status = SafeInt16ToUint8 (Operand, &Result);\r
274 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
275\r
276 Operand = (-17835);\r
277 Status = SafeInt16ToUint8 (Operand, &Result);\r
278 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
279}\r
280\r
281TEST(ConversionTestSuite, TestSafeInt16ToUint16) {\r
282 RETURN_STATUS Status;\r
283 INT16 Operand = 0x5b5b;\r
284 UINT16 Result = 0;\r
285\r
286 //\r
287 // If Operand is non-negative, then it's a cast\r
288 //\r
289 Status = SafeInt16ToUint16 (Operand, &Result);\r
290 ASSERT_EQ (Status, RETURN_SUCCESS);\r
291 ASSERT_EQ (0x5b5b, Result);\r
292\r
293 //\r
294 // Otherwise should result in an error status\r
295 //\r
296 Operand = (-17835);\r
297 Status = SafeInt16ToUint16 (Operand, &Result);\r
298 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
299}\r
300\r
301TEST(ConversionTestSuite, TestSafeInt16ToUint32) {\r
302 RETURN_STATUS Status;\r
303 INT16 Operand;\r
304 UINT32 Result;\r
305\r
306 //\r
307 // If Operand is non-negative, then it's a cast\r
308 //\r
309 Operand = 0x5b5b;\r
310 Result = 0;\r
311 Status = SafeInt16ToUint32 (Operand, &Result);\r
312 ASSERT_EQ (Status, RETURN_SUCCESS);\r
313 ASSERT_EQ ((UINT32)0x5b5b, Result);\r
314\r
315 //\r
316 // Otherwise should result in an error status\r
317 //\r
318 Operand = (-17835);\r
319 Status = SafeInt16ToUint32 (Operand, &Result);\r
320 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
321}\r
322\r
323TEST(ConversionTestSuite, TestSafeInt16ToUintn) {\r
324 RETURN_STATUS Status;\r
325 INT16 Operand;\r
326 UINTN Result;\r
327\r
328 //\r
329 // If Operand is non-negative, then it's a cast\r
330 //\r
331 Operand = 0x5b5b;\r
332 Result = 0;\r
333 Status = SafeInt16ToUintn (Operand, &Result);\r
334 ASSERT_EQ (Status, RETURN_SUCCESS);\r
335 ASSERT_EQ ((UINTN)0x5b5b, Result);\r
336\r
337 //\r
338 // Otherwise should result in an error status\r
339 //\r
340 Operand = (-17835);\r
341 Status = SafeInt16ToUintn (Operand, &Result);\r
342 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
343}\r
344\r
345TEST(ConversionTestSuite, TestSafeInt16ToUint64) {\r
346 RETURN_STATUS Status;\r
347 INT16 Operand;\r
348 UINT64 Result;\r
349\r
350 //\r
351 // If Operand is non-negative, then it's a cast\r
352 //\r
353 Operand = 0x5b5b;\r
354 Result = 0;\r
355 Status = SafeInt16ToUint64 (Operand, &Result);\r
356 ASSERT_EQ (Status, RETURN_SUCCESS);\r
357 ASSERT_EQ ((UINT64)0x5b5b, Result);\r
358\r
359 //\r
360 // Otherwise should result in an error status\r
361 //\r
362 Operand = (-17835);\r
363 Status = SafeInt16ToUint64 (Operand, &Result);\r
364 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
365}\r
366\r
367TEST(ConversionTestSuite, TestSafeUint16ToInt8) {\r
368 RETURN_STATUS Status;\r
369 UINT16 Operand;\r
370 INT8 Result;\r
371\r
372 //\r
373 // If Operand is <= MAX_INT8, it's a cast\r
374 //\r
375 Operand = 0x5b;\r
376 Result = 0;\r
377 Status = SafeUint16ToInt8 (Operand, &Result);\r
378 ASSERT_EQ (Status, RETURN_SUCCESS);\r
379 ASSERT_EQ (0x5b, Result);\r
380\r
381 //\r
382 // Otherwise should result in an error status\r
383 //\r
384 Operand = (0x5b5b);\r
385 Status = SafeUint16ToInt8 (Operand, &Result);\r
386 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
387}\r
388\r
389TEST(ConversionTestSuite, TestSafeUint16ToChar8) {\r
390 RETURN_STATUS Status;\r
391 UINT16 Operand;\r
392 CHAR8 Result;\r
393\r
394 // CHAR8 is typedefed as char, which by default is signed, thus\r
395 // CHAR8 is same as INT8, so same tests as above:\r
396\r
397 //\r
398 // If Operand is <= MAX_INT8, it's a cast\r
399 //\r
400 Operand = 0x5b;\r
401 Result = 0;\r
402 Status = SafeUint16ToChar8 (Operand, &Result);\r
403 ASSERT_EQ (Status, RETURN_SUCCESS);\r
404 ASSERT_EQ (0x5b, Result);\r
405\r
406 //\r
407 // Otherwise should result in an error status\r
408 //\r
409 Operand = (0x5b5b);\r
410 Status = SafeUint16ToChar8 (Operand, &Result);\r
411 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
412}\r
413\r
414TEST(ConversionTestSuite, TestSafeUint16ToUint8) {\r
415 RETURN_STATUS Status;\r
416 UINT16 Operand;\r
417 UINT8 Result;\r
418\r
419 //\r
420 // If Operand is <= MAX_UINT8 (0xff), it's a cast\r
421 //\r
422 Operand = 0xab;\r
423 Result = 0;\r
424 Status = SafeUint16ToUint8 (Operand, &Result);\r
425 ASSERT_EQ (Status, RETURN_SUCCESS);\r
426 ASSERT_EQ (0xab, Result);\r
427\r
428 //\r
429 // Otherwise should result in an error status\r
430 //\r
431 Operand = (0x5b5b);\r
432 Status = SafeUint16ToUint8 (Operand, &Result);\r
433 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
434}\r
435\r
436TEST(ConversionTestSuite, TestSafeUint16ToInt16) {\r
437 RETURN_STATUS Status;\r
438 UINT16 Operand;\r
439 INT16 Result;\r
440\r
441 //\r
442 // If Operand is <= MAX_INT16 (0x7fff), it's a cast\r
443 //\r
444 Operand = 0x5b5b;\r
445 Result = 0;\r
446 Status = SafeUint16ToInt16 (Operand, &Result);\r
447 ASSERT_EQ (Status, RETURN_SUCCESS);\r
448 ASSERT_EQ (0x5b5b, Result);\r
449\r
450 //\r
451 // Otherwise should result in an error status\r
452 //\r
453 Operand = (0xabab);\r
454 Status = SafeUint16ToInt16 (Operand, &Result);\r
455 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
456}\r
457\r
458TEST(ConversionTestSuite, TestSafeInt32ToInt8) {\r
459 RETURN_STATUS Status;\r
460 INT32 Operand;\r
461 INT8 Result;\r
462\r
463 //\r
464 // If Operand is between MIN_INT8 and MAX_INT8 inclusive, then it's a cast\r
465 //\r
466 Operand = 0x5b;\r
467 Result = 0;\r
468 Status = SafeInt32ToInt8 (Operand, &Result);\r
469 ASSERT_EQ (Status, RETURN_SUCCESS);\r
470 ASSERT_EQ (0x5b, Result);\r
471\r
472 Operand = (-57);\r
473 Status = SafeInt32ToInt8 (Operand, &Result);\r
474 ASSERT_EQ (Status, RETURN_SUCCESS);\r
475 ASSERT_EQ ((-57), Result);\r
476\r
477 //\r
478 // Otherwise should result in an error status\r
479 //\r
480 Operand = (0x5bababab);\r
481 Status = SafeInt32ToInt8 (Operand, &Result);\r
482 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
483\r
484 Operand = (-1537977259);\r
485 Status = SafeInt32ToInt8 (Operand, &Result);\r
486 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
487}\r
488\r
489TEST(ConversionTestSuite, TestSafeInt32ToChar8) {\r
490 RETURN_STATUS Status;\r
491 INT32 Operand;\r
492 CHAR8 Result;\r
493\r
494 //\r
495 // CHAR8 is typedefed as char, which may be signed or unsigned based\r
496 // on the compiler. Thus, for compatibility CHAR8 should be between 0 and MAX_INT8.\r
497 //\r
498\r
499 //\r
500 // If Operand is between 0 and MAX_INT8 inclusive, then it's a cast\r
501 //\r
502 Operand = 0x5b;\r
503 Result = 0;\r
504 Status = SafeInt32ToChar8 (Operand, &Result);\r
505 ASSERT_EQ (Status, RETURN_SUCCESS);\r
506 ASSERT_EQ (0x5b, Result);\r
507\r
508 Operand = 0;\r
509 Result = 0;\r
510 Status = SafeInt32ToChar8 (Operand, &Result);\r
511 ASSERT_EQ (Status, RETURN_SUCCESS);\r
512 ASSERT_EQ (0, Result);\r
513\r
514 Operand = MAX_INT8;\r
515 Result = 0;\r
516 Status = SafeInt32ToChar8 (Operand, &Result);\r
517 ASSERT_EQ (Status, RETURN_SUCCESS);\r
518 ASSERT_EQ (MAX_INT8, Result);\r
519\r
520 //\r
521 // Otherwise should result in an error status\r
522 //\r
523 Operand = (-57);\r
524 Status = SafeInt32ToChar8 (Operand, &Result);\r
525 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
526\r
527 Operand = (0x5bababab);\r
528 Status = SafeInt32ToChar8 (Operand, &Result);\r
529 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
530\r
531 Operand = (-1537977259);\r
532 Status = SafeInt32ToChar8 (Operand, &Result);\r
533 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
534}\r
535\r
536TEST(ConversionTestSuite, TestSafeInt32ToUint8) {\r
537 RETURN_STATUS Status;\r
538 INT32 Operand;\r
539 UINT8 Result;\r
540\r
541 //\r
542 // If Operand is between 0 and MAX_INT8 inclusive, then it's a cast\r
543 //\r
544 Operand = 0x5b;\r
545 Result = 0;\r
546 Status = SafeInt32ToUint8 (Operand, &Result);\r
547 ASSERT_EQ (Status, RETURN_SUCCESS);\r
548 ASSERT_EQ (0x5b, Result);\r
549\r
550 //\r
551 // Otherwise should result in an error status\r
552 //\r
553 Operand = (-57);\r
554 Status = SafeInt32ToUint8 (Operand, &Result);\r
555 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
556\r
557 Operand = (0x5bababab);\r
558 Status = SafeInt32ToUint8 (Operand, &Result);\r
559 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
560\r
561 Operand = (-1537977259);\r
562 Status = SafeInt32ToUint8 (Operand, &Result);\r
563 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
564}\r
565\r
566TEST(ConversionTestSuite, TestSafeInt32ToInt16) {\r
567 RETURN_STATUS Status;\r
568 INT32 Operand;\r
569 INT16 Result;\r
570\r
571 //\r
572 // If Operand is between MIN_INT16 and MAX_INT16 inclusive, then it's a cast\r
573 //\r
574 Operand = 0x5b5b;\r
575 Result = 0;\r
576 Status = SafeInt32ToInt16 (Operand, &Result);\r
577 ASSERT_EQ (Status, RETURN_SUCCESS);\r
578 ASSERT_EQ (0x5b5b, Result);\r
579\r
580 Operand = (-17857);\r
581 Status = SafeInt32ToInt16 (Operand, &Result);\r
582 ASSERT_EQ (Status, RETURN_SUCCESS);\r
583 ASSERT_EQ ((-17857), Result);\r
584\r
585 //\r
586 // Otherwise should result in an error status\r
587 //\r
588 Operand = (0x5bababab);\r
589 Status = SafeInt32ToInt16 (Operand, &Result);\r
590 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
591\r
592 Operand = (-1537977259);\r
593 Status = SafeInt32ToInt16 (Operand, &Result);\r
594 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
595}\r
596\r
597TEST(ConversionTestSuite, TestSafeInt32ToUint16) {\r
598 RETURN_STATUS Status;\r
599 INT32 Operand;\r
600 UINT16 Result;\r
601\r
602 //\r
603 // If Operand is between 0 and MAX_UINT16 inclusive, then it's a cast\r
604 //\r
605 Operand = 0xabab;\r
606 Result = 0;\r
607 Status = SafeInt32ToUint16 (Operand, &Result);\r
608 ASSERT_EQ (Status, RETURN_SUCCESS);\r
609 ASSERT_EQ (0xabab, Result);\r
610\r
611 //\r
612 // Otherwise should result in an error status\r
613 //\r
614 Operand = (-17857);\r
615 Status = SafeInt32ToUint16 (Operand, &Result);\r
616 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
617\r
618 Operand = (0x5bababab);\r
619 Status = SafeInt32ToUint16 (Operand, &Result);\r
620 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
621\r
622 Operand = (-1537977259);\r
623 Status = SafeInt32ToUint16 (Operand, &Result);\r
624 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
625}\r
626\r
627TEST(ConversionTestSuite, TestSafeInt32ToUint32) {\r
628 RETURN_STATUS Status;\r
629 INT32 Operand;\r
630 UINT32 Result;\r
631\r
632 //\r
633 // If Operand is non-negative, then it's a cast\r
634 //\r
635 Operand = 0x5bababab;\r
636 Result = 0;\r
637 Status = SafeInt32ToUint32 (Operand, &Result);\r
638 ASSERT_EQ (Status, RETURN_SUCCESS);\r
639 ASSERT_EQ ((UINT32)0x5bababab, Result);\r
640\r
641 //\r
642 // Otherwise should result in an error status\r
643 //\r
644 Operand = (-1537977259);\r
645 Status = SafeInt32ToUint32 (Operand, &Result);\r
646 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
647}\r
648\r
649TEST(ConversionTestSuite, TestSafeInt32ToUint64) {\r
650 RETURN_STATUS Status;\r
651 INT32 Operand;\r
652 UINT64 Result;\r
653\r
654 //\r
655 // If Operand is non-negative, then it's a cast\r
656 //\r
657 Operand = 0x5bababab;\r
658 Result = 0;\r
659 Status = SafeInt32ToUint64 (Operand, &Result);\r
660 ASSERT_EQ (Status, RETURN_SUCCESS);\r
661 ASSERT_EQ ((UINT64)0x5bababab, Result);\r
662\r
663 //\r
664 // Otherwise should result in an error status\r
665 //\r
666 Operand = (-1537977259);\r
667 Status = SafeInt32ToUint64 (Operand, &Result);\r
668 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
669}\r
670\r
671TEST(ConversionTestSuite, TestSafeUint32ToInt8) {\r
672 RETURN_STATUS Status;\r
673 UINT32 Operand;\r
674 INT8 Result;\r
675\r
676 //\r
677 // If Operand is <= MAX_INT8, then it's a cast\r
678 //\r
679 Operand = 0x5b;\r
680 Result = 0;\r
681 Status = SafeUint32ToInt8 (Operand, &Result);\r
682 ASSERT_EQ (Status, RETURN_SUCCESS);\r
683 ASSERT_EQ (0x5b, Result);\r
684\r
685 //\r
686 // Otherwise should result in an error status\r
687 //\r
688 Operand = (0x5bababab);\r
689 Status = SafeUint32ToInt8 (Operand, &Result);\r
690 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
691}\r
692\r
693TEST(ConversionTestSuite, TestSafeUint32ToChar8) {\r
694 RETURN_STATUS Status;\r
695 UINT32 Operand;\r
696 CHAR8 Result;\r
697\r
698 // CHAR8 is typedefed as char, which by default is signed, thus\r
699 // CHAR8 is same as INT8, so same tests as above:\r
700\r
701 //\r
702 // If Operand is <= MAX_INT8, then it's a cast\r
703 //\r
704 Operand = 0x5b;\r
705 Result = 0;\r
706 Status = SafeUint32ToChar8 (Operand, &Result);\r
707 ASSERT_EQ (Status, RETURN_SUCCESS);\r
708 ASSERT_EQ (0x5b, Result);\r
709\r
710 //\r
711 // Otherwise should result in an error status\r
712 //\r
713 Operand = (0x5bababab);\r
714 Status = SafeUint32ToChar8 (Operand, &Result);\r
715 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
716}\r
717\r
718TEST(ConversionTestSuite, TestSafeUint32ToUint8) {\r
719 RETURN_STATUS Status;\r
720 UINT32 Operand;\r
721 UINT8 Result;\r
722\r
723 //\r
724 // If Operand is <= MAX_UINT8, then it's a cast\r
725 //\r
726 Operand = 0xab;\r
727 Result = 0;\r
728 Status = SafeUint32ToUint8 (Operand, &Result);\r
729 ASSERT_EQ (Status, RETURN_SUCCESS);\r
730 ASSERT_EQ (0xab, Result);\r
731\r
732 //\r
733 // Otherwise should result in an error status\r
734 //\r
735 Operand = (0xabababab);\r
736 Status = SafeUint32ToUint8 (Operand, &Result);\r
737 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
738}\r
739\r
740TEST(ConversionTestSuite, TestSafeUint32ToInt16) {\r
741 RETURN_STATUS Status;\r
742 UINT32 Operand;\r
743 INT16 Result;\r
744\r
745 //\r
746 // If Operand is <= MAX_INT16, then it's a cast\r
747 //\r
748 Operand = 0x5bab;\r
749 Result = 0;\r
750 Status = SafeUint32ToInt16 (Operand, &Result);\r
751 ASSERT_EQ (Status, RETURN_SUCCESS);\r
752 ASSERT_EQ (0x5bab, Result);\r
753\r
754 //\r
755 // Otherwise should result in an error status\r
756 //\r
757 Operand = (0xabababab);\r
758 Status = SafeUint32ToInt16 (Operand, &Result);\r
759 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
760}\r
761\r
762TEST(ConversionTestSuite, TestSafeUint32ToUint16) {\r
763 RETURN_STATUS Status;\r
764 UINT32 Operand;\r
765 UINT16 Result;\r
766\r
767 //\r
768 // If Operand is <= MAX_UINT16, then it's a cast\r
769 //\r
770 Operand = 0xabab;\r
771 Result = 0;\r
772 Status = SafeUint32ToUint16 (Operand, &Result);\r
773 ASSERT_EQ (Status, RETURN_SUCCESS);\r
774 ASSERT_EQ (0xabab, Result);\r
775\r
776 //\r
777 // Otherwise should result in an error status\r
778 //\r
779 Operand = (0xabababab);\r
780 Status = SafeUint32ToUint16 (Operand, &Result);\r
781 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
782}\r
783\r
784TEST(ConversionTestSuite, TestSafeUint32ToInt32) {\r
785 RETURN_STATUS Status;\r
786 UINT32 Operand;\r
787 INT32 Result;\r
788\r
789 //\r
790 // If Operand is <= MAX_INT32, then it's a cast\r
791 //\r
792 Operand = 0x5bababab;\r
793 Result = 0;\r
794 Status = SafeUint32ToInt32 (Operand, &Result);\r
795 ASSERT_EQ (Status, RETURN_SUCCESS);\r
796 ASSERT_EQ (0x5bababab, Result);\r
797\r
798 //\r
799 // Otherwise should result in an error status\r
800 //\r
801 Operand = (0xabababab);\r
802 Status = SafeUint32ToInt32 (Operand, &Result);\r
803 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
804}\r
805\r
806TEST(ConversionTestSuite, TestSafeIntnToInt8) {\r
807 RETURN_STATUS Status;\r
808 INTN Operand;\r
809 INT8 Result;\r
810\r
811 //\r
812 // If Operand is between MIN_INT8 and MAX_INT8 inclusive, then it's a cast\r
813 //\r
814 Operand = 0x5b;\r
815 Result = 0;\r
816 Status = SafeIntnToInt8 (Operand, &Result);\r
817 ASSERT_EQ (Status, RETURN_SUCCESS);\r
818 ASSERT_EQ (0x5b, Result);\r
819\r
820 Operand = (-53);\r
821 Status = SafeIntnToInt8 (Operand, &Result);\r
822 ASSERT_EQ (Status, RETURN_SUCCESS);\r
823 ASSERT_EQ ((-53), Result);\r
824\r
825 //\r
826 // Otherwise should result in an error status\r
827 //\r
828 Operand = (0x5bababab);\r
829 Status = SafeIntnToInt8 (Operand, &Result);\r
830 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
831\r
832 Operand = (-1537977259);\r
833 Status = SafeIntnToInt8 (Operand, &Result);\r
834 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
835}\r
836\r
837TEST(ConversionTestSuite, TestSafeIntnToChar8) {\r
838 RETURN_STATUS Status;\r
839 INTN Operand;\r
840 CHAR8 Result;\r
841\r
842 //\r
843 // CHAR8 is typedefed as char, which may be signed or unsigned based\r
844 // on the compiler. Thus, for compatibility CHAR8 should be between 0 and MAX_INT8.\r
845 //\r
846\r
847 //\r
848 // If Operand is between MIN_INT8 and MAX_INT8 inclusive, then it's a cast\r
849 //\r
850 Operand = 0x5b;\r
851 Result = 0;\r
852 Status = SafeIntnToChar8 (Operand, &Result);\r
853 ASSERT_EQ (Status, RETURN_SUCCESS);\r
854 ASSERT_EQ (0x5b, Result);\r
855\r
856 Operand = 0;\r
857 Result = 0;\r
858 Status = SafeIntnToChar8 (Operand, &Result);\r
859 ASSERT_EQ (Status, RETURN_SUCCESS);\r
860 ASSERT_EQ (0, Result);\r
861\r
862 Operand = MAX_INT8;\r
863 Result = 0;\r
864 Status = SafeIntnToChar8 (Operand, &Result);\r
865 ASSERT_EQ (Status, RETURN_SUCCESS);\r
866 ASSERT_EQ (MAX_INT8, Result);\r
867\r
868 //\r
869 // Otherwise should result in an error status\r
870 //\r
871 Operand = (-53);\r
872 Status = SafeIntnToChar8 (Operand, &Result);\r
873 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
874\r
875 Operand = (0x5bababab);\r
876 Status = SafeIntnToChar8 (Operand, &Result);\r
877 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
878\r
879 Operand = (-1537977259);\r
880 Status = SafeIntnToChar8 (Operand, &Result);\r
881 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
882}\r
883\r
884TEST(ConversionTestSuite, TestSafeIntnToUint8) {\r
885 RETURN_STATUS Status;\r
886 INTN Operand;\r
887 UINT8 Result;\r
888\r
889 //\r
890 // If Operand is between 0 and MAX_UINT8 inclusive, then it's a cast\r
891 //\r
892 Operand = 0xab;\r
893 Result = 0;\r
894 Status = SafeIntnToUint8 (Operand, &Result);\r
895 ASSERT_EQ (Status, RETURN_SUCCESS);\r
896 ASSERT_EQ (0xab, Result);\r
897\r
898 //\r
899 // Otherwise should result in an error status\r
900 //\r
901 Operand = (0x5bababab);\r
902 Status = SafeIntnToUint8 (Operand, &Result);\r
903 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
904\r
905 Operand = (-1537977259);\r
906 Status = SafeIntnToUint8 (Operand, &Result);\r
907 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
908}\r
909\r
910TEST(ConversionTestSuite, TestSafeIntnToInt16) {\r
911 RETURN_STATUS Status;\r
912 INTN Operand;\r
913 INT16 Result;\r
914\r
915 //\r
916 // If Operand is between MIN_INT16 and MAX_INT16 inclusive, then it's a cast\r
917 //\r
918 Operand = 0x5bab;\r
919 Result = 0;\r
920 Status = SafeIntnToInt16 (Operand, &Result);\r
921 ASSERT_EQ (Status, RETURN_SUCCESS);\r
922 ASSERT_EQ (0x5bab, Result);\r
923\r
924 Operand = (-23467);\r
925 Status = SafeIntnToInt16 (Operand, &Result);\r
926 ASSERT_EQ (Status, RETURN_SUCCESS);\r
927 ASSERT_EQ ((-23467), Result);\r
928\r
929 //\r
930 // Otherwise should result in an error status\r
931 //\r
932 Operand = (0x5bababab);\r
933 Status = SafeIntnToInt16 (Operand, &Result);\r
934 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
935\r
936 Operand = (-1537977259);\r
937 Status = SafeIntnToInt16 (Operand, &Result);\r
938 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
939}\r
940\r
941TEST(ConversionTestSuite, TestSafeIntnToUint16) {\r
942 RETURN_STATUS Status;\r
943 INTN Operand;\r
944 UINT16 Result;\r
945\r
946 //\r
947 // If Operand is between 0 and MAX_UINT16 inclusive, then it's a cast\r
948 //\r
949 Operand = 0xabab;\r
950 Result = 0;\r
951 Status = SafeIntnToUint16 (Operand, &Result);\r
952 ASSERT_EQ (Status, RETURN_SUCCESS);\r
953 ASSERT_EQ (0xabab, Result);\r
954\r
955 //\r
956 // Otherwise should result in an error status\r
957 //\r
958 Operand = (0x5bababab);\r
959 Status = SafeIntnToUint16 (Operand, &Result);\r
960 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
961\r
962 Operand = (-1537977259);\r
963 Status = SafeIntnToUint16 (Operand, &Result);\r
964 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
965}\r
966\r
967TEST(ConversionTestSuite, TestSafeIntnToUintn) {\r
968 RETURN_STATUS Status;\r
969 INTN Operand;\r
970 UINTN Result;\r
971\r
972 //\r
973 // If Operand is non-negative, then it's a cast\r
974 //\r
975 Operand = 0x5bababab;\r
976 Result = 0;\r
977 Status = SafeIntnToUintn (Operand, &Result);\r
978 ASSERT_EQ (Status, RETURN_SUCCESS);\r
979 ASSERT_EQ ((UINTN)0x5bababab, Result);\r
980\r
981 //\r
982 // Otherwise should result in an error status\r
983 //\r
984 Operand = (-1537977259);\r
985 Status = SafeIntnToUintn (Operand, &Result);\r
986 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
987}\r
988\r
989TEST(ConversionTestSuite, TestSafeIntnToUint64) {\r
990 RETURN_STATUS Status;\r
991 INTN Operand;\r
992 UINT64 Result;\r
993\r
994 //\r
995 // If Operand is non-negative, then it's a cast\r
996 //\r
997 Operand = 0x5bababab;\r
998 Result = 0;\r
999 Status = SafeIntnToUint64 (Operand, &Result);\r
1000 ASSERT_EQ (Status, RETURN_SUCCESS);\r
1001 ASSERT_EQ ((UINT64)0x5bababab, Result);\r
1002\r
1003 //\r
1004 // Otherwise should result in an error status\r
1005 //\r
1006 Operand = (-1537977259);\r
1007 Status = SafeIntnToUint64 (Operand, &Result);\r
1008 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
1009}\r
1010\r
1011TEST(ConversionTestSuite, TestSafeUintnToInt8) {\r
1012 RETURN_STATUS Status;\r
1013 UINTN Operand;\r
1014 INT8 Result;\r
1015\r
1016 //\r
1017 // If Operand is <= MAX_INT8, then it's a cast\r
1018 //\r
1019 Operand = 0x5b;\r
1020 Result = 0;\r
1021 Status = SafeUintnToInt8 (Operand, &Result);\r
1022 ASSERT_EQ (Status, RETURN_SUCCESS);\r
1023 ASSERT_EQ (0x5b, Result);\r
1024\r
1025 //\r
1026 // Otherwise should result in an error status\r
1027 //\r
1028 Operand = (0xabab);\r
1029 Status = SafeUintnToInt8 (Operand, &Result);\r
1030 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
1031}\r
1032\r
1033TEST(ConversionTestSuite, TestSafeUintnToChar8) {\r
1034 RETURN_STATUS Status;\r
1035 UINTN Operand;\r
1036 CHAR8 Result;\r
1037\r
1038 // CHAR8 is typedefed as char, which by default is signed, thus\r
1039 // CHAR8 is same as INT8, so same tests as above:\r
1040\r
1041 //\r
1042 // If Operand is <= MAX_INT8, then it's a cast\r
1043 //\r
1044 Operand = 0x5b;\r
1045 Result = 0;\r
1046 Status = SafeUintnToChar8 (Operand, &Result);\r
1047 ASSERT_EQ (Status, RETURN_SUCCESS);\r
1048 ASSERT_EQ (0x5b, Result);\r
1049\r
1050 //\r
1051 // Otherwise should result in an error status\r
1052 //\r
1053 Operand = (0xabab);\r
1054 Status = SafeUintnToChar8 (Operand, &Result);\r
1055 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
1056}\r
1057\r
1058TEST(ConversionTestSuite, TestSafeUintnToUint8) {\r
1059 RETURN_STATUS Status;\r
1060 UINTN Operand;\r
1061 UINT8 Result;\r
1062\r
1063 //\r
1064 // If Operand is <= MAX_UINT8, then it's a cast\r
1065 //\r
1066 Operand = 0xab;\r
1067 Result = 0;\r
1068 Status = SafeUintnToUint8 (Operand, &Result);\r
1069 ASSERT_EQ (Status, RETURN_SUCCESS);\r
1070 ASSERT_EQ (0xab, Result);\r
1071\r
1072 //\r
1073 // Otherwise should result in an error status\r
1074 //\r
1075 Operand = (0xabab);\r
1076 Status = SafeUintnToUint8 (Operand, &Result);\r
1077 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
1078}\r
1079\r
1080TEST(ConversionTestSuite, TestSafeUintnToInt16) {\r
1081 RETURN_STATUS Status;\r
1082 UINTN Operand;\r
1083 INT16 Result;\r
1084\r
1085 //\r
1086 // If Operand is <= MAX_INT16, then it's a cast\r
1087 //\r
1088 Operand = 0x5bab;\r
1089 Result = 0;\r
1090 Status = SafeUintnToInt16 (Operand, &Result);\r
1091 ASSERT_EQ (Status, RETURN_SUCCESS);\r
1092 ASSERT_EQ (0x5bab, Result);\r
1093\r
1094 //\r
1095 // Otherwise should result in an error status\r
1096 //\r
1097 Operand = (0xabab);\r
1098 Status = SafeUintnToInt16 (Operand, &Result);\r
1099 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
1100}\r
1101\r
1102TEST(ConversionTestSuite, TestSafeUintnToUint16) {\r
1103 RETURN_STATUS Status;\r
1104 UINTN Operand;\r
1105 UINT16 Result;\r
1106\r
1107 //\r
1108 // If Operand is <= MAX_UINT16, then it's a cast\r
1109 //\r
1110 Operand = 0xabab;\r
1111 Result = 0;\r
1112 Status = SafeUintnToUint16 (Operand, &Result);\r
1113 ASSERT_EQ (Status, RETURN_SUCCESS);\r
1114 ASSERT_EQ (0xabab, Result);\r
1115\r
1116 //\r
1117 // Otherwise should result in an error status\r
1118 //\r
1119 Operand = (0xabababab);\r
1120 Status = SafeUintnToUint16 (Operand, &Result);\r
1121 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
1122}\r
1123\r
1124TEST(ConversionTestSuite, TestSafeUintnToInt32) {\r
1125 RETURN_STATUS Status;\r
1126 UINTN Operand;\r
1127 INT32 Result;\r
1128\r
1129 //\r
1130 // If Operand is <= MAX_INT32, then it's a cast\r
1131 //\r
1132 Operand = 0x5bababab;\r
1133 Result = 0;\r
1134 Status = SafeUintnToInt32 (Operand, &Result);\r
1135 ASSERT_EQ (Status, RETURN_SUCCESS);\r
1136 ASSERT_EQ (0x5bababab, Result);\r
1137\r
1138 //\r
1139 // Otherwise should result in an error status\r
1140 //\r
1141 Operand = (0xabababab);\r
1142 Status = SafeUintnToInt32 (Operand, &Result);\r
1143 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
1144}\r
1145\r
1146TEST(ConversionTestSuite, TestSafeInt64ToInt8) {\r
1147 RETURN_STATUS Status;\r
1148 INT64 Operand;\r
1149 INT8 Result;\r
1150\r
1151 //\r
1152 // If Operand is between MIN_INT8 and MAX_INT8 inclusive, then it's a cast\r
1153 //\r
1154 Operand = 0x5b;\r
1155 Result = 0;\r
1156 Status = SafeInt64ToInt8 (Operand, &Result);\r
1157 ASSERT_EQ (Status, RETURN_SUCCESS);\r
1158 ASSERT_EQ (0x5b, Result);\r
1159\r
1160 Operand = (-37);\r
1161 Status = SafeInt64ToInt8 (Operand, &Result);\r
1162 ASSERT_EQ (Status, RETURN_SUCCESS);\r
1163 ASSERT_EQ ((-37), Result);\r
1164\r
1165 //\r
1166 // Otherwise should result in an error status\r
1167 //\r
1168 Operand = (0x5babababefefefef);\r
1169 Status = SafeInt64ToInt8 (Operand, &Result);\r
1170 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
1171\r
1172 Operand = (-6605562033422200815);\r
1173 Status = SafeInt64ToInt8 (Operand, &Result);\r
1174 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
1175}\r
1176\r
1177TEST(ConversionTestSuite, TestSafeInt64ToChar8) {\r
1178 RETURN_STATUS Status;\r
1179 INT64 Operand;\r
1180 CHAR8 Result;\r
1181\r
1182 //\r
1183 // CHAR8 is typedefed as char, which may be signed or unsigned based\r
1184 // on the compiler. Thus, for compatibility CHAR8 should be between 0 and MAX_INT8.\r
1185 //\r
1186\r
1187 //\r
1188 // If Operand is between MIN_INT8 and MAX_INT8 inclusive, then it's a cast\r
1189 //\r
1190 Operand = 0x5b;\r
1191 Result = 0;\r
1192 Status = SafeInt64ToChar8 (Operand, &Result);\r
1193 ASSERT_EQ (Status, RETURN_SUCCESS);\r
1194 ASSERT_EQ (0x5b, Result);\r
1195\r
1196 Operand = 0;\r
1197 Result = 0;\r
1198 Status = SafeInt64ToChar8 (Operand, &Result);\r
1199 ASSERT_EQ (Status, RETURN_SUCCESS);\r
1200 ASSERT_EQ (0, Result);\r
1201\r
1202 Operand = MAX_INT8;\r
1203 Result = 0;\r
1204 Status = SafeInt64ToChar8 (Operand, &Result);\r
1205 ASSERT_EQ (Status, RETURN_SUCCESS);\r
1206 ASSERT_EQ (MAX_INT8, Result);\r
1207\r
1208 //\r
1209 // Otherwise should result in an error status\r
1210 //\r
1211 Operand = (-37);\r
1212 Status = SafeInt64ToChar8 (Operand, &Result);\r
1213 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
1214\r
1215 Operand = (0x5babababefefefef);\r
1216 Status = SafeInt64ToChar8 (Operand, &Result);\r
1217 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
1218\r
1219 Operand = (-6605562033422200815);\r
1220 Status = SafeInt64ToChar8 (Operand, &Result);\r
1221 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
1222}\r
1223\r
1224TEST(ConversionTestSuite, TestSafeInt64ToUint8) {\r
1225 RETURN_STATUS Status;\r
1226 INT64 Operand;\r
1227 UINT8 Result;\r
1228\r
1229 //\r
1230 // If Operand is between 0 and MAX_UINT8 inclusive, then it's a cast\r
1231 //\r
1232 Operand = 0xab;\r
1233 Result = 0;\r
1234 Status = SafeInt64ToUint8 (Operand, &Result);\r
1235 ASSERT_EQ (Status, RETURN_SUCCESS);\r
1236 ASSERT_EQ (0xab, Result);\r
1237\r
1238 //\r
1239 // Otherwise should result in an error status\r
1240 //\r
1241 Operand = (0x5babababefefefef);\r
1242 Status = SafeInt64ToUint8 (Operand, &Result);\r
1243 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
1244\r
1245 Operand = (-6605562033422200815);\r
1246 Status = SafeInt64ToUint8 (Operand, &Result);\r
1247 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
1248}\r
1249\r
1250TEST(ConversionTestSuite, TestSafeInt64ToInt16) {\r
1251 RETURN_STATUS Status;\r
1252 INT64 Operand;\r
1253 INT16 Result;\r
1254\r
1255 //\r
1256 // If Operand is between MIN_INT16 and MAX_INT16 inclusive, then it's a cast\r
1257 //\r
1258 Operand = 0x5bab;\r
1259 Result = 0;\r
1260 Status = SafeInt64ToInt16 (Operand, &Result);\r
1261 ASSERT_EQ (Status, RETURN_SUCCESS);\r
1262 ASSERT_EQ (0x5bab, Result);\r
1263\r
1264 Operand = (-23467);\r
1265 Status = SafeInt64ToInt16 (Operand, &Result);\r
1266 ASSERT_EQ (Status, RETURN_SUCCESS);\r
1267 ASSERT_EQ ((-23467), Result);\r
1268\r
1269 //\r
1270 // Otherwise should result in an error status\r
1271 //\r
1272 Operand = (0x5babababefefefef);\r
1273 Status = SafeInt64ToInt16 (Operand, &Result);\r
1274 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
1275\r
1276 Operand = (-6605562033422200815);\r
1277 Status = SafeInt64ToInt16 (Operand, &Result);\r
1278 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
1279}\r
1280\r
1281TEST(ConversionTestSuite, TestSafeInt64ToUint16) {\r
1282 RETURN_STATUS Status;\r
1283 INT64 Operand;\r
1284 UINT16 Result;\r
1285\r
1286 //\r
1287 // If Operand is between 0 and MAX_UINT16 inclusive, then it's a cast\r
1288 //\r
1289 Operand = 0xabab;\r
1290 Result = 0;\r
1291 Status = SafeInt64ToUint16 (Operand, &Result);\r
1292 ASSERT_EQ (Status, RETURN_SUCCESS);\r
1293 ASSERT_EQ (0xabab, Result);\r
1294\r
1295 //\r
1296 // Otherwise should result in an error status\r
1297 //\r
1298 Operand = (0x5babababefefefef);\r
1299 Status = SafeInt64ToUint16 (Operand, &Result);\r
1300 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
1301\r
1302 Operand = (-6605562033422200815);\r
1303 Status = SafeInt64ToUint16 (Operand, &Result);\r
1304 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
1305}\r
1306\r
1307TEST(ConversionTestSuite, TestSafeInt64ToInt32) {\r
1308 RETURN_STATUS Status;\r
1309 INT64 Operand;\r
1310 INT32 Result;\r
1311\r
1312 //\r
1313 // If Operand is between MIN_INT32 and MAX_INT32 inclusive, then it's a cast\r
1314 //\r
1315 Operand = 0x5bababab;\r
1316 Result = 0;\r
1317 Status = SafeInt64ToInt32 (Operand, &Result);\r
1318 ASSERT_EQ (Status, RETURN_SUCCESS);\r
1319 ASSERT_EQ (0x5bababab, Result);\r
1320\r
1321 Operand = (-1537977259);\r
1322 Status = SafeInt64ToInt32 (Operand, &Result);\r
1323 ASSERT_EQ (Status, RETURN_SUCCESS);\r
1324 ASSERT_EQ ((-1537977259), Result);\r
1325\r
1326 //\r
1327 // Otherwise should result in an error status\r
1328 //\r
1329 Operand = (0x5babababefefefef);\r
1330 Status = SafeInt64ToInt32 (Operand, &Result);\r
1331 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
1332\r
1333 Operand = (-6605562033422200815);\r
1334 Status = SafeInt64ToInt32 (Operand, &Result);\r
1335 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
1336}\r
1337\r
1338TEST(ConversionTestSuite, TestSafeInt64ToUint32) {\r
1339 RETURN_STATUS Status;\r
1340 INT64 Operand;\r
1341 UINT32 Result;\r
1342\r
1343 //\r
1344 // If Operand is between 0 and MAX_UINT32 inclusive, then it's a cast\r
1345 //\r
1346 Operand = 0xabababab;\r
1347 Result = 0;\r
1348 Status = SafeInt64ToUint32 (Operand, &Result);\r
1349 ASSERT_EQ (Status, RETURN_SUCCESS);\r
1350 ASSERT_EQ (0xabababab, Result);\r
1351\r
1352 //\r
1353 // Otherwise should result in an error status\r
1354 //\r
1355 Operand = (0x5babababefefefef);\r
1356 Status = SafeInt64ToUint32 (Operand, &Result);\r
1357 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
1358\r
1359 Operand = (-6605562033422200815);\r
1360 Status = SafeInt64ToUint32 (Operand, &Result);\r
1361 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
1362}\r
1363\r
1364TEST(ConversionTestSuite, TestSafeInt64ToUint64) {\r
1365 RETURN_STATUS Status;\r
1366 INT64 Operand;\r
1367 UINT64 Result;\r
1368\r
1369 //\r
1370 // If Operand is non-negative, then it's a cast\r
1371 //\r
1372 Operand = 0x5babababefefefef;\r
1373 Result = 0;\r
1374 Status = SafeInt64ToUint64 (Operand, &Result);\r
1375 ASSERT_EQ (Status, RETURN_SUCCESS);\r
1376 ASSERT_EQ ((UINT64)0x5babababefefefef, Result);\r
1377\r
1378 //\r
1379 // Otherwise should result in an error status\r
1380 //\r
1381 Operand = (-6605562033422200815);\r
1382 Status = SafeInt64ToUint64 (Operand, &Result);\r
1383 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
1384}\r
1385\r
1386TEST(ConversionTestSuite, TestSafeUint64ToInt8) {\r
1387 RETURN_STATUS Status;\r
1388 UINT64 Operand;\r
1389 INT8 Result;\r
1390\r
1391 //\r
1392 // If Operand is <= MAX_INT8, then it's a cast\r
1393 //\r
1394 Operand = 0x5b;\r
1395 Result = 0;\r
1396 Status = SafeUint64ToInt8 (Operand, &Result);\r
1397 ASSERT_EQ (Status, RETURN_SUCCESS);\r
1398 ASSERT_EQ (0x5b, Result);\r
1399\r
1400 //\r
1401 // Otherwise should result in an error status\r
1402 //\r
1403 Operand = (0xababababefefefef);\r
1404 Status = SafeUint64ToInt8 (Operand, &Result);\r
1405 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
1406}\r
1407\r
1408TEST(ConversionTestSuite, TestSafeUint64ToChar8) {\r
1409 RETURN_STATUS Status;\r
1410 UINT64 Operand;\r
1411 CHAR8 Result;\r
1412\r
1413 // CHAR8 is typedefed as char, which by default is signed, thus\r
1414 // CHAR8 is same as INT8, so same tests as above:\r
1415\r
1416 //\r
1417 // If Operand is <= MAX_INT8, then it's a cast\r
1418 //\r
1419 Operand = 0x5b;\r
1420 Result = 0;\r
1421 Status = SafeUint64ToChar8 (Operand, &Result);\r
1422 ASSERT_EQ (Status, RETURN_SUCCESS);\r
1423 ASSERT_EQ (0x5b, Result);\r
1424\r
1425 //\r
1426 // Otherwise should result in an error status\r
1427 //\r
1428 Operand = (0xababababefefefef);\r
1429 Status = SafeUint64ToChar8 (Operand, &Result);\r
1430 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
1431}\r
1432\r
1433TEST(ConversionTestSuite, TestSafeUint64ToUint8) {\r
1434 RETURN_STATUS Status;\r
1435 UINT64 Operand;\r
1436 UINT8 Result;\r
1437\r
1438 //\r
1439 // If Operand is <= MAX_UINT8, then it's a cast\r
1440 //\r
1441 Operand = 0xab;\r
1442 Result = 0;\r
1443 Status = SafeUint64ToUint8 (Operand, &Result);\r
1444 ASSERT_EQ (Status, RETURN_SUCCESS);\r
1445 ASSERT_EQ (0xab, Result);\r
1446\r
1447 //\r
1448 // Otherwise should result in an error status\r
1449 //\r
1450 Operand = (0xababababefefefef);\r
1451 Status = SafeUint64ToUint8 (Operand, &Result);\r
1452 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
1453}\r
1454\r
1455TEST(ConversionTestSuite, TestSafeUint64ToInt16) {\r
1456 RETURN_STATUS Status;\r
1457 UINT64 Operand;\r
1458 INT16 Result;\r
1459\r
1460 //\r
1461 // If Operand is <= MAX_INT16, then it's a cast\r
1462 //\r
1463 Operand = 0x5bab;\r
1464 Result = 0;\r
1465 Status = SafeUint64ToInt16 (Operand, &Result);\r
1466 ASSERT_EQ (Status, RETURN_SUCCESS);\r
1467 ASSERT_EQ (0x5bab, Result);\r
1468\r
1469 //\r
1470 // Otherwise should result in an error status\r
1471 //\r
1472 Operand = (0xababababefefefef);\r
1473 Status = SafeUint64ToInt16 (Operand, &Result);\r
1474 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
1475}\r
1476\r
1477TEST(ConversionTestSuite, TestSafeUint64ToUint16) {\r
1478 RETURN_STATUS Status;\r
1479 UINT64 Operand;\r
1480 UINT16 Result;\r
1481\r
1482 //\r
1483 // If Operand is <= MAX_UINT16, then it's a cast\r
1484 //\r
1485 Operand = 0xabab;\r
1486 Result = 0;\r
1487 Status = SafeUint64ToUint16 (Operand, &Result);\r
1488 ASSERT_EQ (Status, RETURN_SUCCESS);\r
1489 ASSERT_EQ (0xabab, Result);\r
1490\r
1491 //\r
1492 // Otherwise should result in an error status\r
1493 //\r
1494 Operand = (0xababababefefefef);\r
1495 Status = SafeUint64ToUint16 (Operand, &Result);\r
1496 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
1497}\r
1498\r
1499TEST(ConversionTestSuite, TestSafeUint64ToInt32) {\r
1500 RETURN_STATUS Status;\r
1501 UINT64 Operand;\r
1502 INT32 Result;\r
1503\r
1504 //\r
1505 // If Operand is <= MAX_INT32, then it's a cast\r
1506 //\r
1507 Operand = 0x5bababab;\r
1508 Result = 0;\r
1509 Status = SafeUint64ToInt32 (Operand, &Result);\r
1510 ASSERT_EQ (Status, RETURN_SUCCESS);\r
1511 ASSERT_EQ (0x5bababab, Result);\r
1512\r
1513 //\r
1514 // Otherwise should result in an error status\r
1515 //\r
1516 Operand = (0xababababefefefef);\r
1517 Status = SafeUint64ToInt32 (Operand, &Result);\r
1518 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
1519}\r
1520\r
1521TEST(ConversionTestSuite, TestSafeUint64ToUint32) {\r
1522 RETURN_STATUS Status;\r
1523 UINT64 Operand;\r
1524 UINT32 Result;\r
1525\r
1526 //\r
1527 // If Operand is <= MAX_UINT32, then it's a cast\r
1528 //\r
1529 Operand = 0xabababab;\r
1530 Result = 0;\r
1531 Status = SafeUint64ToUint32 (Operand, &Result);\r
1532 ASSERT_EQ (Status, RETURN_SUCCESS);\r
1533 ASSERT_EQ (0xabababab, Result);\r
1534\r
1535 //\r
1536 // Otherwise should result in an error status\r
1537 //\r
1538 Operand = (0xababababefefefef);\r
1539 Status = SafeUint64ToUint32 (Operand, &Result);\r
1540 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
1541}\r
1542\r
1543TEST(ConversionTestSuite, TestSafeUint64ToInt64) {\r
1544 RETURN_STATUS Status;\r
1545 UINT64 Operand;\r
1546 INT64 Result;\r
1547\r
1548 //\r
1549 // If Operand is <= MAX_INT64, then it's a cast\r
1550 //\r
1551 Operand = 0x5babababefefefef;\r
1552 Result = 0;\r
1553 Status = SafeUint64ToInt64 (Operand, &Result);\r
1554 ASSERT_EQ (Status, RETURN_SUCCESS);\r
1555 ASSERT_EQ (0x5babababefefefef, Result);\r
1556\r
1557 //\r
1558 // Otherwise should result in an error status\r
1559 //\r
1560 Operand = (0xababababefefefef);\r
1561 Status = SafeUint64ToInt64 (Operand, &Result);\r
1562 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
1563}\r
1564\r
1565//\r
1566// Addition function tests:\r
1567//\r
1568TEST(AdditionSubtractionTestSuite, TestSafeUint8Add) {\r
1569 RETURN_STATUS Status;\r
1570 UINT8 Augend;\r
1571 UINT8 Addend;\r
1572 UINT8 Result;\r
1573\r
1574 //\r
1575 // If the result of addition doesn't overflow MAX_UINT8, then it's addition\r
1576 //\r
1577 Augend = 0x3a;\r
1578 Addend = 0x3a;\r
1579 Result = 0;\r
1580 Status = SafeUint8Add (Augend, Addend, &Result);\r
1581 ASSERT_EQ (Status, RETURN_SUCCESS);\r
1582 ASSERT_EQ (0x74, Result);\r
1583\r
1584 //\r
1585 // Otherwise should result in an error status\r
1586 //\r
1587 Augend = 0xab;\r
1588 Addend = 0xbc;\r
1589 Status = SafeUint8Add (Augend, Addend, &Result);\r
1590 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
1591}\r
1592\r
1593TEST(AdditionSubtractionTestSuite, TestSafeUint16Add) {\r
1594 RETURN_STATUS Status;\r
1595 UINT16 Augend = 0x3a3a;\r
1596 UINT16 Addend = 0x3a3a;\r
1597 UINT16 Result = 0;\r
1598\r
1599 //\r
1600 // If the result of addition doesn't overflow MAX_UINT16, then it's addition\r
1601 //\r
1602 Status = SafeUint16Add (Augend, Addend, &Result);\r
1603 ASSERT_EQ (Status, RETURN_SUCCESS);\r
1604 ASSERT_EQ (0x7474, Result);\r
1605\r
1606 //\r
1607 // Otherwise should result in an error status\r
1608 //\r
1609 Augend = 0xabab;\r
1610 Addend = 0xbcbc;\r
1611 Status = SafeUint16Add (Augend, Addend, &Result);\r
1612 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
1613}\r
1614\r
1615TEST(AdditionSubtractionTestSuite, TestSafeUint32Add) {\r
1616 RETURN_STATUS Status;\r
1617 UINT32 Augend;\r
1618 UINT32 Addend;\r
1619 UINT32 Result;\r
1620\r
1621 //\r
1622 // If the result of addition doesn't overflow MAX_UINT32, then it's addition\r
1623 //\r
1624 Augend = 0x3a3a3a3a;\r
1625 Addend = 0x3a3a3a3a;\r
1626 Result = 0;\r
1627 Status = SafeUint32Add (Augend, Addend, &Result);\r
1628 ASSERT_EQ (Status, RETURN_SUCCESS);\r
1629 ASSERT_EQ ((UINT32)0x74747474, Result);\r
1630\r
1631 //\r
1632 // Otherwise should result in an error status\r
1633 //\r
1634 Augend = 0xabababab;\r
1635 Addend = 0xbcbcbcbc;\r
1636 Status = SafeUint32Add (Augend, Addend, &Result);\r
1637 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
1638}\r
1639\r
1640TEST(AdditionSubtractionTestSuite, TestSafeUint64Add) {\r
1641 RETURN_STATUS Status;\r
1642 UINT64 Augend;\r
1643 UINT64 Addend;\r
1644 UINT64 Result;\r
1645\r
1646 //\r
1647 // If the result of addition doesn't overflow MAX_UINT64, then it's addition\r
1648 //\r
1649 Augend = 0x3a3a3a3a12121212;\r
1650 Addend = 0x3a3a3a3a12121212;\r
1651 Result = 0;\r
1652 Status = SafeUint64Add (Augend, Addend, &Result);\r
1653 ASSERT_EQ (Status, RETURN_SUCCESS);\r
1654 ASSERT_EQ ((UINT64)0x7474747424242424, Result);\r
1655\r
1656 //\r
1657 // Otherwise should result in an error status\r
1658 //\r
1659 Augend = 0xababababefefefef;\r
1660 Addend = 0xbcbcbcbcdededede;\r
1661 Status = SafeUint64Add (Augend, Addend, &Result);\r
1662 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
1663}\r
1664\r
1665TEST(AdditionSubtractionTestSuite, TestSafeInt8Add) {\r
1666 RETURN_STATUS Status;\r
1667 INT8 Augend;\r
1668 INT8 Addend;\r
1669 INT8 Result;\r
1670\r
1671 //\r
1672 // If the result of addition doesn't overflow MAX_INT8\r
1673 // and doesn't underflow MIN_INT8, then it's addition\r
1674 //\r
1675 Augend = 0x3a;\r
1676 Addend = 0x3a;\r
1677 Result = 0;\r
1678 Status = SafeInt8Add (Augend, Addend, &Result);\r
1679 ASSERT_EQ (Status, RETURN_SUCCESS);\r
1680 ASSERT_EQ (0x74, Result);\r
1681\r
1682 Augend = (-58);\r
1683 Addend = (-58);\r
1684 Status = SafeInt8Add (Augend, Addend, &Result);\r
1685 ASSERT_EQ (Status, RETURN_SUCCESS);\r
1686 ASSERT_EQ ((-116), Result);\r
1687\r
1688 //\r
1689 // Otherwise should result in an error status\r
1690 //\r
1691 Augend = 0x5a;\r
1692 Addend = 0x5a;\r
1693 Status = SafeInt8Add (Augend, Addend, &Result);\r
1694 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
1695\r
1696 Augend = (-90);\r
1697 Addend = (-90);\r
1698 Status = SafeInt8Add (Augend, Addend, &Result);\r
1699 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
1700}\r
1701\r
1702TEST(AdditionSubtractionTestSuite, TestSafeInt16Add) {\r
1703 RETURN_STATUS Status;\r
1704 INT16 Augend;\r
1705 INT16 Addend;\r
1706 INT16 Result;\r
1707\r
1708 //\r
1709 // If the result of addition doesn't overflow MAX_INT16\r
1710 // and doesn't underflow MIN_INT16, then it's addition\r
1711 //\r
1712 Augend = 0x3a3a;\r
1713 Addend = 0x3a3a;\r
1714 Result = 0;\r
1715 Status = SafeInt16Add (Augend, Addend, &Result);\r
1716 ASSERT_EQ (Status, RETURN_SUCCESS);\r
1717 ASSERT_EQ (0x7474, Result);\r
1718\r
1719 Augend = (-14906);\r
1720 Addend = (-14906);\r
1721 Status = SafeInt16Add (Augend, Addend, &Result);\r
1722 ASSERT_EQ (Status, RETURN_SUCCESS);\r
1723 ASSERT_EQ ((-29812), Result);\r
1724\r
1725 //\r
1726 // Otherwise should result in an error status\r
1727 //\r
1728 Augend = 0x5a5a;\r
1729 Addend = 0x5a5a;\r
1730 Status = SafeInt16Add (Augend, Addend, &Result);\r
1731 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
1732\r
1733 Augend = (-23130);\r
1734 Addend = (-23130);\r
1735 Status = SafeInt16Add (Augend, Addend, &Result);\r
1736 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
1737}\r
1738\r
1739TEST(AdditionSubtractionTestSuite, TestSafeInt32Add) {\r
1740 RETURN_STATUS Status;\r
1741 INT32 Augend;\r
1742 INT32 Addend;\r
1743 INT32 Result;\r
1744\r
1745 //\r
1746 // If the result of addition doesn't overflow MAX_INT32\r
1747 // and doesn't underflow MIN_INT32, then it's addition\r
1748 //\r
1749 Augend = 0x3a3a3a3a;\r
1750 Addend = 0x3a3a3a3a;\r
1751 Result = 0;\r
1752 Status = SafeInt32Add (Augend, Addend, &Result);\r
1753 ASSERT_EQ (Status, RETURN_SUCCESS);\r
1754 ASSERT_EQ (0x74747474, Result);\r
1755\r
1756 Augend = (-976894522);\r
1757 Addend = (-976894522);\r
1758 Status = SafeInt32Add (Augend, Addend, &Result);\r
1759 ASSERT_EQ (Status, RETURN_SUCCESS);\r
1760 ASSERT_EQ ((-1953789044), Result);\r
1761\r
1762 //\r
1763 // Otherwise should result in an error status\r
1764 //\r
1765 Augend = 0x5a5a5a5a;\r
1766 Addend = 0x5a5a5a5a;\r
1767 Status = SafeInt32Add (Augend, Addend, &Result);\r
1768 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
1769\r
1770 Augend = (-1515870810);\r
1771 Addend = (-1515870810);\r
1772 Status = SafeInt32Add (Augend, Addend, &Result);\r
1773 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
1774}\r
1775\r
1776TEST(AdditionSubtractionTestSuite, TestSafeInt64Add) {\r
1777 RETURN_STATUS Status;\r
1778 INT64 Augend;\r
1779 INT64 Addend;\r
1780 INT64 Result;\r
1781\r
1782 //\r
1783 // If the result of addition doesn't overflow MAX_INT64\r
1784 // and doesn't underflow MIN_INT64, then it's addition\r
1785 //\r
1786 Augend = 0x3a3a3a3a3a3a3a3a;\r
1787 Addend = 0x3a3a3a3a3a3a3a3a;\r
1788 Result = 0;\r
1789 Status = SafeInt64Add (Augend, Addend, &Result);\r
1790 ASSERT_EQ (Status, RETURN_SUCCESS);\r
1791 ASSERT_EQ (0x7474747474747474, Result);\r
1792\r
1793 Augend = (-4195730024608447034);\r
1794 Addend = (-4195730024608447034);\r
1795 Status = SafeInt64Add (Augend, Addend, &Result);\r
1796 ASSERT_EQ (Status, RETURN_SUCCESS);\r
1797 ASSERT_EQ ((-8391460049216894068), Result);\r
1798\r
1799 //\r
1800 // Otherwise should result in an error status\r
1801 //\r
1802 Augend = 0x5a5a5a5a5a5a5a5a;\r
1803 Addend = 0x5a5a5a5a5a5a5a5a;\r
1804 Status = SafeInt64Add (Augend, Addend, &Result);\r
1805 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
1806\r
1807 Augend = (-6510615555426900570);\r
1808 Addend = (-6510615555426900570);\r
1809 Status = SafeInt64Add (Augend, Addend, &Result);\r
1810 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
1811}\r
1812\r
1813//\r
1814// Subtraction function tests:\r
1815//\r
1816TEST(AdditionSubtractionTestSuite, TestSafeUint8Sub) {\r
1817 RETURN_STATUS Status;\r
1818 UINT8 Minuend;\r
1819 UINT8 Subtrahend;\r
1820 UINT8 Result;\r
1821\r
1822 //\r
1823 // If Minuend >= Subtrahend, then it's subtraction\r
1824 //\r
1825 Minuend = 0x5a;\r
1826 Subtrahend = 0x3b;\r
1827 Result = 0;\r
1828 Status = SafeUint8Sub (Minuend, Subtrahend, &Result);\r
1829 ASSERT_EQ (Status, RETURN_SUCCESS);\r
1830 ASSERT_EQ (0x1f, Result);\r
1831\r
1832 //\r
1833 // Otherwise should result in an error status\r
1834 //\r
1835 Minuend = 0x5a;\r
1836 Subtrahend = 0x6d;\r
1837 Status = SafeUint8Sub (Minuend, Subtrahend, &Result);\r
1838 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
1839}\r
1840\r
1841TEST(AdditionSubtractionTestSuite, TestSafeUint16Sub) {\r
1842 RETURN_STATUS Status;\r
1843 UINT16 Minuend;\r
1844 UINT16 Subtrahend;\r
1845 UINT16 Result;\r
1846\r
1847 //\r
1848 // If Minuend >= Subtrahend, then it's subtraction\r
1849 //\r
1850 Minuend = 0x5a5a;\r
1851 Subtrahend = 0x3b3b;\r
1852 Result = 0;\r
1853 Status = SafeUint16Sub (Minuend, Subtrahend, &Result);\r
1854 ASSERT_EQ (Status, RETURN_SUCCESS);\r
1855 ASSERT_EQ (0x1f1f, Result);\r
1856\r
1857 //\r
1858 // Otherwise should result in an error status\r
1859 //\r
1860 Minuend = 0x5a5a;\r
1861 Subtrahend = 0x6d6d;\r
1862 Status = SafeUint16Sub (Minuend, Subtrahend, &Result);\r
1863 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
1864}\r
1865\r
1866TEST(AdditionSubtractionTestSuite, TestSafeUint32Sub) {\r
1867 RETURN_STATUS Status;\r
1868 UINT32 Minuend;\r
1869 UINT32 Subtrahend;\r
1870 UINT32 Result;\r
1871\r
1872 //\r
1873 // If Minuend >= Subtrahend, then it's subtraction\r
1874 //\r
1875 Minuend = 0x5a5a5a5a;\r
1876 Subtrahend = 0x3b3b3b3b;\r
1877 Result = 0;\r
1878 Status = SafeUint32Sub (Minuend, Subtrahend, &Result);\r
1879 ASSERT_EQ (Status, RETURN_SUCCESS);\r
1880 ASSERT_EQ ((UINT32)0x1f1f1f1f, Result);\r
1881\r
1882 //\r
1883 // Otherwise should result in an error status\r
1884 //\r
1885 Minuend = 0x5a5a5a5a;\r
1886 Subtrahend = 0x6d6d6d6d;\r
1887 Status = SafeUint32Sub (Minuend, Subtrahend, &Result);\r
1888 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
1889}\r
1890\r
1891TEST(AdditionSubtractionTestSuite, TestSafeUint64Sub) {\r
1892 RETURN_STATUS Status;\r
1893 UINT64 Minuend;\r
1894 UINT64 Subtrahend;\r
1895 UINT64 Result;\r
1896\r
1897 //\r
1898 // If Minuend >= Subtrahend, then it's subtraction\r
1899 //\r
1900 Minuend = 0x5a5a5a5a5a5a5a5a;\r
1901 Subtrahend = 0x3b3b3b3b3b3b3b3b;\r
1902 Result = 0;\r
1903 Status = SafeUint64Sub (Minuend, Subtrahend, &Result);\r
1904 ASSERT_EQ (Status, RETURN_SUCCESS);\r
1905 ASSERT_EQ ((UINT64)0x1f1f1f1f1f1f1f1f, Result);\r
1906\r
1907 //\r
1908 // Otherwise should result in an error status\r
1909 //\r
1910 Minuend = 0x5a5a5a5a5a5a5a5a;\r
1911 Subtrahend = 0x6d6d6d6d6d6d6d6d;\r
1912 Status = SafeUint64Sub (Minuend, Subtrahend, &Result);\r
1913 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
1914}\r
1915\r
1916TEST(AdditionSubtractionTestSuite, TestSafeInt8Sub) {\r
1917 RETURN_STATUS Status;\r
1918 INT8 Minuend;\r
1919 INT8 Subtrahend;\r
1920 INT8 Result;\r
1921\r
1922 //\r
1923 // If the result of subtractions doesn't overflow MAX_INT8 or\r
1924 // underflow MIN_INT8, then it's subtraction\r
1925 //\r
1926 Minuend = 0x5a;\r
1927 Subtrahend = 0x3a;\r
1928 Result = 0;\r
1929 Status = SafeInt8Sub (Minuend, Subtrahend, &Result);\r
1930 ASSERT_EQ (Status, RETURN_SUCCESS);\r
1931 ASSERT_EQ (0x20, Result);\r
1932\r
1933 Minuend = 58;\r
1934 Subtrahend = 78;\r
1935 Status = SafeInt8Sub (Minuend, Subtrahend, &Result);\r
1936 ASSERT_EQ (Status, RETURN_SUCCESS);\r
1937 ASSERT_EQ ((-20), Result);\r
1938\r
1939 //\r
1940 // Otherwise should result in an error status\r
1941 //\r
1942 Minuend = (-80);\r
1943 Subtrahend = 80;\r
1944 Status = SafeInt8Sub (Minuend, Subtrahend, &Result);\r
1945 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
1946\r
1947 Minuend = (80);\r
1948 Subtrahend = (-80);\r
1949 Status = SafeInt8Sub (Minuend, Subtrahend, &Result);\r
1950 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
1951}\r
1952\r
1953TEST(AdditionSubtractionTestSuite, TestSafeInt16Sub) {\r
1954 RETURN_STATUS Status;\r
1955 INT16 Minuend;\r
1956 INT16 Subtrahend;\r
1957 INT16 Result;\r
1958\r
1959 //\r
1960 // If the result of subtractions doesn't overflow MAX_INT16 or\r
1961 // underflow MIN_INT16, then it's subtraction\r
1962 //\r
1963 Minuend = 0x5a5a;\r
1964 Subtrahend = 0x3a3a;\r
1965 Result = 0;\r
1966 Status = SafeInt16Sub (Minuend, Subtrahend, &Result);\r
1967 ASSERT_EQ (Status, RETURN_SUCCESS);\r
1968 ASSERT_EQ (0x2020, Result);\r
1969\r
1970 Minuend = 0x3a3a;\r
1971 Subtrahend = 0x5a5a;\r
1972 Status = SafeInt16Sub (Minuend, Subtrahend, &Result);\r
1973 ASSERT_EQ (Status, RETURN_SUCCESS);\r
1974 ASSERT_EQ ((-8224), Result);\r
1975\r
1976 //\r
1977 // Otherwise should result in an error status\r
1978 //\r
1979 Minuend = (-31354);\r
1980 Subtrahend = 31354;\r
1981 Status = SafeInt16Sub (Minuend, Subtrahend, &Result);\r
1982 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
1983\r
1984 Minuend = (31354);\r
1985 Subtrahend = (-31354);\r
1986 Status = SafeInt16Sub (Minuend, Subtrahend, &Result);\r
1987 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
1988}\r
1989\r
1990TEST(AdditionSubtractionTestSuite, TestSafeInt32Sub) {\r
1991 RETURN_STATUS Status;\r
1992 INT32 Minuend;\r
1993 INT32 Subtrahend;\r
1994 INT32 Result;\r
1995\r
1996 //\r
1997 // If the result of subtractions doesn't overflow MAX_INT32 or\r
1998 // underflow MIN_INT32, then it's subtraction\r
1999 //\r
2000 Minuend = 0x5a5a5a5a;\r
2001 Subtrahend = 0x3a3a3a3a;\r
2002 Result = 0;\r
2003 Status = SafeInt32Sub (Minuend, Subtrahend, &Result);\r
2004 ASSERT_EQ (Status, RETURN_SUCCESS);\r
2005 ASSERT_EQ (0x20202020, Result);\r
2006\r
2007 Minuend = 0x3a3a3a3a;\r
2008 Subtrahend = 0x5a5a5a5a;\r
2009 Status = SafeInt32Sub (Minuend, Subtrahend, &Result);\r
2010 ASSERT_EQ (Status, RETURN_SUCCESS);\r
2011 ASSERT_EQ ((-538976288), Result);\r
2012\r
2013 //\r
2014 // Otherwise should result in an error status\r
2015 //\r
2016 Minuend = (-2054847098);\r
2017 Subtrahend = 2054847098;\r
2018 Status = SafeInt32Sub (Minuend, Subtrahend, &Result);\r
2019 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
2020\r
2021 Minuend = (2054847098);\r
2022 Subtrahend = (-2054847098);\r
2023 Status = SafeInt32Sub (Minuend, Subtrahend, &Result);\r
2024 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
2025}\r
2026\r
2027TEST(AdditionSubtractionTestSuite, TestSafeInt64Sub) {\r
2028 RETURN_STATUS Status;\r
2029 INT64 Minuend;\r
2030 INT64 Subtrahend;\r
2031 INT64 Result;\r
2032\r
2033 //\r
2034 // If the result of subtractions doesn't overflow MAX_INT64 or\r
2035 // underflow MIN_INT64, then it's subtraction\r
2036 //\r
2037 Minuend = 0x5a5a5a5a5a5a5a5a;\r
2038 Subtrahend = 0x3a3a3a3a3a3a3a3a;\r
2039 Result = 0;\r
2040 Status = SafeInt64Sub (Minuend, Subtrahend, &Result);\r
2041 ASSERT_EQ (Status, RETURN_SUCCESS);\r
2042 ASSERT_EQ (0x2020202020202020, Result);\r
2043\r
2044 Minuend = 0x3a3a3a3a3a3a3a3a;\r
2045 Subtrahend = 0x5a5a5a5a5a5a5a5a;\r
2046 Status = SafeInt64Sub (Minuend, Subtrahend, &Result);\r
2047 ASSERT_EQ (Status, RETURN_SUCCESS);\r
2048 ASSERT_EQ ((-2314885530818453536), Result);\r
2049\r
2050 //\r
2051 // Otherwise should result in an error status\r
2052 //\r
2053 Minuend = (-8825501086245354106);\r
2054 Subtrahend = 8825501086245354106;\r
2055 Status = SafeInt64Sub (Minuend, Subtrahend, &Result);\r
2056 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
2057\r
2058 Minuend = (8825501086245354106);\r
2059 Subtrahend = (-8825501086245354106);\r
2060 Status = SafeInt64Sub (Minuend, Subtrahend, &Result);\r
2061 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
2062}\r
2063\r
2064//\r
2065// Multiplication function tests:\r
2066//\r
2067TEST(MultiplicationTestSuite, TestSafeUint8Mult) {\r
2068 RETURN_STATUS Status;\r
2069 UINT8 Multiplicand;\r
2070 UINT8 Multiplier;\r
2071 UINT8 Result;\r
2072\r
2073 //\r
2074 // If the result of multiplication doesn't overflow MAX_UINT8, it will succeed\r
2075 //\r
2076 Multiplicand = 0x12;\r
2077 Multiplier = 0xa;\r
2078 Result = 0;\r
2079 Status = SafeUint8Mult (Multiplicand, Multiplier, &Result);\r
2080 ASSERT_EQ (Status, RETURN_SUCCESS);\r
2081 ASSERT_EQ (0xb4, Result);\r
2082\r
2083 //\r
2084 // Otherwise should result in an error status\r
2085 //\r
2086 Multiplicand = 0x12;\r
2087 Multiplier = 0x23;\r
2088 Status = SafeUint8Mult (Multiplicand, Multiplier, &Result);\r
2089 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
2090}\r
2091\r
2092TEST(MultiplicationTestSuite, TestSafeUint16Mult) {\r
2093 RETURN_STATUS Status;\r
2094 UINT16 Multiplicand;\r
2095 UINT16 Multiplier;\r
2096 UINT16 Result;\r
2097\r
2098 //\r
2099 // If the result of multiplication doesn't overflow MAX_UINT16, it will succeed\r
2100 //\r
2101 Multiplicand = 0x212;\r
2102 Multiplier = 0x7a;\r
2103 Result = 0;\r
2104 Status = SafeUint16Mult (Multiplicand, Multiplier, &Result);\r
2105 ASSERT_EQ (Status, RETURN_SUCCESS);\r
2106 ASSERT_EQ (0xfc94, Result);\r
2107\r
2108 //\r
2109 // Otherwise should result in an error status\r
2110 //\r
2111 Multiplicand = 0x1234;\r
2112 Multiplier = 0x213;\r
2113 Status = SafeUint16Mult (Multiplicand, Multiplier, &Result);\r
2114 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
2115}\r
2116\r
2117TEST(MultiplicationTestSuite, TestSafeUint32Mult) {\r
2118 RETURN_STATUS Status;\r
2119 UINT32 Multiplicand;\r
2120 UINT32 Multiplier;\r
2121 UINT32 Result;\r
2122\r
2123 //\r
2124 // If the result of multiplication doesn't overflow MAX_UINT32, it will succeed\r
2125 //\r
2126 Multiplicand = 0xa122a;\r
2127 Multiplier = 0xd23;\r
2128 Result = 0;\r
2129 Status = SafeUint32Mult (Multiplicand, Multiplier, &Result);\r
2130 ASSERT_EQ (Status, RETURN_SUCCESS);\r
2131 ASSERT_EQ (0x844c9dbe, Result);\r
2132\r
2133 //\r
2134 // Otherwise should result in an error status\r
2135 //\r
2136 Multiplicand = 0xa122a;\r
2137 Multiplier = 0xed23;\r
2138 Status = SafeUint32Mult (Multiplicand, Multiplier, &Result);\r
2139 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
2140}\r
2141\r
2142TEST(MultiplicationTestSuite, TestSafeUint64Mult) {\r
2143 RETURN_STATUS Status;\r
2144 UINT64 Multiplicand;\r
2145 UINT64 Multiplier;\r
2146 UINT64 Result;\r
2147\r
2148 //\r
2149 // If the result of multiplication doesn't overflow MAX_UINT64, it will succeed\r
2150 //\r
2151 Multiplicand = 0x123456789a;\r
2152 Multiplier = 0x1234567;\r
2153 Result = 0;\r
2154 Status = SafeUint64Mult (Multiplicand, Multiplier, &Result);\r
2155 ASSERT_EQ (Status, RETURN_SUCCESS);\r
2156 ASSERT_EQ ((UINT64)0x14b66db9745a07f6, Result);\r
2157\r
2158 //\r
2159 // Otherwise should result in an error status\r
2160 //\r
2161 Multiplicand = 0x123456789a;\r
2162 Multiplier = 0x12345678;\r
2163 Status = SafeUint64Mult (Multiplicand, Multiplier, &Result);\r
2164 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
2165}\r
2166\r
2167TEST(MultiplicationTestSuite, TestSafeInt8Mult) {\r
2168 RETURN_STATUS Status;\r
2169 INT8 Multiplicand;\r
2170 INT8 Multiplier;\r
2171 INT8 Result;\r
2172\r
2173 //\r
2174 // If the result of multiplication doesn't overflow MAX_INT8 and doesn't\r
2175 // underflow MIN_UINT8, it will succeed\r
2176 //\r
2177 Multiplicand = 0x12;\r
2178 Multiplier = 0x7;\r
2179 Result = 0;\r
2180 Status = SafeInt8Mult (Multiplicand, Multiplier, &Result);\r
2181 ASSERT_EQ (Status, RETURN_SUCCESS);\r
2182 ASSERT_EQ (0x7e, Result);\r
2183\r
2184 //\r
2185 // Otherwise should result in an error status\r
2186 //\r
2187 Multiplicand = 0x12;\r
2188 Multiplier = 0xa;\r
2189 Status = SafeInt8Mult (Multiplicand, Multiplier, &Result);\r
2190 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
2191}\r
2192\r
2193TEST(MultiplicationTestSuite, TestSafeInt16Mult) {\r
2194 RETURN_STATUS Status;\r
2195 INT16 Multiplicand;\r
2196 INT16 Multiplier;\r
2197 INT16 Result;\r
2198\r
2199 //\r
2200 // If the result of multiplication doesn't overflow MAX_INT16 and doesn't\r
2201 // underflow MIN_UINT16, it will succeed\r
2202 //\r
2203 Multiplicand = 0x123;\r
2204 Multiplier = 0x67;\r
2205 Result = 0;\r
2206 Status = SafeInt16Mult (Multiplicand, Multiplier, &Result);\r
2207 ASSERT_EQ (Status, RETURN_SUCCESS);\r
2208 ASSERT_EQ (0x7515, Result);\r
2209\r
2210 //\r
2211 // Otherwise should result in an error status\r
2212 //\r
2213 Multiplicand = 0x123;\r
2214 Multiplier = 0xab;\r
2215 Status = SafeInt16Mult (Multiplicand, Multiplier, &Result);\r
2216 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
2217}\r
2218\r
2219TEST(MultiplicationTestSuite, TestSafeInt32Mult) {\r
2220 RETURN_STATUS Status;\r
2221 INT32 Multiplicand;\r
2222 INT32 Multiplier;\r
2223 INT32 Result;\r
2224\r
2225 //\r
2226 // If the result of multiplication doesn't overflow MAX_INT32 and doesn't\r
2227 // underflow MIN_UINT32, it will succeed\r
2228 //\r
2229 Multiplicand = 0x123456;\r
2230 Multiplier = 0x678;\r
2231 Result = 0;\r
2232 Status = SafeInt32Mult (Multiplicand, Multiplier, &Result);\r
2233 ASSERT_EQ (Status, RETURN_SUCCESS);\r
2234 ASSERT_EQ (0x75c28c50, Result);\r
2235\r
2236 //\r
2237 // Otherwise should result in an error status\r
2238 //\r
2239 Multiplicand = 0x123456;\r
2240 Multiplier = 0xabc;\r
2241 Status = SafeInt32Mult (Multiplicand, Multiplier, &Result);\r
2242 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
2243}\r
2244\r
2245TEST(MultiplicationTestSuite, TestSafeInt64Mult) {\r
2246 RETURN_STATUS Status;\r
2247 INT64 Multiplicand;\r
2248 INT64 Multiplier;\r
2249 INT64 Result;\r
2250\r
2251 //\r
2252 // If the result of multiplication doesn't overflow MAX_INT64 and doesn't\r
2253 // underflow MIN_UINT64, it will succeed\r
2254 //\r
2255 Multiplicand = 0x123456789;\r
2256 Multiplier = 0x6789abcd;\r
2257 Result = 0;\r
2258 Status = SafeInt64Mult (Multiplicand, Multiplier, &Result);\r
2259 ASSERT_EQ (Status, RETURN_SUCCESS);\r
2260 ASSERT_EQ (0x75cd9045220d6bb5, Result);\r
2261\r
2262 //\r
2263 // Otherwise should result in an error status\r
2264 //\r
2265 Multiplicand = 0x123456789;\r
2266 Multiplier = 0xa789abcd;\r
2267 Status = SafeInt64Mult (Multiplicand, Multiplier, &Result);\r
2268 ASSERT_EQ (RETURN_BUFFER_TOO_SMALL, Status);\r
2269}\r
2270\r
2271int main(int argc, char* argv[]) {\r
2272 testing::InitGoogleTest(&argc, argv);\r
2273 return RUN_ALL_TESTS();\r
2274}\r