| 5851 | }; |
| 5852 | |
| 5853 | void AddVerifyInt8Uint32() |
| 5854 | { |
| 5855 | size_t i; |
| 5856 | |
| 5857 | for( i = 0; i < COUNTOF(int8_uint32); ++i ) |
| 5858 | { |
| 5859 | std::int8_t ret; |
| 5860 | if( SafeAdd(int8_uint32[i].x, int8_uint32[i].y, ret) != int8_uint32[i].fExpected ) |
| 5861 | { |
| 5862 | cerr << "Error in case int8_uint32: "; |
| 5863 | cerr << HEX(2) << (0xFF & (int)int8_uint32[i].x) << ", "; |
| 5864 | cerr << HEX(8) << int8_uint32[i].y << ", "; |
| 5865 | cerr << "expected = " << int8_uint32[i].fExpected << endl; |
| 5866 | } |
| 5867 | |
| 5868 | // Now test throwing version |
| 5869 | bool fSuccess = true; |
| 5870 | try |
| 5871 | { |
| 5872 | SafeInt<std::int8_t> si(int8_uint32[i].x); |
| 5873 | si += int8_uint32[i].y; |
| 5874 | } |
| 5875 | catch(...) |
| 5876 | { |
| 5877 | fSuccess = false; |
| 5878 | } |
| 5879 | |
| 5880 | if( fSuccess != int8_uint32[i].fExpected ) |
| 5881 | { |
| 5882 | cerr << "Error in case int8_uint32 throw (1): "; |
| 5883 | cerr << HEX(2) << (0xFF & (int)int8_uint32[i].x) << ", "; |
| 5884 | cerr << HEX(8) << int8_uint32[i].y << ", "; |
| 5885 | cerr << "expected = " << int8_uint32[i].fExpected << endl; |
| 5886 | } |
| 5887 | |
| 5888 | // Also need to test the version that assigns back out |
| 5889 | // to a plain int, as it has different logic |
| 5890 | fSuccess = true; |
| 5891 | try |
| 5892 | { |
| 5893 | std::int8_t x(int8_uint32[i].x); |
| 5894 | x += SafeInt<std::uint32_t>(int8_uint32[i].y); |
| 5895 | } |
| 5896 | catch(...) |
| 5897 | { |
| 5898 | fSuccess = false; |
| 5899 | } |
| 5900 | |
| 5901 | if( fSuccess != int8_uint32[i].fExpected ) |
| 5902 | { |
| 5903 | cerr << "Error in case int8_uint32 throw (2): "; |
| 5904 | cerr << HEX(2) << (0xFF & (int)int8_uint32[i].x) << ", "; |
| 5905 | cerr << HEX(8) << int8_uint32[i].y << ", "; |
| 5906 | cerr << "expected = " << int8_uint32[i].fExpected << endl; |
| 5907 | } |
| 5908 | } |
| 5909 | } |
| 5910 | |