| // 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, 0xffffffffffffffff, true }, | |
| { 1, 0xffffffffffffffff, false }, | |
| { 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 } | |
| }; | |
| 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, 0x80000000, true }, | |
| { 1, 0x80000000, false }, | |
| { 2, 0x80000000, false }, | |
| { 0x7fffffff, 0x80000000, false }, | |
| { 0x80000000, 0x80000000, false }, | |
| { 0xffffffff, 0x80000000, false }, | |
| { 0x100000000, 0x80000000, false }, | |
| { 0x200000000, 0x80000000, false }, | |
| { 0x7fffffffffffffff, 0x80000000, false }, | |
| { 0x8000000000000000, 0x80000000, false }, | |
| { 0xffffffffffffffff, 0x80000000, false }, | |
| { 0, 0xffffffff, true }, | |
| { 1, 0xffffffff, false }, | |
| { 2, 0xffffffff, false }, | |
| { 0x7fffffff, 0xffffffff, false }, | |
| { 0x80000000, 0xffffffff, false }, | |
| { 0xffffffff, 0xffffffff, false }, | |
| { 0x100000000, 0xffffffff, false }, | |
| { 0x200000000, 0xffffffff, false }, | |
| { 0x7fffffffffffffff, 0xffffffff, false }, | |
| { 0x8000000000000000, 0xffffffff, false }, | |
| { 0xffffffffffffffff, 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[] = | |
| { | |
| { 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, false }, | |
| { 0x8000000000000000, 2, false }, | |
| { 0xffffffffffffffff, 2, true }, | |
| { 0, 0x7fffffff, true }, | |
| { 1, 0x7fffffff, true }, | |
| { 2, 0x7fffffff, true }, | |
| { 0x7fffffff, 0x7fffffff, true }, | |
| { 0x80000000, 0x7fffffff, true }, | |
| { 0xffffffff, 0x7fffffff, true }, | |
| { 0x100000000, 0x7fffffff, true }, | |
| { 0x200000000, 0x7fffffff, false }, | |
| { 0x7fffffffffffffff, 0x7fffffff, false }, | |
| { 0x8000000000000000, 0x7fffffff, false }, | |
| { 0xffffffffffffffff, 0x7fffffff, true }, | |
| { 0, 0x80000000, true }, | |
| { 1, 0x80000000, true }, | |
| { 2, 0x80000000, true }, | |
| { 0x7fffffff, 0x80000000, true }, | |
| { 0x80000000, 0x80000000, true }, | |
| { 0xffffffff, 0x80000000, true }, | |
| { 0x100000000, 0x80000000, false }, | |
| { 0x200000000, 0x80000000, false }, | |
| { 0x7fffffffffffffff, 0x80000000, false }, | |
| { 0x8000000000000000, 0x80000000, false }, | |
| { 0xffffffffffffffff, 0x80000000, true }, | |
| { 0, 0xffffffff, true }, | |
| { 1, 0xffffffff, true }, | |
| { 2, 0xffffffff, true }, | |
| { 0x7fffffff, 0xffffffff, true }, | |
| { 0x80000000, 0xffffffff, true }, | |
| { 0xffffffff, 0xffffffff, false }, | |
| { 0x100000000, 0xffffffff, false }, | |
| { 0x200000000, 0xffffffff, false }, | |
| { 0x7fffffffffffffff, 0xffffffff, false }, | |
| { 0x8000000000000000, 0xffffffff, false }, | |
| { 0xffffffffffffffff, 0xffffffff, true }, | |
| { 0, 0x100000000, true }, | |
| { 1, 0x100000000, true }, | |
| { 2, 0x100000000, true }, | |
| { 0x7fffffff, 0x100000000, true }, | |
| { 0x80000000, 0x100000000, false }, | |
| { 0xffffffff, 0x100000000, false }, | |
| { 0x100000000, 0x100000000, false }, | |
| { 0x200000000, 0x100000000, false }, | |
| { 0x7fffffffffffffff, 0x100000000, false }, | |
| { 0x8000000000000000, 0x100000000, false }, | |
| { 0xffffffffffffffff, 0x100000000, true }, | |
| { 0, 0x200000000, true }, | |
| { 1, 0x200000000, true }, | |
| { 2, 0x200000000, true }, | |
| { 0x7fffffff, 0x200000000, false }, | |
| { 0x80000000, 0x200000000, false }, | |
| { 0xffffffff, 0x200000000, false }, | |
| { 0x100000000, 0x200000000, false }, | |
| { 0x200000000, 0x200000000, false }, | |
| { 0x7fffffffffffffff, 0x200000000, false }, | |
| { 0x8000000000000000, 0x200000000, false }, | |
| { 0xffffffffffffffff, 0x200000000, true }, | |
| { 0, 0x7fffffffffffffff, true }, | |
| { 1, 0x7fffffffffffffff, true }, | |
| { 2, 0x7fffffffffffffff, false }, | |
| { 0x7fffffff, 0x7fffffffffffffff, false }, | |
| { 0x80000000, 0x7fffffffffffffff, false }, | |
| { 0xffffffff, 0x7fffffffffffffff, false }, | |
| { 0x100000000, 0x7fffffffffffffff, false }, | |
| { 0x200000000, 0x7fffffffffffffff, false }, | |
| { 0x7fffffffffffffff, 0x7fffffffffffffff, false }, | |
| { 0x8000000000000000, 0x7fffffffffffffff, false }, | |
| { 0xffffffffffffffff, 0x7fffffffffffffff, true }, | |
| { 0, 0x8000000000000000, true }, | |
| { 1, 0x8000000000000000, false }, | |
| { 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, true }, | |
| { 0, 0xffffffffffffffff, true }, | |
| { 1, 0xffffffffffffffff, false }, | |
| { 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::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[] = | |
| { | |
| { 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, false }, | |
| { 0x8000000000000000, 2, false }, | |
| { 0xffffffffffffffff, 2, true }, | |
| { 0, 0x7fffffff, true }, | |
| { 1, 0x7fffffff, true }, | |
| { 2, 0x7fffffff, true }, | |
| { 0x7fffffff, 0x7fffffff, true }, | |
| { 0x80000000, 0x7fffffff, true }, | |
| { 0xffffffff, 0x7fffffff, true }, | |
| { 0x100000000, 0x7fffffff, true }, | |
| { 0x200000000, 0x7fffffff, false }, | |
| { 0x7fffffffffffffff, 0x7fffffff, false }, | |
| { 0x8000000000000000, 0x7fffffff, false }, | |
| { 0xffffffffffffffff, 0x7fffffff, true }, | |
| { 0, 0x80000000, true }, | |
| { 1, 0x80000000, true }, | |
| { 2, 0x80000000, true }, | |
| { 0x7fffffff, 0x80000000, true }, | |
| { 0x80000000, 0x80000000, true }, | |
| { 0xffffffff, 0x80000000, true }, | |
| { 0x100000000, 0x80000000, false }, | |
| { 0x200000000, 0x80000000, false }, | |
| { 0x7fffffffffffffff, 0x80000000, false }, | |
| { 0x8000000000000000, 0x80000000, false }, | |
| { 0xffffffffffffffff, 0x80000000, true }, | |
| { 0, 0xffffffff, true }, | |
| { 1, 0xffffffff, true }, | |
| { 2, 0xffffffff, true }, | |
| { 0x7fffffff, 0xffffffff, true }, | |
| { 0x80000000, 0xffffffff, true }, | |
| { 0xffffffff, 0xffffffff, false }, | |
| { 0x100000000, 0xffffffff, false }, | |
| { 0x200000000, 0xffffffff, false }, | |
| { 0x7fffffffffffffff, 0xffffffff, false }, | |
| { 0x8000000000000000, 0xffffffff, false }, | |
| { 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[] = | |
| { | |
| { 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, false }, | |
| { 0x8000000000000000, 2, false }, | |
| { 0xffffffffffffffff, 2, true }, | |
| { 0, 0x7fffffff, true }, | |
| { 1, 0x7fffffff, true }, | |
| { 2, 0x7fffffff, true }, | |
| { 0x7fffffff, 0x7fffffff, true }, | |
| { 0x80000000, 0x7fffffff, true }, | |
| { 0xffffffff, 0x7fffffff, true }, | |
| { 0x100000000, 0x7fffffff, true }, | |
| { 0x200000000, 0x7fffffff, false }, | |
| { 0x7fffffffffffffff, 0x7fffffff, false }, | |
| { 0x8000000000000000, 0x7fffffff, false }, | |
| { 0xffffffffffffffff, 0x7fffffff, true }, | |
| { 0, 0x80000000, true }, | |
| { 1, 0x80000000, true }, | |
| { 2, 0x80000000, true }, | |
| { 0x7fffffff, 0x80000000, true }, | |
| { 0x80000000, 0x80000000, true }, | |
| { 0xffffffff, 0x80000000, true }, | |
| { 0x100000000, 0x80000000, false }, | |
| { 0x200000000, 0x80000000, false }, | |
| { 0x7fffffffffffffff, 0x80000000, false }, | |
| { 0x8000000000000000, 0x80000000, false }, | |
| { 0xffffffffffffffff, 0x80000000, true }, | |
| { 0, 0xffffffff, true }, | |
| { 1, 0xffffffff, true }, | |
| { 2, 0xffffffff, true }, | |
| { 0x7fffffff, 0xffffffff, true }, | |
| { 0x80000000, 0xffffffff, true }, | |
| { 0xffffffff, 0xffffffff, false }, | |
| { 0x100000000, 0xffffffff, false }, | |
| { 0x200000000, 0xffffffff, false }, | |
| { 0x7fffffffffffffff, 0xffffffff, false }, | |
| { 0x8000000000000000, 0xffffffff, false }, | |
| { 0xffffffffffffffff, 0xffffffff, true }, | |
| { 0, 0x100000000, true }, | |
| { 1, 0x100000000, true }, | |
| { 2, 0x100000000, true }, | |
| { 0x7fffffff, 0x100000000, true }, | |
| { 0x80000000, 0x100000000, false }, | |
| { 0xffffffff, 0x100000000, false }, | |
| { 0x100000000, 0x100000000, false }, | |
| { 0x200000000, 0x100000000, false }, | |
| { 0x7fffffffffffffff, 0x100000000, false }, | |
| { 0x8000000000000000, 0x100000000, false }, | |
| { 0xffffffffffffffff, 0x100000000, true }, | |
| { 0, 0x200000000, true }, | |
| { 1, 0x200000000, true }, | |
| { 2, 0x200000000, true }, | |
| { 0x7fffffff, 0x200000000, false }, | |
| { 0x80000000, 0x200000000, false }, | |
| { 0xffffffff, 0x200000000, false }, | |
| { 0x100000000, 0x200000000, false }, | |
| { 0x200000000, 0x200000000, false }, | |
| { 0x7fffffffffffffff, 0x200000000, false }, | |
| { 0x8000000000000000, 0x200000000, false }, | |
| { 0xffffffffffffffff, 0x200000000, true }, | |
| { 0, 0x7fffffffffffffff, true }, | |
| { 1, 0x7fffffffffffffff, true }, | |
| { 2, 0x7fffffffffffffff, false }, | |
| { 0x7fffffff, 0x7fffffffffffffff, false }, | |
| { 0x80000000, 0x7fffffffffffffff, false }, | |
| { 0xffffffff, 0x7fffffffffffffff, false }, | |
| { 0x100000000, 0x7fffffffffffffff, false }, | |
| { 0x200000000, 0x7fffffffffffffff, false }, | |
| { 0x7fffffffffffffff, 0x7fffffffffffffff, false }, | |
| { 0x8000000000000000, 0x7fffffffffffffff, false }, | |
| { 0xffffffffffffffff, 0x7fffffffffffffff, true }, | |
| { 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, true }, | |
| { 0x7fffffff, 0xffffffffffffffff, true }, | |
| { 0x80000000, 0xffffffffffffffff, true }, | |
| { 0xffffffff, 0xffffffffffffffff, true }, | |
| { 0x100000000, 0xffffffffffffffff, true }, | |
| { 0x200000000, 0xffffffffffffffff, true }, | |
| { 0x7fffffffffffffff, 0xffffffffffffffff, true }, | |
| { 0x8000000000000000, 0xffffffffffffffff, false }, | |
| { 0xffffffffffffffff, 0xffffffffffffffff, true }, | |
| // Special case - force addition overflow case | |
| { 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[] = | |
| { | |
| { 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, false }, | |
| { 0x8000000000000000, 2, false }, | |
| { 0xffffffffffffffff, 2, true }, | |
| { 0, 0x7fffffff, true }, | |
| { 1, 0x7fffffff, true }, | |
| { 2, 0x7fffffff, true }, | |
| { 0x7fffffff, 0x7fffffff, true }, | |
| { 0x80000000, 0x7fffffff, true }, | |
| { 0xffffffff, 0x7fffffff, true }, | |
| { 0x100000000, 0x7fffffff, true }, | |
| { 0x200000000, 0x7fffffff, false }, | |
| { 0x7fffffffffffffff, 0x7fffffff, false }, | |
| { 0x8000000000000000, 0x7fffffff, false }, | |
| { 0xffffffffffffffff, 0x7fffffff, true }, | |
| { 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, true }, | |
| { 0, 0xffffffff, true }, | |
| { 1, 0xffffffff, true }, | |
| { 2, 0xffffffff, true }, | |
| { 0x7fffffff, 0xffffffff, true }, | |
| { 0x80000000, 0xffffffff, true }, | |
| { 0xffffffff, 0xffffffff, true }, | |
| { 0x100000000, 0xffffffff, true }, | |
| { 0x200000000, 0xffffffff, true }, | |
| { 0x7fffffffffffffff, 0xffffffff, true }, | |
| { 0x8000000000000000, 0xffffffff, false }, | |
| { 0xffffffffffffffff, 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, 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::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, 0x80000000, true }, | |
| { 1, 0x80000000, false }, | |
| { 2, 0x80000000, false }, | |
| { 0x7fffffff, 0x80000000, false }, | |
| { 0x80000000, 0x80000000, false }, | |
| { 0xffffffff, 0x80000000, false }, | |
| { 0, 0xffffffff, true }, | |
| { 1, 0xffffffff, false }, | |
| { 2, 0xffffffff, false }, | |
| { 0x7fffffff, 0xffffffff, false }, | |
| { 0x80000000, 0xffffffff, false }, | |
| { 0xffffffff, 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[] = | |
| { | |
| { 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, false }, | |
| { 0x80000000, 2, false }, | |
| { 0xffffffff, 2, true }, | |
| { 0, 0x7fffffff, true }, | |
| { 1, 0x7fffffff, true }, | |
| { 2, 0x7fffffff, false }, | |
| { 0x7fffffff, 0x7fffffff, false }, | |
| { 0x80000000, 0x7fffffff, false }, | |
| { 0xffffffff, 0x7fffffff, true }, | |
| { 0, 0x80000000, true }, | |
| { 1, 0x80000000, false }, | |
| { 2, 0x80000000, false }, | |
| { 0x7fffffff, 0x80000000, false }, | |
| { 0x80000000, 0x80000000, false }, | |
| { 0xffffffff, 0x80000000, true }, | |
| { 0, 0xffffffff, true }, | |
| { 1, 0xffffffff, false }, | |
| { 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 }, | |
| // Special case - force addition overflow case | |
| { 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[] = | |
| { | |
| { 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, false }, | |
| { 0x80000000, 2, false }, | |
| { 0xffffffff, 2, true }, | |
| { 0, 0x7fffffff, true }, | |
| { 1, 0x7fffffff, true }, | |
| { 2, 0x7fffffff, false }, | |
| { 0x7fffffff, 0x7fffffff, false }, | |
| { 0x80000000, 0x7fffffff, false }, | |
| { 0xffffffff, 0x7fffffff, true }, | |
| { 0, 0x80000000, true }, | |
| { 1, 0x80000000, false }, | |
| { 2, 0x80000000, false }, | |
| { 0x7fffffff, 0x80000000, false }, | |
| { 0x80000000, 0x80000000, false }, | |
| { 0xffffffff, 0x80000000, true }, | |
| { 0, 0xffffffff, true }, | |
| { 1, 0xffffffff, false }, | |
| { 2, 0xffffffff, false }, | |
| { 0x7fffffff, 0xffffffff, false }, | |
| { 0x80000000, 0xffffffff, false }, | |
| { 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[] = | |
| { | |
| { 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, false }, | |
| { 0x80000000, 2, false }, | |
| { 0xffffffff, 2, true }, | |
| { 0, 0x7fffffff, true }, | |
| { 1, 0x7fffffff, true }, | |
| { 2, 0x7fffffff, false }, | |
| { 0x7fffffff, 0x7fffffff, false }, | |
| { 0x80000000, 0x7fffffff, false }, | |
| { 0xffffffff, 0x7fffffff, true }, | |
| { 0, 0x80000000, true }, | |
| { 1, 0x80000000, false }, | |
| { 2, 0x80000000, false }, | |
| { 0x7fffffff, 0x80000000, false }, | |
| { 0x80000000, 0x80000000, false }, | |
| { 0xffffffff, 0x80000000, true }, | |
| { 0, 0xffffffff, true }, | |
| { 1, 0xffffffff, false }, | |
| { 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, true }, | |
| { 2, 0xffffffffffffffff, true }, | |
| { 0x7fffffff, 0xffffffffffffffff, true }, | |
| { 0x80000000, 0xffffffffffffffff, false }, | |
| { 0xffffffff, 0xffffffffffffffff, true }, | |
| // Special case - force addition overflow case | |
| { 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[] = | |
| { | |
| { 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, false }, | |
| { 0x80000000, 2, false }, | |
| { 0xffffffff, 2, true }, | |
| { 0, 0x7fffffff, true }, | |
| { 1, 0x7fffffff, true }, | |
| { 2, 0x7fffffff, false }, | |
| { 0x7fffffff, 0x7fffffff, false }, | |
| { 0x80000000, 0x7fffffff, false }, | |
| { 0xffffffff, 0x7fffffff, true }, | |
| { 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, true }, | |
| { 0x7fffffff, 0xffffffff, true }, | |
| { 0x80000000, 0xffffffff, false }, | |
| { 0xffffffff, 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); | |
| } | |