|
|
@ -26,19 +26,19 @@ struct AdditionTestValues;
|
|
|
|
* Overload for unsigned types.
|
|
|
|
* Overload for unsigned types.
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
template <typename T>
|
|
|
|
template <typename T>
|
|
|
|
struct AdditionTestValues<T, typename std::enable_if<!std::is_signed<T>::VALUE>::type> {
|
|
|
|
struct AdditionTestValues<T, std::enable_if_t<!std::is_signed_v<T>>> {
|
|
|
|
static const size_t case_count = 5;
|
|
|
|
static const size_t case_count = 5;
|
|
|
|
static const T summand[case_count];
|
|
|
|
static const T summand[case_count];
|
|
|
|
static const bool overflow[case_count][case_count];
|
|
|
|
static const bool overflow[case_count][case_count];
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
template <typename T>
|
|
|
|
template <typename T>
|
|
|
|
const T AdditionTestValues<T, typename std::enable_if<!std::is_signed<T>::VALUE>::type>::summand[] = {
|
|
|
|
const T AdditionTestValues<T, std::enable_if_t<!std::is_signed_v<T>>>::summand[] = {
|
|
|
|
0, 1, 2, static_cast<T>(std::numeric_limits<T>::max() - 1), std::numeric_limits<T>::max()};
|
|
|
|
0, 1, 2, static_cast<T>(std::numeric_limits<T>::max() - 1), std::numeric_limits<T>::max()};
|
|
|
|
|
|
|
|
|
|
|
|
template <typename T>
|
|
|
|
template <typename T>
|
|
|
|
const bool AdditionTestValues<
|
|
|
|
const bool AdditionTestValues<
|
|
|
|
T, typename std::enable_if<!std::is_signed<T>::VALUE>::type>::overflow[case_count][case_count] = {
|
|
|
|
T, std::enable_if_t<!std::is_signed_v<T>>>::overflow[case_count][case_count] = {
|
|
|
|
// 0
|
|
|
|
// 0
|
|
|
|
{false, false, false, false, false},
|
|
|
|
{false, false, false, false, false},
|
|
|
|
// 1
|
|
|
|
// 1
|
|
|
@ -54,14 +54,14 @@ const bool AdditionTestValues<
|
|
|
|
* Overload for signed integers
|
|
|
|
* Overload for signed integers
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
template <typename T>
|
|
|
|
template <typename T>
|
|
|
|
struct AdditionTestValues<T, typename std::enable_if<std::is_signed<T>::VALUE>::type> {
|
|
|
|
struct AdditionTestValues<T, std::enable_if_t<std::is_signed_v<T>>> {
|
|
|
|
static const size_t case_count = 8;
|
|
|
|
static const size_t case_count = 8;
|
|
|
|
static const T summand[case_count];
|
|
|
|
static const T summand[case_count];
|
|
|
|
static const bool overflow[case_count][case_count];
|
|
|
|
static const bool overflow[case_count][case_count];
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
template <typename T>
|
|
|
|
template <typename T>
|
|
|
|
const T AdditionTestValues<T, typename std::enable_if<std::is_signed<T>::VALUE>::type>::summand[] = {
|
|
|
|
const T AdditionTestValues<T, std::enable_if_t<std::is_signed_v<T>>>::summand[] = {
|
|
|
|
std::numeric_limits<T>::min(),
|
|
|
|
std::numeric_limits<T>::min(),
|
|
|
|
static_cast<T>(std::numeric_limits<T>::min() + 1),
|
|
|
|
static_cast<T>(std::numeric_limits<T>::min() + 1),
|
|
|
|
-1,
|
|
|
|
-1,
|
|
|
@ -73,7 +73,7 @@ const T AdditionTestValues<T, typename std::enable_if<std::is_signed<T>::VALUE>:
|
|
|
|
|
|
|
|
|
|
|
|
template <typename T>
|
|
|
|
template <typename T>
|
|
|
|
const bool
|
|
|
|
const bool
|
|
|
|
AdditionTestValues<T, typename std::enable_if<std::is_signed<T>::VALUE>::type>::overflow[case_count][case_count] = {
|
|
|
|
AdditionTestValues<T, std::enable_if_t<std::is_signed_v<T>>>::overflow[case_count][case_count] = {
|
|
|
|
// min
|
|
|
|
// min
|
|
|
|
{true, true, true, false, false, false, false, false},
|
|
|
|
{true, true, true, false, false, false, false, false},
|
|
|
|
// min + 1
|
|
|
|
// min + 1
|
|
|
|