| 4665 | }; |
| 4666 | |
| 4667 | void SubVerifyUint8Int64() |
| 4668 | { |
| 4669 | size_t i; |
| 4670 | |
| 4671 | for( i = 0; i < COUNTOF(uint8_int64); ++i ) |
| 4672 | { |
| 4673 | std::uint8_t ret; |
| 4674 | if( SafeSubtract(uint8_int64[i].x, uint8_int64[i].y, ret) != uint8_int64[i].fExpected ) |
| 4675 | { |
| 4676 | cerr << "Error in case uint8_int64: "; |
| 4677 | cerr << hex << setw(2) << setfill('0') << (0xFF & (int)uint8_int64[i].x) << ", "; |
| 4678 | cerr << hex << setw(16) << setfill('0') << uint8_int64[i].y << ", "; |
| 4679 | cerr << "expected = " << uint8_int64[i].fExpected << endl; |
| 4680 | } |
| 4681 | |
| 4682 | // Now test throwing version |
| 4683 | bool fSuccess = true; |
| 4684 | try |
| 4685 | { |
| 4686 | SafeInt<std::uint8_t> si(uint8_int64[i].x); |
| 4687 | si -= uint8_int64[i].y; |
| 4688 | } |
| 4689 | catch(...) |
| 4690 | { |
| 4691 | fSuccess = false; |
| 4692 | } |
| 4693 | |
| 4694 | if( fSuccess != uint8_int64[i].fExpected ) |
| 4695 | { |
| 4696 | cerr << "Error in case uint8_int64 throw (1): "; |
| 4697 | cerr << hex << setw(2) << setfill('0') << (0xFF & (int)uint8_int64[i].x) << ", "; |
| 4698 | cerr << hex << setw(16) << setfill('0') << uint8_int64[i].y << ", "; |
| 4699 | cerr << "expected = " << uint8_int64[i].fExpected << endl; |
| 4700 | } |
| 4701 | |
| 4702 | // Also need to test the version that assigns back out |
| 4703 | // to a plain int, as it has different logic |
| 4704 | fSuccess = true; |
| 4705 | try |
| 4706 | { |
| 4707 | std::uint8_t x(uint8_int64[i].x); |
| 4708 | x -= SafeInt<std::int64_t>(uint8_int64[i].y); |
| 4709 | } |
| 4710 | catch(...) |
| 4711 | { |
| 4712 | fSuccess = false; |
| 4713 | } |
| 4714 | |
| 4715 | if( fSuccess != uint8_int64[i].fExpected ) |
| 4716 | { |
| 4717 | cerr << "Error in case uint8_int64 throw (2): "; |
| 4718 | cerr << hex << setw(2) << setfill('0') << (0xFF & (int)uint8_int64[i].x) << ", "; |
| 4719 | cerr << hex << setw(16) << setfill('0') << uint8_int64[i].y << ", "; |
| 4720 | cerr << "expected = " << uint8_int64[i].fExpected << endl; |
| 4721 | } |
| 4722 | } |
| 4723 | } |
| 4724 |
no test coverage detected