1349 lines
66 KiB
C++
1349 lines
66 KiB
C++
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
// Licensed under the MIT License.
|
|
|
|
#if defined _MSC_VER
|
|
// Inline expansion warnings
|
|
#pragma warning(disable:4710 4711)
|
|
#endif
|
|
|
|
#include "TestMain.h"
|
|
#include "TestCase.h"
|
|
/*
|
|
* Interesting numbers:
|
|
*
|
|
* std::uint64_t
|
|
* 0, 1, 2, 0x7fffffff, 0x80000000, 0xffffffff, 0x100000000, 0x200000000, 0x7fffffffffffffff, 0x8000000000000000, 0xffffffffffffffff
|
|
* std::uint32_t
|
|
* 0, 1, 2, 0x7fffffff, 0x80000000, 0xffffffff
|
|
* std::int64_t
|
|
* 0, 1, 2, 0x7fffffff, 0x80000000, 0xffffffff, 0x100000000, 0x200000000, 0x7fffffffffffffff, 0x8000000000000000, 0xffffffffffffffff
|
|
*/
|
|
|
|
static const TestCase< std::uint64_t, std::uint64_t, OpType::Mult > uint64_uint64[] =
|
|
{
|
|
{ 0, 0, true },
|
|
{ 1, 0, true },
|
|
{ 2, 0, true },
|
|
{ 0x7fffffff, 0, true },
|
|
{ 0x80000000, 0, true },
|
|
{ 0xffffffff, 0, true },
|
|
{ 0x100000000, 0, true },
|
|
{ 0x200000000, 0, true },
|
|
{ 0x7fffffffffffffff, 0, true },
|
|
{ 0x8000000000000000, 0, true },
|
|
{ 0xffffffffffffffff, 0, true },
|
|
{ 0, 1, true },
|
|
{ 1, 1, true },
|
|
{ 2, 1, true },
|
|
{ 0x7fffffff, 1, true },
|
|
{ 0x80000000, 1, true },
|
|
{ 0xffffffff, 1, true },
|
|
{ 0x100000000, 1, true },
|
|
{ 0x200000000, 1, true },
|
|
{ 0x7fffffffffffffff, 1, true },
|
|
{ 0x8000000000000000, 1, true },
|
|
{ 0xffffffffffffffff, 1, true },
|
|
{ 0, 2, true },
|
|
{ 1, 2, true },
|
|
{ 2, 2, true },
|
|
{ 0x7fffffff, 2, true },
|
|
{ 0x80000000, 2, true },
|
|
{ 0xffffffff, 2, true },
|
|
{ 0x100000000, 2, true },
|
|
{ 0x200000000, 2, true },
|
|
{ 0x7fffffffffffffff, 2, true },
|
|
{ 0x8000000000000000, 2, false },
|
|
{ 0xffffffffffffffff, 2, false },
|
|
{ 0, 0x7fffffff, true },
|
|
{ 1, 0x7fffffff, true },
|
|
{ 2, 0x7fffffff, true },
|
|
{ 0x7fffffff, 0x7fffffff, true },
|
|
{ 0x80000000, 0x7fffffff, true },
|
|
{ 0xffffffff, 0x7fffffff, true },
|
|
{ 0x100000000, 0x7fffffff, true },
|
|
{ 0x200000000, 0x7fffffff, true },
|
|
{ 0x7fffffffffffffff, 0x7fffffff, false },
|
|
{ 0x8000000000000000, 0x7fffffff, false },
|
|
{ 0xffffffffffffffff, 0x7fffffff, false },
|
|
{ 0, 0x80000000, true },
|
|
{ 1, 0x80000000, true },
|
|
{ 2, 0x80000000, true },
|
|
{ 0x7fffffff, 0x80000000, true },
|
|
{ 0x80000000, 0x80000000, true },
|
|
{ 0xffffffff, 0x80000000, true },
|
|
{ 0x100000000, 0x80000000, true },
|
|
{ 0x200000000, 0x80000000, false },
|
|
{ 0x7fffffffffffffff, 0x80000000, false },
|
|
{ 0x8000000000000000, 0x80000000, false },
|
|
{ 0xffffffffffffffff, 0x80000000, false },
|
|
{ 0, 0xffffffff, true },
|
|
{ 1, 0xffffffff, true },
|
|
{ 2, 0xffffffff, true },
|
|
{ 0x7fffffff, 0xffffffff, true },
|
|
{ 0x80000000, 0xffffffff, true },
|
|
{ 0xffffffff, 0xffffffff, true },
|
|
{ 0x100000000, 0xffffffff, true },
|
|
{ 0x200000000, 0xffffffff, false },
|
|
{ 0x7fffffffffffffff, 0xffffffff, false },
|
|
{ 0x8000000000000000, 0xffffffff, false },
|
|
{ 0xffffffffffffffff, 0xffffffff, false },
|
|
{ 0, 0x100000000, true },
|
|
{ 1, 0x100000000, true },
|
|
{ 2, 0x100000000, true },
|
|
{ 0x7fffffff, 0x100000000, true },
|
|
{ 0x80000000, 0x100000000, true },
|
|
{ 0xffffffff, 0x100000000, true },
|
|
{ 0x100000000, 0x100000000, false },
|
|
{ 0x200000000, 0x100000000, false },
|
|
{ 0x7fffffffffffffff, 0x100000000, false },
|
|
{ 0x8000000000000000, 0x100000000, false },
|
|
{ 0xffffffffffffffff, 0x100000000, false },
|
|
{ 0, 0x200000000, true },
|
|
{ 1, 0x200000000, true },
|
|
{ 2, 0x200000000, true },
|
|
{ 0x7fffffff, 0x200000000, true },
|
|
{ 0x80000000, 0x200000000, false },
|
|
{ 0xffffffff, 0x200000000, false },
|
|
{ 0x100000000, 0x200000000, false },
|
|
{ 0x200000000, 0x200000000, false },
|
|
{ 0x7fffffffffffffff, 0x200000000, false },
|
|
{ 0x8000000000000000, 0x200000000, false },
|
|
{ 0xffffffffffffffff, 0x200000000, false },
|
|
{ 0, 0x7fffffffffffffff, true },
|
|
{ 1, 0x7fffffffffffffff, true },
|
|
{ 2, 0x7fffffffffffffff, true },
|
|
{ 0x7fffffff, 0x7fffffffffffffff, false },
|
|
{ 0x80000000, 0x7fffffffffffffff, false },
|
|
{ 0xffffffff, 0x7fffffffffffffff, false },
|
|
{ 0x100000000, 0x7fffffffffffffff, false },
|
|
{ 0x200000000, 0x7fffffffffffffff, false },
|
|
{ 0x7fffffffffffffff, 0x7fffffffffffffff, false },
|
|
{ 0x8000000000000000, 0x7fffffffffffffff, false },
|
|
{ 0xffffffffffffffff, 0x7fffffffffffffff, false },
|
|
{ 0, 0x8000000000000000, true },
|
|
{ 1, 0x8000000000000000, true },
|
|
{ 2, 0x8000000000000000, false },
|
|
{ 0x7fffffff, 0x8000000000000000, false },
|
|
{ 0x80000000, 0x8000000000000000, false },
|
|
{ 0xffffffff, 0x8000000000000000, false },
|
|
{ 0x100000000, 0x8000000000000000, false },
|
|
{ 0x200000000, 0x8000000000000000, false },
|
|
{ 0x7fffffffffffffff, 0x8000000000000000, false },
|
|
{ 0x8000000000000000, 0x8000000000000000, false },
|
|
{ 0xffffffffffffffff, 0x8000000000000000, false },
|
|
{ 0, 0xffffffffffffffff, true },
|
|
{ 1, 0xffffffffffffffff, true },
|
|
{ 2, 0xffffffffffffffff, false },
|
|
{ 0x7fffffff, 0xffffffffffffffff, false },
|
|
{ 0x80000000, 0xffffffffffffffff, false },
|
|
{ 0xffffffff, 0xffffffffffffffff, false },
|
|
{ 0x100000000, 0xffffffffffffffff, false },
|
|
{ 0x200000000, 0xffffffffffffffff, false },
|
|
{ 0x7fffffffffffffff, 0xffffffffffffffff, false },
|
|
{ 0x8000000000000000, 0xffffffffffffffff, false },
|
|
{ 0xffffffffffffffff, 0xffffffffffffffff, false },
|
|
// Special case - force addition overflow case
|
|
{ 0xffffffff, 0x100000002, false }
|
|
};
|
|
|
|
template<> TestVector< std::uint64_t, std::uint64_t, OpType::Mult>::TestVector() : current(0)
|
|
{
|
|
this->test_cases = uint64_uint64;
|
|
this->count = COUNTOF(uint64_uint64);
|
|
}
|
|
|
|
static const TestCase< std::uint64_t, std::uint32_t, OpType::Mult > uint64_uint32[] =
|
|
{
|
|
{ 0, 0, true },
|
|
{ 1, 0, true },
|
|
{ 2, 0, true },
|
|
{ 0x7fffffff, 0, true },
|
|
{ 0x80000000, 0, true },
|
|
{ 0xffffffff, 0, true },
|
|
{ 0x100000000, 0, true },
|
|
{ 0x200000000, 0, true },
|
|
{ 0x7fffffffffffffff, 0, true },
|
|
{ 0x8000000000000000, 0, true },
|
|
{ 0xffffffffffffffff, 0, true },
|
|
{ 0, 1, true },
|
|
{ 1, 1, true },
|
|
{ 2, 1, true },
|
|
{ 0x7fffffff, 1, true },
|
|
{ 0x80000000, 1, true },
|
|
{ 0xffffffff, 1, true },
|
|
{ 0x100000000, 1, true },
|
|
{ 0x200000000, 1, true },
|
|
{ 0x7fffffffffffffff, 1, true },
|
|
{ 0x8000000000000000, 1, true },
|
|
{ 0xffffffffffffffff, 1, true },
|
|
{ 0, 2, true },
|
|
{ 1, 2, true },
|
|
{ 2, 2, true },
|
|
{ 0x7fffffff, 2, true },
|
|
{ 0x80000000, 2, true },
|
|
{ 0xffffffff, 2, true },
|
|
{ 0x100000000, 2, true },
|
|
{ 0x200000000, 2, true },
|
|
{ 0x7fffffffffffffff, 2, true },
|
|
{ 0x8000000000000000, 2, false },
|
|
{ 0xffffffffffffffff, 2, false },
|
|
{ 0, 0x7fffffff, true },
|
|
{ 1, 0x7fffffff, true },
|
|
{ 2, 0x7fffffff, true },
|
|
{ 0x7fffffff, 0x7fffffff, true },
|
|
{ 0x80000000, 0x7fffffff, true },
|
|
{ 0xffffffff, 0x7fffffff, true },
|
|
{ 0x100000000, 0x7fffffff, true },
|
|
{ 0x200000000, 0x7fffffff, true },
|
|
{ 0x7fffffffffffffff, 0x7fffffff, false },
|
|
{ 0x8000000000000000, 0x7fffffff, false },
|
|
{ 0xffffffffffffffff, 0x7fffffff, false },
|
|
{ 0, 0x80000000, true },
|
|
{ 1, 0x80000000, true },
|
|
{ 2, 0x80000000, true },
|
|
{ 0x7fffffff, 0x80000000, true },
|
|
{ 0x80000000, 0x80000000, true },
|
|
{ 0xffffffff, 0x80000000, true },
|
|
{ 0x100000000, 0x80000000, true },
|
|
{ 0x200000000, 0x80000000, false },
|
|
{ 0x7fffffffffffffff, 0x80000000, false },
|
|
{ 0x8000000000000000, 0x80000000, false },
|
|
{ 0xffffffffffffffff, 0x80000000, false },
|
|
{ 0, 0xffffffff, true },
|
|
{ 1, 0xffffffff, true },
|
|
{ 2, 0xffffffff, true },
|
|
{ 0x7fffffff, 0xffffffff, true },
|
|
{ 0x80000000, 0xffffffff, true },
|
|
{ 0xffffffff, 0xffffffff, true },
|
|
{ 0x100000000, 0xffffffff, true },
|
|
{ 0x200000000, 0xffffffff, false },
|
|
{ 0x7fffffffffffffff, 0xffffffff, false },
|
|
{ 0x8000000000000000, 0xffffffff, false },
|
|
{ 0xffffffffffffffff, 0xffffffff, false }
|
|
};
|
|
|
|
template<> TestVector< std::uint64_t, std::uint32_t, OpType::Mult>::TestVector() : current(0)
|
|
{
|
|
this->test_cases = uint64_uint32;
|
|
this->count = COUNTOF(uint64_uint32);
|
|
}
|
|
|
|
static const TestCase< std::uint64_t, std::int64_t, OpType::Mult > uint64_int64[] =
|
|
{
|
|
{ 0, 0, true },
|
|
{ 1, 0, true },
|
|
{ 2, 0, true },
|
|
{ 0x7fffffff, 0, true },
|
|
{ 0x80000000, 0, true },
|
|
{ 0xffffffff, 0, true },
|
|
{ 0x100000000, 0, true },
|
|
{ 0x200000000, 0, true },
|
|
{ 0x7fffffffffffffff, 0, true },
|
|
{ 0x8000000000000000, 0, true },
|
|
{ 0xffffffffffffffff, 0, true },
|
|
{ 0, 1, true },
|
|
{ 1, 1, true },
|
|
{ 2, 1, true },
|
|
{ 0x7fffffff, 1, true },
|
|
{ 0x80000000, 1, true },
|
|
{ 0xffffffff, 1, true },
|
|
{ 0x100000000, 1, true },
|
|
{ 0x200000000, 1, true },
|
|
{ 0x7fffffffffffffff, 1, true },
|
|
{ 0x8000000000000000, 1, true },
|
|
{ 0xffffffffffffffff, 1, true },
|
|
{ 0, 2, true },
|
|
{ 1, 2, true },
|
|
{ 2, 2, true },
|
|
{ 0x7fffffff, 2, true },
|
|
{ 0x80000000, 2, true },
|
|
{ 0xffffffff, 2, true },
|
|
{ 0x100000000, 2, true },
|
|
{ 0x200000000, 2, true },
|
|
{ 0x7fffffffffffffff, 2, true },
|
|
{ 0x8000000000000000, 2, false },
|
|
{ 0xffffffffffffffff, 2, false },
|
|
{ 0, 0x7fffffff, true },
|
|
{ 1, 0x7fffffff, true },
|
|
{ 2, 0x7fffffff, true },
|
|
{ 0x7fffffff, 0x7fffffff, true },
|
|
{ 0x80000000, 0x7fffffff, true },
|
|
{ 0xffffffff, 0x7fffffff, true },
|
|
{ 0x100000000, 0x7fffffff, true },
|
|
{ 0x200000000, 0x7fffffff, true },
|
|
{ 0x7fffffffffffffff, 0x7fffffff, false },
|
|
{ 0x8000000000000000, 0x7fffffff, false },
|
|
{ 0xffffffffffffffff, 0x7fffffff, false },
|
|
{ 0, 0x80000000, true },
|
|
{ 1, 0x80000000, true },
|
|
{ 2, 0x80000000, true },
|
|
{ 0x7fffffff, 0x80000000, true },
|
|
{ 0x80000000, 0x80000000, true },
|
|
{ 0xffffffff, 0x80000000, true },
|
|
{ 0x100000000, 0x80000000, true },
|
|
{ 0x200000000, 0x80000000, false },
|
|
{ 0x7fffffffffffffff, 0x80000000, false },
|
|
{ 0x8000000000000000, 0x80000000, false },
|
|
{ 0xffffffffffffffff, 0x80000000, false },
|
|
{ 0, 0xffffffff, true },
|
|
{ 1, 0xffffffff, true },
|
|
{ 2, 0xffffffff, true },
|
|
{ 0x7fffffff, 0xffffffff, true },
|
|
{ 0x80000000, 0xffffffff, true },
|
|
{ 0xffffffff, 0xffffffff, true },
|
|
{ 0x100000000, 0xffffffff, true },
|
|
{ 0x200000000, 0xffffffff, false },
|
|
{ 0x7fffffffffffffff, 0xffffffff, false },
|
|
{ 0x8000000000000000, 0xffffffff, false },
|
|
{ 0xffffffffffffffff, 0xffffffff, false },
|
|
{ 0, 0x100000000, true },
|
|
{ 1, 0x100000000, true },
|
|
{ 2, 0x100000000, true },
|
|
{ 0x7fffffff, 0x100000000, true },
|
|
{ 0x80000000, 0x100000000, true },
|
|
{ 0xffffffff, 0x100000000, true },
|
|
{ 0x100000000, 0x100000000, false },
|
|
{ 0x200000000, 0x100000000, false },
|
|
{ 0x7fffffffffffffff, 0x100000000, false },
|
|
{ 0x8000000000000000, 0x100000000, false },
|
|
{ 0xffffffffffffffff, 0x100000000, false },
|
|
{ 0, 0x200000000, true },
|
|
{ 1, 0x200000000, true },
|
|
{ 2, 0x200000000, true },
|
|
{ 0x7fffffff, 0x200000000, true },
|
|
{ 0x80000000, 0x200000000, false },
|
|
{ 0xffffffff, 0x200000000, false },
|
|
{ 0x100000000, 0x200000000, false },
|
|
{ 0x200000000, 0x200000000, false },
|
|
{ 0x7fffffffffffffff, 0x200000000, false },
|
|
{ 0x8000000000000000, 0x200000000, false },
|
|
{ 0xffffffffffffffff, 0x200000000, false },
|
|
{ 0, 0x7fffffffffffffff, true },
|
|
{ 1, 0x7fffffffffffffff, true },
|
|
{ 2, 0x7fffffffffffffff, true },
|
|
{ 0x7fffffff, 0x7fffffffffffffff, false },
|
|
{ 0x80000000, 0x7fffffffffffffff, false },
|
|
{ 0xffffffff, 0x7fffffffffffffff, false },
|
|
{ 0x100000000, 0x7fffffffffffffff, false },
|
|
{ 0x200000000, 0x7fffffffffffffff, false },
|
|
{ 0x7fffffffffffffff, 0x7fffffffffffffff, false },
|
|
{ 0x8000000000000000, 0x7fffffffffffffff, false },
|
|
{ 0xffffffffffffffff, 0x7fffffffffffffff, false },
|
|
{ 0, (std::int64_t)0x8000000000000000, true },
|
|
{ 1, (std::int64_t)0x8000000000000000, false },
|
|
{ 2, (std::int64_t)0x8000000000000000, false },
|
|
{ 0x7fffffff, (std::int64_t)0x8000000000000000, false },
|
|
{ 0x80000000, (std::int64_t)0x8000000000000000, false },
|
|
{ 0xffffffff, (std::int64_t)0x8000000000000000, false },
|
|
{ 0x100000000, (std::int64_t)0x8000000000000000, false },
|
|
{ 0x200000000, (std::int64_t)0x8000000000000000, false },
|
|
{ 0x7fffffffffffffff, (std::int64_t)0x8000000000000000, false },
|
|
{ 0x8000000000000000, (std::int64_t)0x8000000000000000, false },
|
|
{ 0xffffffffffffffff, (std::int64_t)0x8000000000000000, false },
|
|
{ 0, (std::int64_t)0xffffffffffffffff, true },
|
|
{ 1, (std::int64_t)0xffffffffffffffff, false },
|
|
{ 2, (std::int64_t)0xffffffffffffffff, false },
|
|
{ 0x7fffffff, (std::int64_t)0xffffffffffffffff, false },
|
|
{ 0x80000000, (std::int64_t)0xffffffffffffffff, false },
|
|
{ 0xffffffff, (std::int64_t)0xffffffffffffffff, false },
|
|
{ 0x100000000, (std::int64_t)0xffffffffffffffff, false },
|
|
{ 0x200000000, (std::int64_t)0xffffffffffffffff, false },
|
|
{ 0x7fffffffffffffff, (std::int64_t)0xffffffffffffffff, false },
|
|
{ 0x8000000000000000, (std::int64_t)0xffffffffffffffff, false },
|
|
{ 0xffffffffffffffff, (std::int64_t)0xffffffffffffffff, false }
|
|
};
|
|
|
|
template<> TestVector< std::uint64_t, std::int64_t, OpType::Mult>::TestVector() : current(0)
|
|
{
|
|
this->test_cases = uint64_int64;
|
|
this->count = COUNTOF(uint64_int64);
|
|
}
|
|
|
|
static const TestCase< std::uint64_t, std::int32_t, OpType::Mult > uint64_int32[] =
|
|
{
|
|
{ 0, 0, true },
|
|
{ 1, 0, true },
|
|
{ 2, 0, true },
|
|
{ 0x7fffffff, 0, true },
|
|
{ 0x80000000, 0, true },
|
|
{ 0xffffffff, 0, true },
|
|
{ 0x100000000, 0, true },
|
|
{ 0x200000000, 0, true },
|
|
{ 0x7fffffffffffffff, 0, true },
|
|
{ 0x8000000000000000, 0, true },
|
|
{ 0xffffffffffffffff, 0, true },
|
|
{ 0, 1, true },
|
|
{ 1, 1, true },
|
|
{ 2, 1, true },
|
|
{ 0x7fffffff, 1, true },
|
|
{ 0x80000000, 1, true },
|
|
{ 0xffffffff, 1, true },
|
|
{ 0x100000000, 1, true },
|
|
{ 0x200000000, 1, true },
|
|
{ 0x7fffffffffffffff, 1, true },
|
|
{ 0x8000000000000000, 1, true },
|
|
{ 0xffffffffffffffff, 1, true },
|
|
{ 0, 2, true },
|
|
{ 1, 2, true },
|
|
{ 2, 2, true },
|
|
{ 0x7fffffff, 2, true },
|
|
{ 0x80000000, 2, true },
|
|
{ 0xffffffff, 2, true },
|
|
{ 0x100000000, 2, true },
|
|
{ 0x200000000, 2, true },
|
|
{ 0x7fffffffffffffff, 2, true },
|
|
{ 0x8000000000000000, 2, false },
|
|
{ 0xffffffffffffffff, 2, false },
|
|
{ 0, 0x7fffffff, true },
|
|
{ 1, 0x7fffffff, true },
|
|
{ 2, 0x7fffffff, true },
|
|
{ 0x7fffffff, 0x7fffffff, true },
|
|
{ 0x80000000, 0x7fffffff, true },
|
|
{ 0xffffffff, 0x7fffffff, true },
|
|
{ 0x100000000, 0x7fffffff, true },
|
|
{ 0x200000000, 0x7fffffff, true },
|
|
{ 0x7fffffffffffffff, 0x7fffffff, false },
|
|
{ 0x8000000000000000, 0x7fffffff, false },
|
|
{ 0xffffffffffffffff, 0x7fffffff, false },
|
|
{ 0, (std::int32_t)0x80000000, true },
|
|
{ 1, (std::int32_t)0x80000000, false },
|
|
{ 2, (std::int32_t)0x80000000, false },
|
|
{ 0x7fffffff, (std::int32_t)0x80000000, false },
|
|
{ 0x80000000, (std::int32_t)0x80000000, false },
|
|
{ 0xffffffff, (std::int32_t)0x80000000, false },
|
|
{ 0x100000000, (std::int32_t)0x80000000, false },
|
|
{ 0x200000000, (std::int32_t)0x80000000, false },
|
|
{ 0x7fffffffffffffff, (std::int32_t)0x80000000, false },
|
|
{ 0x8000000000000000, (std::int32_t)0x80000000, false },
|
|
{ 0xffffffffffffffff, (std::int32_t)0x80000000, false },
|
|
{ 0, (std::int32_t)0xffffffff, true },
|
|
{ 1, (std::int32_t)0xffffffff, false },
|
|
{ 2, (std::int32_t)0xffffffff, false },
|
|
{ 0x7fffffff, (std::int32_t)0xffffffff, false },
|
|
{ 0x80000000, (std::int32_t)0xffffffff, false },
|
|
{ 0xffffffff, (std::int32_t)0xffffffff, false },
|
|
{ 0x100000000, (std::int32_t)0xffffffff, false },
|
|
{ 0x200000000, (std::int32_t)0xffffffff, false },
|
|
{ 0x7fffffffffffffff, (std::int32_t)0xffffffff, false },
|
|
{ 0x8000000000000000, (std::int32_t)0xffffffff, false },
|
|
{ 0xffffffffffffffff, (std::int32_t)0xffffffff, false }
|
|
};
|
|
|
|
template<> TestVector< std::uint64_t, std::int32_t, OpType::Mult>::TestVector() : current(0)
|
|
{
|
|
this->test_cases = uint64_int32;
|
|
this->count = COUNTOF(uint64_int32);
|
|
}
|
|
|
|
static const TestCase< std::int64_t, std::uint64_t, OpType::Mult > int64_uint64[] =
|
|
{
|
|
{ (std::int64_t)0, 0, true },
|
|
{ (std::int64_t)1, 0, true },
|
|
{ (std::int64_t)2, 0, true },
|
|
{ (std::int64_t)0x7fffffff, 0, true },
|
|
{ (std::int64_t)0x80000000, 0, true },
|
|
{ (std::int64_t)0xffffffff, 0, true },
|
|
{ (std::int64_t)0x100000000, 0, true },
|
|
{ (std::int64_t)0x200000000, 0, true },
|
|
{ (std::int64_t)0x7fffffffffffffff, 0, true },
|
|
{ (std::int64_t)0x8000000000000000, 0, true },
|
|
{ (std::int64_t)0xffffffffffffffff, 0, true },
|
|
{ (std::int64_t)0, 1, true },
|
|
{ (std::int64_t)1, 1, true },
|
|
{ (std::int64_t)2, 1, true },
|
|
{ (std::int64_t)0x7fffffff, 1, true },
|
|
{ (std::int64_t)0x80000000, 1, true },
|
|
{ (std::int64_t)0xffffffff, 1, true },
|
|
{ (std::int64_t)0x100000000, 1, true },
|
|
{ (std::int64_t)0x200000000, 1, true },
|
|
{ (std::int64_t)0x7fffffffffffffff, 1, true },
|
|
{ (std::int64_t)0x8000000000000000, 1, true },
|
|
{ (std::int64_t)0xffffffffffffffff, 1, true },
|
|
{ (std::int64_t)0, 2, true },
|
|
{ (std::int64_t)1, 2, true },
|
|
{ (std::int64_t)2, 2, true },
|
|
{ (std::int64_t)0x7fffffff, 2, true },
|
|
{ (std::int64_t)0x80000000, 2, true },
|
|
{ (std::int64_t)0xffffffff, 2, true },
|
|
{ (std::int64_t)0x100000000, 2, true },
|
|
{ (std::int64_t)0x200000000, 2, true },
|
|
{ (std::int64_t)0x7fffffffffffffff, 2, false },
|
|
{ (std::int64_t)0x8000000000000000, 2, false },
|
|
{ (std::int64_t)0xffffffffffffffff, 2, true },
|
|
{ (std::int64_t)0, 0x7fffffff, true },
|
|
{ (std::int64_t)1, 0x7fffffff, true },
|
|
{ (std::int64_t)2, 0x7fffffff, true },
|
|
{ (std::int64_t)0x7fffffff, 0x7fffffff, true },
|
|
{ (std::int64_t)0x80000000, 0x7fffffff, true },
|
|
{ (std::int64_t)0xffffffff, 0x7fffffff, true },
|
|
{ (std::int64_t)0x100000000, 0x7fffffff, true },
|
|
{ (std::int64_t)0x200000000, 0x7fffffff, false },
|
|
{ (std::int64_t)0x7fffffffffffffff, 0x7fffffff, false },
|
|
{ (std::int64_t)0x8000000000000000, 0x7fffffff, false },
|
|
{ (std::int64_t)0xffffffffffffffff, 0x7fffffff, true },
|
|
{ (std::int64_t)0, 0x80000000, true },
|
|
{ (std::int64_t)1, 0x80000000, true },
|
|
{ (std::int64_t)2, 0x80000000, true },
|
|
{ (std::int64_t)0x7fffffff, 0x80000000, true },
|
|
{ (std::int64_t)0x80000000, 0x80000000, true },
|
|
{ (std::int64_t)0xffffffff, 0x80000000, true },
|
|
{ (std::int64_t)0x100000000, 0x80000000, false },
|
|
{ (std::int64_t)0x200000000, 0x80000000, false },
|
|
{ (std::int64_t)0x7fffffffffffffff, 0x80000000, false },
|
|
{ (std::int64_t)0x8000000000000000, 0x80000000, false },
|
|
{ (std::int64_t)0xffffffffffffffff, 0x80000000, true },
|
|
{ (std::int64_t)0, 0xffffffff, true },
|
|
{ (std::int64_t)1, 0xffffffff, true },
|
|
{ (std::int64_t)2, 0xffffffff, true },
|
|
{ (std::int64_t)0x7fffffff, 0xffffffff, true },
|
|
{ (std::int64_t)0x80000000, 0xffffffff, true },
|
|
{ (std::int64_t)0xffffffff, 0xffffffff, false },
|
|
{ (std::int64_t)0x100000000, 0xffffffff, false },
|
|
{ (std::int64_t)0x200000000, 0xffffffff, false },
|
|
{ (std::int64_t)0x7fffffffffffffff, 0xffffffff, false },
|
|
{ (std::int64_t)0x8000000000000000, 0xffffffff, false },
|
|
{ (std::int64_t)0xffffffffffffffff, 0xffffffff, true },
|
|
{ (std::int64_t)0, 0x100000000, true },
|
|
{ (std::int64_t)1, 0x100000000, true },
|
|
{ (std::int64_t)2, 0x100000000, true },
|
|
{ (std::int64_t)0x7fffffff, 0x100000000, true },
|
|
{ (std::int64_t)0x80000000, 0x100000000, false },
|
|
{ (std::int64_t)0xffffffff, 0x100000000, false },
|
|
{ (std::int64_t)0x100000000, 0x100000000, false },
|
|
{ (std::int64_t)0x200000000, 0x100000000, false },
|
|
{ (std::int64_t)0x7fffffffffffffff, 0x100000000, false },
|
|
{ (std::int64_t)0x8000000000000000, 0x100000000, false },
|
|
{ (std::int64_t)0xffffffffffffffff, 0x100000000, true },
|
|
{ (std::int64_t)0, 0x200000000, true },
|
|
{ (std::int64_t)1, 0x200000000, true },
|
|
{ (std::int64_t)2, 0x200000000, true },
|
|
{ (std::int64_t)0x7fffffff, 0x200000000, false },
|
|
{ (std::int64_t)0x80000000, 0x200000000, false },
|
|
{ (std::int64_t)0xffffffff, 0x200000000, false },
|
|
{ (std::int64_t)0x100000000, 0x200000000, false },
|
|
{ (std::int64_t)0x200000000, 0x200000000, false },
|
|
{ (std::int64_t)0x7fffffffffffffff, 0x200000000, false },
|
|
{ (std::int64_t)0x8000000000000000, 0x200000000, false },
|
|
{ (std::int64_t)0xffffffffffffffff, 0x200000000, true },
|
|
{ (std::int64_t)0, 0x7fffffffffffffff, true },
|
|
{ (std::int64_t)1, 0x7fffffffffffffff, true },
|
|
{ (std::int64_t)2, 0x7fffffffffffffff, false },
|
|
{ (std::int64_t)0x7fffffff, 0x7fffffffffffffff, false },
|
|
{ (std::int64_t)0x80000000, 0x7fffffffffffffff, false },
|
|
{ (std::int64_t)0xffffffff, 0x7fffffffffffffff, false },
|
|
{ (std::int64_t)0x100000000, 0x7fffffffffffffff, false },
|
|
{ (std::int64_t)0x200000000, 0x7fffffffffffffff, false },
|
|
{ (std::int64_t)0x7fffffffffffffff, 0x7fffffffffffffff, false },
|
|
{ (std::int64_t)0x8000000000000000, 0x7fffffffffffffff, false },
|
|
{ (std::int64_t)0xffffffffffffffff, 0x7fffffffffffffff, true },
|
|
{ (std::int64_t)0, 0x8000000000000000, true },
|
|
{ (std::int64_t)1, 0x8000000000000000, false },
|
|
{ (std::int64_t)2, 0x8000000000000000, false },
|
|
{ (std::int64_t)0x7fffffff, 0x8000000000000000, false },
|
|
{ (std::int64_t)0x80000000, 0x8000000000000000, false },
|
|
{ (std::int64_t)0xffffffff, 0x8000000000000000, false },
|
|
{ (std::int64_t)0x100000000, 0x8000000000000000, false },
|
|
{ (std::int64_t)0x200000000, 0x8000000000000000, false },
|
|
{ (std::int64_t)0x7fffffffffffffff, 0x8000000000000000, false },
|
|
{ (std::int64_t)0x8000000000000000, 0x8000000000000000, false },
|
|
{ (std::int64_t)0xffffffffffffffff, 0x8000000000000000, true },
|
|
{ (std::int64_t)0, 0xffffffffffffffff, true },
|
|
{ (std::int64_t)1, 0xffffffffffffffff, false },
|
|
{ (std::int64_t)2, 0xffffffffffffffff, false },
|
|
{ (std::int64_t)0x7fffffff, 0xffffffffffffffff, false },
|
|
{ (std::int64_t)0x80000000, 0xffffffffffffffff, false },
|
|
{ (std::int64_t)0xffffffff, 0xffffffffffffffff, false },
|
|
{ (std::int64_t)0x100000000, 0xffffffffffffffff, false },
|
|
{ (std::int64_t)0x200000000, 0xffffffffffffffff, false },
|
|
{ (std::int64_t)0x7fffffffffffffff, 0xffffffffffffffff, false },
|
|
{ (std::int64_t)0x8000000000000000, 0xffffffffffffffff, false },
|
|
{ (std::int64_t)0xffffffffffffffff, 0xffffffffffffffff, false },
|
|
// Special case - force addition overflow case
|
|
{ (std::int64_t)0xffffffff, 0x100000002, false }
|
|
};
|
|
|
|
template<> TestVector< std::int64_t, std::uint64_t, OpType::Mult>::TestVector() : current(0)
|
|
{
|
|
this->test_cases = int64_uint64;
|
|
this->count = COUNTOF(int64_uint64);
|
|
}
|
|
|
|
static const TestCase< std::int64_t, std::uint32_t, OpType::Mult > int64_uint32[] =
|
|
{
|
|
{ (std::int64_t)0, 0, true },
|
|
{ (std::int64_t)1, 0, true },
|
|
{ (std::int64_t)2, 0, true },
|
|
{ (std::int64_t)0x7fffffff, 0, true },
|
|
{ (std::int64_t)0x80000000, 0, true },
|
|
{ (std::int64_t)0xffffffff, 0, true },
|
|
{ (std::int64_t)0x100000000, 0, true },
|
|
{ (std::int64_t)0x200000000, 0, true },
|
|
{ (std::int64_t)0x7fffffffffffffff, 0, true },
|
|
{ (std::int64_t)0x8000000000000000, 0, true },
|
|
{ (std::int64_t)0xffffffffffffffff, 0, true },
|
|
{ (std::int64_t)0, 1, true },
|
|
{ (std::int64_t)1, 1, true },
|
|
{ (std::int64_t)2, 1, true },
|
|
{ (std::int64_t)0x7fffffff, 1, true },
|
|
{ (std::int64_t)0x80000000, 1, true },
|
|
{ (std::int64_t)0xffffffff, 1, true },
|
|
{ (std::int64_t)0x100000000, 1, true },
|
|
{ (std::int64_t)0x200000000, 1, true },
|
|
{ (std::int64_t)0x7fffffffffffffff, 1, true },
|
|
{ (std::int64_t)0x8000000000000000, 1, true },
|
|
{ (std::int64_t)0xffffffffffffffff, 1, true },
|
|
{ (std::int64_t)0, 2, true },
|
|
{ (std::int64_t)1, 2, true },
|
|
{ (std::int64_t)2, 2, true },
|
|
{ (std::int64_t)0x7fffffff, 2, true },
|
|
{ (std::int64_t)0x80000000, 2, true },
|
|
{ (std::int64_t)0xffffffff, 2, true },
|
|
{ (std::int64_t)0x100000000, 2, true },
|
|
{ (std::int64_t)0x200000000, 2, true },
|
|
{ (std::int64_t)0x7fffffffffffffff, 2, false },
|
|
{ (std::int64_t)0x8000000000000000, 2, false },
|
|
{ (std::int64_t)0xffffffffffffffff, 2, true },
|
|
{ (std::int64_t)0, 0x7fffffff, true },
|
|
{ (std::int64_t)1, 0x7fffffff, true },
|
|
{ (std::int64_t)2, 0x7fffffff, true },
|
|
{ (std::int64_t)0x7fffffff, 0x7fffffff, true },
|
|
{ (std::int64_t)0x80000000, 0x7fffffff, true },
|
|
{ (std::int64_t)0xffffffff, 0x7fffffff, true },
|
|
{ (std::int64_t)0x100000000, 0x7fffffff, true },
|
|
{ (std::int64_t)0x200000000, 0x7fffffff, false },
|
|
{ (std::int64_t)0x7fffffffffffffff, 0x7fffffff, false },
|
|
{ (std::int64_t)0x8000000000000000, 0x7fffffff, false },
|
|
{ (std::int64_t)0xffffffffffffffff, 0x7fffffff, true },
|
|
{ (std::int64_t)0, 0x80000000, true },
|
|
{ (std::int64_t)1, 0x80000000, true },
|
|
{ (std::int64_t)2, 0x80000000, true },
|
|
{ (std::int64_t)0x7fffffff, 0x80000000, true },
|
|
{ (std::int64_t)0x80000000, 0x80000000, true },
|
|
{ (std::int64_t)0xffffffff, 0x80000000, true },
|
|
{ (std::int64_t)0x100000000, 0x80000000, false },
|
|
{ (std::int64_t)0x200000000, 0x80000000, false },
|
|
{ (std::int64_t)0x7fffffffffffffff, 0x80000000, false },
|
|
{ (std::int64_t)0x8000000000000000, 0x80000000, false },
|
|
{ (std::int64_t)0xffffffffffffffff, 0x80000000, true },
|
|
{ (std::int64_t)0, 0xffffffff, true },
|
|
{ (std::int64_t)1, 0xffffffff, true },
|
|
{ (std::int64_t)2, 0xffffffff, true },
|
|
{ (std::int64_t)0x7fffffff, 0xffffffff, true },
|
|
{ (std::int64_t)0x80000000, 0xffffffff, true },
|
|
{ (std::int64_t)0xffffffff, 0xffffffff, false },
|
|
{ (std::int64_t)0x100000000, 0xffffffff, false },
|
|
{ (std::int64_t)0x200000000, 0xffffffff, false },
|
|
{ (std::int64_t)0x7fffffffffffffff, 0xffffffff, false },
|
|
{ (std::int64_t)0x8000000000000000, 0xffffffff, false },
|
|
{ (std::int64_t)0xffffffffffffffff, 0xffffffff, true }
|
|
};
|
|
|
|
template<> TestVector< std::int64_t, std::uint32_t, OpType::Mult>::TestVector() : current(0)
|
|
{
|
|
this->test_cases = int64_uint32;
|
|
this->count = COUNTOF(int64_uint32);
|
|
}
|
|
|
|
static const TestCase< std::int64_t, std::int64_t, OpType::Mult > int64_int64[] =
|
|
{
|
|
{ (std::int64_t)0, 0, true },
|
|
{ (std::int64_t)1, 0, true },
|
|
{ (std::int64_t)2, 0, true },
|
|
{ (std::int64_t)0x7fffffff, 0, true },
|
|
{ (std::int64_t)0x80000000, 0, true },
|
|
{ (std::int64_t)0xffffffff, 0, true },
|
|
{ (std::int64_t)0x100000000, 0, true },
|
|
{ (std::int64_t)0x200000000, 0, true },
|
|
{ (std::int64_t)0x7fffffffffffffff, 0, true },
|
|
{ (std::int64_t)0x8000000000000000, 0, true },
|
|
{ (std::int64_t)0xffffffffffffffff, 0, true },
|
|
{ (std::int64_t)0, 1, true },
|
|
{ (std::int64_t)1, 1, true },
|
|
{ (std::int64_t)2, 1, true },
|
|
{ (std::int64_t)0x7fffffff, 1, true },
|
|
{ (std::int64_t)0x80000000, 1, true },
|
|
{ (std::int64_t)0xffffffff, 1, true },
|
|
{ (std::int64_t)0x100000000, 1, true },
|
|
{ (std::int64_t)0x200000000, 1, true },
|
|
{ (std::int64_t)0x7fffffffffffffff, 1, true },
|
|
{ (std::int64_t)0x8000000000000000, 1, true },
|
|
{ (std::int64_t)0xffffffffffffffff, 1, true },
|
|
{ (std::int64_t)0, 2, true },
|
|
{ (std::int64_t)1, 2, true },
|
|
{ (std::int64_t)2, 2, true },
|
|
{ (std::int64_t)0x7fffffff, 2, true },
|
|
{ (std::int64_t)0x80000000, 2, true },
|
|
{ (std::int64_t)0xffffffff, 2, true },
|
|
{ (std::int64_t)0x100000000, 2, true },
|
|
{ (std::int64_t)0x200000000, 2, true },
|
|
{ (std::int64_t)0x7fffffffffffffff, 2, false },
|
|
{ (std::int64_t)0x8000000000000000, 2, false },
|
|
{ (std::int64_t)0xffffffffffffffff, 2, true },
|
|
{ (std::int64_t)0, 0x7fffffff, true },
|
|
{ (std::int64_t)1, 0x7fffffff, true },
|
|
{ (std::int64_t)2, 0x7fffffff, true },
|
|
{ (std::int64_t)0x7fffffff, 0x7fffffff, true },
|
|
{ (std::int64_t)0x80000000, 0x7fffffff, true },
|
|
{ (std::int64_t)0xffffffff, 0x7fffffff, true },
|
|
{ (std::int64_t)0x100000000, 0x7fffffff, true },
|
|
{ (std::int64_t)0x200000000, 0x7fffffff, false },
|
|
{ (std::int64_t)0x7fffffffffffffff, 0x7fffffff, false },
|
|
{ (std::int64_t)0x8000000000000000, 0x7fffffff, false },
|
|
{ (std::int64_t)0xffffffffffffffff, 0x7fffffff, true },
|
|
{ (std::int64_t)0, 0x80000000, true },
|
|
{ (std::int64_t)1, 0x80000000, true },
|
|
{ (std::int64_t)2, 0x80000000, true },
|
|
{ (std::int64_t)0x7fffffff, 0x80000000, true },
|
|
{ (std::int64_t)0x80000000, 0x80000000, true },
|
|
{ (std::int64_t)0xffffffff, 0x80000000, true },
|
|
{ (std::int64_t)0x100000000, 0x80000000, false },
|
|
{ (std::int64_t)0x200000000, 0x80000000, false },
|
|
{ (std::int64_t)0x7fffffffffffffff, 0x80000000, false },
|
|
{ (std::int64_t)0x8000000000000000, 0x80000000, false },
|
|
{ (std::int64_t)0xffffffffffffffff, 0x80000000, true },
|
|
{ (std::int64_t)0, 0xffffffff, true },
|
|
{ (std::int64_t)1, 0xffffffff, true },
|
|
{ (std::int64_t)2, 0xffffffff, true },
|
|
{ (std::int64_t)0x7fffffff, 0xffffffff, true },
|
|
{ (std::int64_t)0x80000000, 0xffffffff, true },
|
|
{ (std::int64_t)0xffffffff, 0xffffffff, false },
|
|
{ (std::int64_t)0x100000000, 0xffffffff, false },
|
|
{ (std::int64_t)0x200000000, 0xffffffff, false },
|
|
{ (std::int64_t)0x7fffffffffffffff, 0xffffffff, false },
|
|
{ (std::int64_t)0x8000000000000000, 0xffffffff, false },
|
|
{ (std::int64_t)0xffffffffffffffff, 0xffffffff, true },
|
|
{ (std::int64_t)0, 0x100000000, true },
|
|
{ (std::int64_t)1, 0x100000000, true },
|
|
{ (std::int64_t)2, 0x100000000, true },
|
|
{ (std::int64_t)0x7fffffff, 0x100000000, true },
|
|
{ (std::int64_t)0x80000000, 0x100000000, false },
|
|
{ (std::int64_t)0xffffffff, 0x100000000, false },
|
|
{ (std::int64_t)0x100000000, 0x100000000, false },
|
|
{ (std::int64_t)0x200000000, 0x100000000, false },
|
|
{ (std::int64_t)0x7fffffffffffffff, 0x100000000, false },
|
|
{ (std::int64_t)0x8000000000000000, 0x100000000, false },
|
|
{ (std::int64_t)0xffffffffffffffff, 0x100000000, true },
|
|
{ (std::int64_t)0, 0x200000000, true },
|
|
{ (std::int64_t)1, 0x200000000, true },
|
|
{ (std::int64_t)2, 0x200000000, true },
|
|
{ (std::int64_t)0x7fffffff, 0x200000000, false },
|
|
{ (std::int64_t)0x80000000, 0x200000000, false },
|
|
{ (std::int64_t)0xffffffff, 0x200000000, false },
|
|
{ (std::int64_t)0x100000000, 0x200000000, false },
|
|
{ (std::int64_t)0x200000000, 0x200000000, false },
|
|
{ (std::int64_t)0x7fffffffffffffff, 0x200000000, false },
|
|
{ (std::int64_t)0x8000000000000000, 0x200000000, false },
|
|
{ (std::int64_t)0xffffffffffffffff, 0x200000000, true },
|
|
{ (std::int64_t)0, 0x7fffffffffffffff, true },
|
|
{ (std::int64_t)1, 0x7fffffffffffffff, true },
|
|
{ (std::int64_t)2, 0x7fffffffffffffff, false },
|
|
{ (std::int64_t)0x7fffffff, 0x7fffffffffffffff, false },
|
|
{ (std::int64_t)0x80000000, 0x7fffffffffffffff, false },
|
|
{ (std::int64_t)0xffffffff, 0x7fffffffffffffff, false },
|
|
{ (std::int64_t)0x100000000, 0x7fffffffffffffff, false },
|
|
{ (std::int64_t)0x200000000, 0x7fffffffffffffff, false },
|
|
{ (std::int64_t)0x7fffffffffffffff, 0x7fffffffffffffff, false },
|
|
{ (std::int64_t)0x8000000000000000, 0x7fffffffffffffff, false },
|
|
{ (std::int64_t)0xffffffffffffffff, 0x7fffffffffffffff, true },
|
|
{ (std::int64_t)0, (std::int64_t)0x8000000000000000, true },
|
|
{ (std::int64_t)1, (std::int64_t)0x8000000000000000, true },
|
|
{ (std::int64_t)2, (std::int64_t)0x8000000000000000, false },
|
|
{ (std::int64_t)0x7fffffff, (std::int64_t)0x8000000000000000, false },
|
|
{ (std::int64_t)0x80000000, (std::int64_t)0x8000000000000000, false },
|
|
{ (std::int64_t)0xffffffff, (std::int64_t)0x8000000000000000, false },
|
|
{ (std::int64_t)0x100000000, (std::int64_t)0x8000000000000000, false },
|
|
{ (std::int64_t)0x200000000, (std::int64_t)0x8000000000000000, false },
|
|
{ (std::int64_t)0x7fffffffffffffff, (std::int64_t)0x8000000000000000, false },
|
|
{ (std::int64_t)0x8000000000000000, (std::int64_t)0x8000000000000000, false },
|
|
{ (std::int64_t)0xffffffffffffffff, (std::int64_t)0x8000000000000000, false },
|
|
{ (std::int64_t)0, (std::int64_t)0xffffffffffffffff, true },
|
|
{ (std::int64_t)1, (std::int64_t)0xffffffffffffffff, true },
|
|
{ (std::int64_t)2, (std::int64_t)0xffffffffffffffff, true },
|
|
{ (std::int64_t)0x7fffffff, (std::int64_t)0xffffffffffffffff, true },
|
|
{ (std::int64_t)0x80000000, (std::int64_t)0xffffffffffffffff, true },
|
|
{ (std::int64_t)0xffffffff, (std::int64_t)0xffffffffffffffff, true },
|
|
{ (std::int64_t)0x100000000, (std::int64_t)0xffffffffffffffff, true },
|
|
{ (std::int64_t)0x200000000, (std::int64_t)0xffffffffffffffff, true },
|
|
{ (std::int64_t)0x7fffffffffffffff, (std::int64_t)0xffffffffffffffff, true },
|
|
{ (std::int64_t)0x8000000000000000, (std::int64_t)0xffffffffffffffff, false },
|
|
{ (std::int64_t)0xffffffffffffffff, (std::int64_t)0xffffffffffffffff, true },
|
|
// Special case - force addition overflow case
|
|
{ (std::int64_t)0xffffffff, 0x100000002, false }
|
|
};
|
|
|
|
template<> TestVector< std::int64_t, std::int64_t, OpType::Mult>::TestVector() : current(0)
|
|
{
|
|
this->test_cases = int64_int64;
|
|
this->count = COUNTOF(int64_int64);
|
|
}
|
|
|
|
static const TestCase< std::int64_t, std::int32_t, OpType::Mult > int64_int32[] =
|
|
{
|
|
{ (std::int64_t)0, 0, true },
|
|
{ (std::int64_t)1, 0, true },
|
|
{ (std::int64_t)2, 0, true },
|
|
{ (std::int64_t)0x7fffffff, 0, true },
|
|
{ (std::int64_t)0x80000000, 0, true },
|
|
{ (std::int64_t)0xffffffff, 0, true },
|
|
{ (std::int64_t)0x100000000, 0, true },
|
|
{ (std::int64_t)0x200000000, 0, true },
|
|
{ (std::int64_t)0x7fffffffffffffff, 0, true },
|
|
{ (std::int64_t)0x8000000000000000, 0, true },
|
|
{ (std::int64_t)0xffffffffffffffff, 0, true },
|
|
{ (std::int64_t)0, 1, true },
|
|
{ (std::int64_t)1, 1, true },
|
|
{ (std::int64_t)2, 1, true },
|
|
{ (std::int64_t)0x7fffffff, 1, true },
|
|
{ (std::int64_t)0x80000000, 1, true },
|
|
{ (std::int64_t)0xffffffff, 1, true },
|
|
{ (std::int64_t)0x100000000, 1, true },
|
|
{ (std::int64_t)0x200000000, 1, true },
|
|
{ (std::int64_t)0x7fffffffffffffff, 1, true },
|
|
{ (std::int64_t)0x8000000000000000, 1, true },
|
|
{ (std::int64_t)0xffffffffffffffff, 1, true },
|
|
{ (std::int64_t)0, 2, true },
|
|
{ (std::int64_t)1, 2, true },
|
|
{ (std::int64_t)2, 2, true },
|
|
{ (std::int64_t)0x7fffffff, 2, true },
|
|
{ (std::int64_t)0x80000000, 2, true },
|
|
{ (std::int64_t)0xffffffff, 2, true },
|
|
{ (std::int64_t)0x100000000, 2, true },
|
|
{ (std::int64_t)0x200000000, 2, true },
|
|
{ (std::int64_t)0x7fffffffffffffff, 2, false },
|
|
{ (std::int64_t)0x8000000000000000, 2, false },
|
|
{ (std::int64_t)0xffffffffffffffff, 2, true },
|
|
{ (std::int64_t)0, 0x7fffffff, true },
|
|
{ (std::int64_t)1, 0x7fffffff, true },
|
|
{ (std::int64_t)2, 0x7fffffff, true },
|
|
{ (std::int64_t)0x7fffffff, 0x7fffffff, true },
|
|
{ (std::int64_t)0x80000000, 0x7fffffff, true },
|
|
{ (std::int64_t)0xffffffff, 0x7fffffff, true },
|
|
{ (std::int64_t)0x100000000, 0x7fffffff, true },
|
|
{ (std::int64_t)0x200000000, 0x7fffffff, false },
|
|
{ (std::int64_t)0x7fffffffffffffff, 0x7fffffff, false },
|
|
{ (std::int64_t)0x8000000000000000, 0x7fffffff, false },
|
|
{ (std::int64_t)0xffffffffffffffff, 0x7fffffff, true },
|
|
{ (std::int64_t)0, (std::int32_t)0x80000000, true },
|
|
{ (std::int64_t)1, (std::int32_t)0x80000000, true },
|
|
{ (std::int64_t)2, (std::int32_t)0x80000000, true },
|
|
{ (std::int64_t)0x7fffffff, (std::int32_t)0x80000000, true },
|
|
{ (std::int64_t)0x80000000, (std::int32_t)0x80000000, true },
|
|
{ (std::int64_t)0xffffffff, (std::int32_t)0x80000000, true },
|
|
{ (std::int64_t)0x100000000, (std::int32_t)0x80000000, true },
|
|
{ (std::int64_t)0x200000000, (std::int32_t)0x80000000, false },
|
|
{ (std::int64_t)0x7fffffffffffffff, (std::int32_t)0x80000000, false },
|
|
{ (std::int64_t)0x8000000000000000, (std::int32_t)0x80000000, false },
|
|
{ (std::int64_t)0xffffffffffffffff, (std::int32_t)0x80000000, true },
|
|
{ (std::int64_t)0, (std::int32_t)0xffffffff, true },
|
|
{ (std::int64_t)1, (std::int32_t)0xffffffff, true },
|
|
{ (std::int64_t)2, (std::int32_t)0xffffffff, true },
|
|
{ (std::int64_t)0x7fffffff, (std::int32_t)0xffffffff, true },
|
|
{ (std::int64_t)0x80000000, (std::int32_t)0xffffffff, true },
|
|
{ (std::int64_t)0xffffffff, (std::int32_t)0xffffffff, true },
|
|
{ (std::int64_t)0x100000000, (std::int32_t)0xffffffff, true },
|
|
{ (std::int64_t)0x200000000, (std::int32_t)0xffffffff, true },
|
|
{ (std::int64_t)0x7fffffffffffffff, (std::int32_t)0xffffffff, true },
|
|
{ (std::int64_t)0x8000000000000000, (std::int32_t)0xffffffff, false },
|
|
{ (std::int64_t)0xffffffffffffffff, (std::int32_t)0xffffffff, true }
|
|
};
|
|
|
|
template<> TestVector< std::int64_t, std::int32_t, OpType::Mult>::TestVector() : current(0)
|
|
{
|
|
this->test_cases = int64_int32;
|
|
this->count = COUNTOF(int64_int32);
|
|
}
|
|
|
|
static const TestCase< std::uint32_t, std::uint64_t, OpType::Mult > uint32_uint64[] =
|
|
{
|
|
{ 0, 0, true },
|
|
{ 1, 0, true },
|
|
{ 2, 0, true },
|
|
{ 0x7fffffff, 0, true },
|
|
{ 0x80000000, 0, true },
|
|
{ 0xffffffff, 0, true },
|
|
{ 0, 1, true },
|
|
{ 1, 1, true },
|
|
{ 2, 1, true },
|
|
{ 0x7fffffff, 1, true },
|
|
{ 0x80000000, 1, true },
|
|
{ 0xffffffff, 1, true },
|
|
{ 0, 2, true },
|
|
{ 1, 2, true },
|
|
{ 2, 2, true },
|
|
{ 0x7fffffff, 2, true },
|
|
{ 0x80000000, 2, false },
|
|
{ 0xffffffff, 2, false },
|
|
{ 0, 0x7fffffff, true },
|
|
{ 1, 0x7fffffff, true },
|
|
{ 2, 0x7fffffff, true },
|
|
{ 0x7fffffff, 0x7fffffff, false },
|
|
{ 0x80000000, 0x7fffffff, false },
|
|
{ 0xffffffff, 0x7fffffff, false },
|
|
{ 0, 0x80000000, true },
|
|
{ 1, 0x80000000, true },
|
|
{ 2, 0x80000000, false },
|
|
{ 0x7fffffff, 0x80000000, false },
|
|
{ 0x80000000, 0x80000000, false },
|
|
{ 0xffffffff, 0x80000000, false },
|
|
{ 0, 0xffffffff, true },
|
|
{ 1, 0xffffffff, true },
|
|
{ 2, 0xffffffff, false },
|
|
{ 0x7fffffff, 0xffffffff, false },
|
|
{ 0x80000000, 0xffffffff, false },
|
|
{ 0xffffffff, 0xffffffff, false },
|
|
{ 0, 0x100000000, true },
|
|
{ 1, 0x100000000, false },
|
|
{ 2, 0x100000000, false },
|
|
{ 0x7fffffff, 0x100000000, false },
|
|
{ 0x80000000, 0x100000000, false },
|
|
{ 0xffffffff, 0x100000000, false },
|
|
{ 0, 0x200000000, true },
|
|
{ 1, 0x200000000, false },
|
|
{ 2, 0x200000000, false },
|
|
{ 0x7fffffff, 0x200000000, false },
|
|
{ 0x80000000, 0x200000000, false },
|
|
{ 0xffffffff, 0x200000000, false },
|
|
{ 0, 0x7fffffffffffffff, true },
|
|
{ 1, 0x7fffffffffffffff, false },
|
|
{ 2, 0x7fffffffffffffff, false },
|
|
{ 0x7fffffff, 0x7fffffffffffffff, false },
|
|
{ 0x80000000, 0x7fffffffffffffff, false },
|
|
{ 0xffffffff, 0x7fffffffffffffff, false },
|
|
{ 0, 0x8000000000000000, true },
|
|
{ 1, 0x8000000000000000, false },
|
|
{ 2, 0x8000000000000000, false },
|
|
{ 0x7fffffff, 0x8000000000000000, false },
|
|
{ 0x80000000, 0x8000000000000000, false },
|
|
{ 0xffffffff, 0x8000000000000000, false },
|
|
{ 0, 0xffffffffffffffff, true },
|
|
{ 1, 0xffffffffffffffff, false },
|
|
{ 2, 0xffffffffffffffff, false },
|
|
{ 0x7fffffff, 0xffffffffffffffff, false },
|
|
{ 0x80000000, 0xffffffffffffffff, false },
|
|
{ 0xffffffff, 0xffffffffffffffff, false }
|
|
};
|
|
|
|
template<> TestVector< std::uint32_t, std::uint64_t, OpType::Mult>::TestVector() : current(0)
|
|
{
|
|
this->test_cases = uint32_uint64;
|
|
this->count = COUNTOF(uint32_uint64);
|
|
}
|
|
|
|
static const TestCase< std::uint32_t, std::uint32_t, OpType::Mult > uint32_uint32[] =
|
|
{
|
|
{ 0, 0, true },
|
|
{ 1, 0, true },
|
|
{ 2, 0, true },
|
|
{ 0x7fffffff, 0, true },
|
|
{ 0x80000000, 0, true },
|
|
{ 0xffffffff, 0, true },
|
|
{ 0, 1, true },
|
|
{ 1, 1, true },
|
|
{ 2, 1, true },
|
|
{ 0x7fffffff, 1, true },
|
|
{ 0x80000000, 1, true },
|
|
{ 0xffffffff, 1, true },
|
|
{ 0, 2, true },
|
|
{ 1, 2, true },
|
|
{ 2, 2, true },
|
|
{ 0x7fffffff, 2, true },
|
|
{ 0x80000000, 2, false },
|
|
{ 0xffffffff, 2, false },
|
|
{ 0, 0x7fffffff, true },
|
|
{ 1, 0x7fffffff, true },
|
|
{ 2, 0x7fffffff, true },
|
|
{ 0x7fffffff, 0x7fffffff, false },
|
|
{ 0x80000000, 0x7fffffff, false },
|
|
{ 0xffffffff, 0x7fffffff, false },
|
|
{ 0, 0x80000000, true },
|
|
{ 1, 0x80000000, true },
|
|
{ 2, 0x80000000, false },
|
|
{ 0x7fffffff, 0x80000000, false },
|
|
{ 0x80000000, 0x80000000, false },
|
|
{ 0xffffffff, 0x80000000, false },
|
|
{ 0, 0xffffffff, true },
|
|
{ 1, 0xffffffff, true },
|
|
{ 2, 0xffffffff, false },
|
|
{ 0x7fffffff, 0xffffffff, false },
|
|
{ 0x80000000, 0xffffffff, false },
|
|
{ 0xffffffff, 0xffffffff, false },
|
|
};
|
|
|
|
template<> TestVector< std::uint32_t, std::uint32_t, OpType::Mult>::TestVector() : current(0)
|
|
{
|
|
this->test_cases = uint32_uint32;
|
|
this->count = COUNTOF(uint32_uint32);
|
|
}
|
|
|
|
static const TestCase< std::uint32_t, std::int64_t, OpType::Mult > uint32_int64[] =
|
|
{
|
|
{ 0, 0, true },
|
|
{ 1, 0, true },
|
|
{ 2, 0, true },
|
|
{ 0x7fffffff, 0, true },
|
|
{ 0x80000000, 0, true },
|
|
{ 0xffffffff, 0, true },
|
|
{ 0, 1, true },
|
|
{ 1, 1, true },
|
|
{ 2, 1, true },
|
|
{ 0x7fffffff, 1, true },
|
|
{ 0x80000000, 1, true },
|
|
{ 0xffffffff, 1, true },
|
|
{ 0, 2, true },
|
|
{ 1, 2, true },
|
|
{ 2, 2, true },
|
|
{ 0x7fffffff, 2, true },
|
|
{ 0x80000000, 2, false },
|
|
{ 0xffffffff, 2, false },
|
|
{ 0, 0x7fffffff, true },
|
|
{ 1, 0x7fffffff, true },
|
|
{ 2, 0x7fffffff, true },
|
|
{ 0x7fffffff, 0x7fffffff, false },
|
|
{ 0x80000000, 0x7fffffff, false },
|
|
{ 0xffffffff, 0x7fffffff, false },
|
|
{ 0, 0x80000000, true },
|
|
{ 1, 0x80000000, true },
|
|
{ 2, 0x80000000, false },
|
|
{ 0x7fffffff, 0x80000000, false },
|
|
{ 0x80000000, 0x80000000, false },
|
|
{ 0xffffffff, 0x80000000, false },
|
|
{ 0, 0xffffffff, true },
|
|
{ 1, 0xffffffff, true },
|
|
{ 2, 0xffffffff, false },
|
|
{ 0x7fffffff, 0xffffffff, false },
|
|
{ 0x80000000, 0xffffffff, false },
|
|
{ 0xffffffff, 0xffffffff, false },
|
|
{ 0, 0x100000000, true },
|
|
{ 1, 0x100000000, false },
|
|
{ 2, 0x100000000, false },
|
|
{ 0x7fffffff, 0x100000000, false },
|
|
{ 0x80000000, 0x100000000, false },
|
|
{ 0xffffffff, 0x100000000, false },
|
|
{ 0, 0x200000000, true },
|
|
{ 1, 0x200000000, false },
|
|
{ 2, 0x200000000, false },
|
|
{ 0x7fffffff, 0x200000000, false },
|
|
{ 0x80000000, 0x200000000, false },
|
|
{ 0xffffffff, 0x200000000, false },
|
|
{ 0, 0x7fffffffffffffff, true },
|
|
{ 1, 0x7fffffffffffffff, false },
|
|
{ 2, 0x7fffffffffffffff, false },
|
|
{ 0x7fffffff, 0x7fffffffffffffff, false },
|
|
{ 0x80000000, 0x7fffffffffffffff, false },
|
|
{ 0xffffffff, 0x7fffffffffffffff, false },
|
|
{ 0, (std::int64_t)0x8000000000000000, true },
|
|
{ 1, (std::int64_t)0x8000000000000000, false },
|
|
{ 2, (std::int64_t)0x8000000000000000, false },
|
|
{ 0x7fffffff, (std::int64_t)0x8000000000000000, false },
|
|
{ 0x80000000, (std::int64_t)0x8000000000000000, false },
|
|
{ 0xffffffff, (std::int64_t)0x8000000000000000, false },
|
|
{ 0, (std::int64_t)0xffffffffffffffff, true },
|
|
{ 1, (std::int64_t)0xffffffffffffffff, false },
|
|
{ 2, (std::int64_t)0xffffffffffffffff, false },
|
|
{ 0x7fffffff, (std::int64_t)0xffffffffffffffff, false },
|
|
{ 0x80000000, (std::int64_t)0xffffffffffffffff, false },
|
|
{ 0xffffffff, (std::int64_t)0xffffffffffffffff, false }
|
|
};
|
|
|
|
template<> TestVector< std::uint32_t, std::int64_t, OpType::Mult>::TestVector() : current(0)
|
|
{
|
|
this->test_cases = uint32_int64;
|
|
this->count = COUNTOF(uint32_int64);
|
|
}
|
|
|
|
static const TestCase< std::uint32_t, std::int32_t, OpType::Mult > uint32_int32[] =
|
|
{
|
|
{ 0, 0, true },
|
|
{ 1, 0, true },
|
|
{ 2, 0, true },
|
|
{ 0x7fffffff, 0, true },
|
|
{ 0x80000000, 0, true },
|
|
{ 0xffffffff, 0, true },
|
|
{ 0, 1, true },
|
|
{ 1, 1, true },
|
|
{ 2, 1, true },
|
|
{ 0x7fffffff, 1, true },
|
|
{ 0x80000000, 1, true },
|
|
{ 0xffffffff, 1, true },
|
|
{ 0, 2, true },
|
|
{ 1, 2, true },
|
|
{ 2, 2, true },
|
|
{ 0x7fffffff, 2, true },
|
|
{ 0x80000000, 2, false },
|
|
{ 0xffffffff, 2, false },
|
|
{ 0, 0x7fffffff, true },
|
|
{ 1, 0x7fffffff, true },
|
|
{ 2, 0x7fffffff, true },
|
|
{ 0x7fffffff, 0x7fffffff, false },
|
|
{ 0x80000000, 0x7fffffff, false },
|
|
{ 0xffffffff, 0x7fffffff, false },
|
|
{ 0, (std::int32_t)0x80000000, true },
|
|
{ 1, (std::int32_t)0x80000000, false },
|
|
{ 2, (std::int32_t)0x80000000, false },
|
|
{ 0x7fffffff, (std::int32_t)0x80000000, false },
|
|
{ 0x80000000, (std::int32_t)0x80000000, false },
|
|
{ 0xffffffff, (std::int32_t)0x80000000, false },
|
|
{ 0, (std::int32_t)0xffffffff, true },
|
|
{ 1, (std::int32_t)0xffffffff, false },
|
|
{ 2, (std::int32_t)0xffffffff, false },
|
|
{ 0x7fffffff, (std::int32_t)0xffffffff, false },
|
|
{ 0x80000000, (std::int32_t)0xffffffff, false },
|
|
{ 0xffffffff, (std::int32_t)0xffffffff, false },
|
|
};
|
|
|
|
template<> TestVector< std::uint32_t, std::int32_t, OpType::Mult>::TestVector() : current(0)
|
|
{
|
|
this->test_cases = uint32_int32;
|
|
this->count = COUNTOF(uint32_int32);
|
|
}
|
|
|
|
static const TestCase< std::int32_t, std::uint64_t, OpType::Mult > int32_uint64[] =
|
|
{
|
|
{ (std::int32_t)0, 0, true },
|
|
{ (std::int32_t)1, 0, true },
|
|
{ (std::int32_t)2, 0, true },
|
|
{ (std::int32_t)0x7fffffff, 0, true },
|
|
{ (std::int32_t)0x80000000, 0, true },
|
|
{ (std::int32_t)0xffffffff, 0, true },
|
|
{ (std::int32_t)0, 1, true },
|
|
{ (std::int32_t)1, 1, true },
|
|
{ (std::int32_t)2, 1, true },
|
|
{ (std::int32_t)0x7fffffff, 1, true },
|
|
{ (std::int32_t)0x80000000, 1, true },
|
|
{ (std::int32_t)0xffffffff, 1, true },
|
|
{ (std::int32_t)0, 2, true },
|
|
{ (std::int32_t)1, 2, true },
|
|
{ (std::int32_t)2, 2, true },
|
|
{ (std::int32_t)0x7fffffff, 2, false },
|
|
{ (std::int32_t)0x80000000, 2, false },
|
|
{ (std::int32_t)0xffffffff, 2, true },
|
|
{ (std::int32_t)0, 0x7fffffff, true },
|
|
{ (std::int32_t)1, 0x7fffffff, true },
|
|
{ (std::int32_t)2, 0x7fffffff, false },
|
|
{ (std::int32_t)0x7fffffff, 0x7fffffff, false },
|
|
{ (std::int32_t)0x80000000, 0x7fffffff, false },
|
|
{ (std::int32_t)0xffffffff, 0x7fffffff, true },
|
|
{ (std::int32_t)0, 0x80000000, true },
|
|
{ (std::int32_t)1, 0x80000000, false },
|
|
{ (std::int32_t)2, 0x80000000, false },
|
|
{ (std::int32_t)0x7fffffff, 0x80000000, false },
|
|
{ (std::int32_t)0x80000000, 0x80000000, false },
|
|
{ (std::int32_t)0xffffffff, 0x80000000, true },
|
|
{ (std::int32_t)0, 0xffffffff, true },
|
|
{ (std::int32_t)1, 0xffffffff, false },
|
|
{ (std::int32_t)2, 0xffffffff, false },
|
|
{ (std::int32_t)0x7fffffff, 0xffffffff, false },
|
|
{ (std::int32_t)0x80000000, 0xffffffff, false },
|
|
{ (std::int32_t)0xffffffff, 0xffffffff, false },
|
|
{ (std::int32_t)0, 0x100000000, true },
|
|
{ (std::int32_t)1, 0x100000000, false },
|
|
{ (std::int32_t)2, 0x100000000, false },
|
|
{ (std::int32_t)0x7fffffff, 0x100000000, false },
|
|
{ (std::int32_t)0x80000000, 0x100000000, false },
|
|
{ (std::int32_t)0xffffffff, 0x100000000, false },
|
|
{ (std::int32_t)0, 0x200000000, true },
|
|
{ (std::int32_t)1, 0x200000000, false },
|
|
{ (std::int32_t)2, 0x200000000, false },
|
|
{ (std::int32_t)0x7fffffff, 0x200000000, false },
|
|
{ (std::int32_t)0x80000000, 0x200000000, false },
|
|
{ (std::int32_t)0xffffffff, 0x200000000, false },
|
|
{ (std::int32_t)0, 0x7fffffffffffffff, true },
|
|
{ (std::int32_t)1, 0x7fffffffffffffff, false },
|
|
{ (std::int32_t)2, 0x7fffffffffffffff, false },
|
|
{ (std::int32_t)0x7fffffff, 0x7fffffffffffffff, false },
|
|
{ (std::int32_t)0x80000000, 0x7fffffffffffffff, false },
|
|
{ (std::int32_t)0xffffffff, 0x7fffffffffffffff, false },
|
|
{ (std::int32_t)0, 0x8000000000000000, true },
|
|
{ (std::int32_t)1, 0x8000000000000000, false },
|
|
{ (std::int32_t)2, 0x8000000000000000, false },
|
|
{ (std::int32_t)0x7fffffff, 0x8000000000000000, false },
|
|
{ (std::int32_t)0x80000000, 0x8000000000000000, false },
|
|
{ (std::int32_t)0xffffffff, 0x8000000000000000, false },
|
|
{ (std::int32_t)0, 0xffffffffffffffff, true },
|
|
{ (std::int32_t)1, 0xffffffffffffffff, false },
|
|
{ (std::int32_t)2, 0xffffffffffffffff, false },
|
|
{ (std::int32_t)0x7fffffff, 0xffffffffffffffff, false },
|
|
{ (std::int32_t)0x80000000, 0xffffffffffffffff, false },
|
|
{ (std::int32_t)0xffffffff, 0xffffffffffffffff, false },
|
|
// Special case - force addition overflow case
|
|
{ (std::int32_t)0xffffffff, 0x100000002, false }
|
|
};
|
|
|
|
template<> TestVector< std::int32_t, std::uint64_t, OpType::Mult>::TestVector() : current(0)
|
|
{
|
|
this->test_cases = int32_uint64;
|
|
this->count = COUNTOF(int32_uint64);
|
|
}
|
|
|
|
static const TestCase< std::int32_t, std::uint32_t, OpType::Mult > int32_uint32[] =
|
|
{
|
|
{ (std::int32_t)0, 0, true },
|
|
{ (std::int32_t)1, 0, true },
|
|
{ (std::int32_t)2, 0, true },
|
|
{ (std::int32_t)0x7fffffff, 0, true },
|
|
{ (std::int32_t)0x80000000, 0, true },
|
|
{ (std::int32_t)0xffffffff, 0, true },
|
|
{ (std::int32_t)0, 1, true },
|
|
{ (std::int32_t)1, 1, true },
|
|
{ (std::int32_t)2, 1, true },
|
|
{ (std::int32_t)0x7fffffff, 1, true },
|
|
{ (std::int32_t)0x80000000, 1, true },
|
|
{ (std::int32_t)0xffffffff, 1, true },
|
|
{ (std::int32_t)0, 2, true },
|
|
{ (std::int32_t)1, 2, true },
|
|
{ (std::int32_t)2, 2, true },
|
|
{ (std::int32_t)0x7fffffff, 2, false },
|
|
{ (std::int32_t)0x80000000, 2, false },
|
|
{ (std::int32_t)0xffffffff, 2, true },
|
|
{ (std::int32_t)0, 0x7fffffff, true },
|
|
{ (std::int32_t)1, 0x7fffffff, true },
|
|
{ (std::int32_t)2, 0x7fffffff, false },
|
|
{ (std::int32_t)0x7fffffff, 0x7fffffff, false },
|
|
{ (std::int32_t)0x80000000, 0x7fffffff, false },
|
|
{ (std::int32_t)0xffffffff, 0x7fffffff, true },
|
|
{ (std::int32_t)0, 0x80000000, true },
|
|
{ (std::int32_t)1, 0x80000000, false },
|
|
{ (std::int32_t)2, 0x80000000, false },
|
|
{ (std::int32_t)0x7fffffff, 0x80000000, false },
|
|
{ (std::int32_t)0x80000000, 0x80000000, false },
|
|
{ (std::int32_t)0xffffffff, 0x80000000, true },
|
|
{ (std::int32_t)0, 0xffffffff, true },
|
|
{ (std::int32_t)1, 0xffffffff, false },
|
|
{ (std::int32_t)2, 0xffffffff, false },
|
|
{ (std::int32_t)0x7fffffff, 0xffffffff, false },
|
|
{ (std::int32_t)0x80000000, 0xffffffff, false },
|
|
{ (std::int32_t)0xffffffff, 0xffffffff, false },
|
|
};
|
|
|
|
template<> TestVector< std::int32_t, std::uint32_t, OpType::Mult>::TestVector() : current(0)
|
|
{
|
|
this->test_cases = int32_uint32;
|
|
this->count = COUNTOF(int32_uint32);
|
|
}
|
|
|
|
static const TestCase< std::int32_t, std::int64_t, OpType::Mult > int32_int64[] =
|
|
{
|
|
{ (std::int32_t)0, 0, true },
|
|
{ (std::int32_t)1, 0, true },
|
|
{ (std::int32_t)2, 0, true },
|
|
{ (std::int32_t)0x7fffffff, 0, true },
|
|
{ (std::int32_t)0x80000000, 0, true },
|
|
{ (std::int32_t)0xffffffff, 0, true },
|
|
{ (std::int32_t)0, 1, true },
|
|
{ (std::int32_t)1, 1, true },
|
|
{ (std::int32_t)2, 1, true },
|
|
{ (std::int32_t)0x7fffffff, 1, true },
|
|
{ (std::int32_t)0x80000000, 1, true },
|
|
{ (std::int32_t)0xffffffff, 1, true },
|
|
{ (std::int32_t)0, 2, true },
|
|
{ (std::int32_t)1, 2, true },
|
|
{ (std::int32_t)2, 2, true },
|
|
{ (std::int32_t)0x7fffffff, 2, false },
|
|
{ (std::int32_t)0x80000000, 2, false },
|
|
{ (std::int32_t)0xffffffff, 2, true },
|
|
{ (std::int32_t)0, 0x7fffffff, true },
|
|
{ (std::int32_t)1, 0x7fffffff, true },
|
|
{ (std::int32_t)2, 0x7fffffff, false },
|
|
{ (std::int32_t)0x7fffffff, 0x7fffffff, false },
|
|
{ (std::int32_t)0x80000000, 0x7fffffff, false },
|
|
{ (std::int32_t)0xffffffff, 0x7fffffff, true },
|
|
{ (std::int32_t)0, 0x80000000, true },
|
|
{ (std::int32_t)1, 0x80000000, false },
|
|
{ (std::int32_t)2, 0x80000000, false },
|
|
{ (std::int32_t)0x7fffffff, 0x80000000, false },
|
|
{ (std::int32_t)0x80000000, 0x80000000, false },
|
|
{ (std::int32_t)0xffffffff, 0x80000000, true },
|
|
{ (std::int32_t)0, 0xffffffff, true },
|
|
{ (std::int32_t)1, 0xffffffff, false },
|
|
{ (std::int32_t)2, 0xffffffff, false },
|
|
{ (std::int32_t)0x7fffffff, 0xffffffff, false },
|
|
{ (std::int32_t)0x80000000, 0xffffffff, false },
|
|
{ (std::int32_t)0xffffffff, 0xffffffff, false },
|
|
{ (std::int32_t)0, 0x100000000, true },
|
|
{ (std::int32_t)1, 0x100000000, false },
|
|
{ (std::int32_t)2, 0x100000000, false },
|
|
{ (std::int32_t)0x7fffffff, 0x100000000, false },
|
|
{ (std::int32_t)0x80000000, 0x100000000, false },
|
|
{ (std::int32_t)0xffffffff, 0x100000000, false },
|
|
{ (std::int32_t)0, 0x200000000, true },
|
|
{ (std::int32_t)1, 0x200000000, false },
|
|
{ (std::int32_t)2, 0x200000000, false },
|
|
{ (std::int32_t)0x7fffffff, 0x200000000, false },
|
|
{ (std::int32_t)0x80000000, 0x200000000, false },
|
|
{ (std::int32_t)0xffffffff, 0x200000000, false },
|
|
{ (std::int32_t)0, 0x7fffffffffffffff, true },
|
|
{ (std::int32_t)1, 0x7fffffffffffffff, false },
|
|
{ (std::int32_t)2, 0x7fffffffffffffff, false },
|
|
{ (std::int32_t)0x7fffffff, 0x7fffffffffffffff, false },
|
|
{ (std::int32_t)0x80000000, 0x7fffffffffffffff, false },
|
|
{ (std::int32_t)0xffffffff, 0x7fffffffffffffff, false },
|
|
{ (std::int32_t)0, (std::int64_t)0x8000000000000000, true },
|
|
{ (std::int32_t)1, (std::int64_t)0x8000000000000000, false },
|
|
{ (std::int32_t)2, (std::int64_t)0x8000000000000000, false },
|
|
{ (std::int32_t)0x7fffffff, (std::int64_t)0x8000000000000000, false },
|
|
{ (std::int32_t)0x80000000, (std::int64_t)0x8000000000000000, false },
|
|
{ (std::int32_t)0xffffffff, (std::int64_t)0x8000000000000000, false },
|
|
{ (std::int32_t)0, (std::int64_t)0xffffffffffffffff, true },
|
|
{ (std::int32_t)1, (std::int64_t)0xffffffffffffffff, true },
|
|
{ (std::int32_t)2, (std::int64_t)0xffffffffffffffff, true },
|
|
{ (std::int32_t)0x7fffffff, (std::int64_t)0xffffffffffffffff, true },
|
|
{ (std::int32_t)0x80000000, (std::int64_t)0xffffffffffffffff, false },
|
|
{ (std::int32_t)0xffffffff, (std::int64_t)0xffffffffffffffff, true },
|
|
// Special case - force addition overflow case
|
|
{ (std::int32_t)0xffffffff, 0x100000002, false }
|
|
};
|
|
|
|
template<> TestVector< std::int32_t, std::int64_t, OpType::Mult>::TestVector() : current(0)
|
|
{
|
|
this->test_cases = int32_int64;
|
|
this->count = COUNTOF(int32_int64);
|
|
}
|
|
|
|
static const TestCase< std::int32_t, std::int32_t, OpType::Mult > int32_int32[] =
|
|
{
|
|
{ (std::int32_t)0, 0, true },
|
|
{ (std::int32_t)1, 0, true },
|
|
{ (std::int32_t)2, 0, true },
|
|
{ (std::int32_t)0x7fffffff, 0, true },
|
|
{ (std::int32_t)0x80000000, 0, true },
|
|
{ (std::int32_t)0xffffffff, 0, true },
|
|
{ (std::int32_t)0, 1, true },
|
|
{ (std::int32_t)1, 1, true },
|
|
{ (std::int32_t)2, 1, true },
|
|
{ (std::int32_t)0x7fffffff, 1, true },
|
|
{ (std::int32_t)0x80000000, 1, true },
|
|
{ (std::int32_t)0xffffffff, 1, true },
|
|
{ (std::int32_t)0, 2, true },
|
|
{ (std::int32_t)1, 2, true },
|
|
{ (std::int32_t)2, 2, true },
|
|
{ (std::int32_t)0x7fffffff, 2, false },
|
|
{ (std::int32_t)0x80000000, 2, false },
|
|
{ (std::int32_t)0xffffffff, 2, true },
|
|
{ (std::int32_t)0, 0x7fffffff, true },
|
|
{ (std::int32_t)1, 0x7fffffff, true },
|
|
{ (std::int32_t)2, 0x7fffffff, false },
|
|
{ (std::int32_t)0x7fffffff, 0x7fffffff, false },
|
|
{ (std::int32_t)0x80000000, 0x7fffffff, false },
|
|
{ (std::int32_t)0xffffffff, 0x7fffffff, true },
|
|
{ (std::int32_t)0, (std::int32_t)0x80000000, true },
|
|
{ (std::int32_t)1, (std::int32_t)0x80000000, true },
|
|
{ (std::int32_t)2, (std::int32_t)0x80000000, false },
|
|
{ (std::int32_t)0x7fffffff, (std::int32_t)0x80000000, false },
|
|
{ (std::int32_t)0x80000000, (std::int32_t)0x80000000, false },
|
|
{ (std::int32_t)0xffffffff, (std::int32_t)0x80000000, false },
|
|
{ (std::int32_t)0, (std::int32_t)0xffffffff, true },
|
|
{ (std::int32_t)1, (std::int32_t)0xffffffff, true },
|
|
{ (std::int32_t)2, (std::int32_t)0xffffffff, true },
|
|
{ (std::int32_t)0x7fffffff, (std::int32_t)0xffffffff, true },
|
|
{ (std::int32_t)0x80000000, (std::int32_t)0xffffffff, false },
|
|
{ (std::int32_t)0xffffffff, (std::int32_t)0xffffffff, true },
|
|
};
|
|
|
|
template<> TestVector< std::int32_t, std::int32_t, OpType::Mult>::TestVector() : current(0)
|
|
{
|
|
this->test_cases = int32_int32;
|
|
this->count = COUNTOF(int32_int32);
|
|
}
|
|
|
|
|