12 #include <Eigen/CXX11/Tensor> 16 #define EIGEN_NO_INT128 22 #ifndef EIGEN_NO_INT128 28 bool matchl = actual.
lower() ==
static_cast<uint64_t
>(expected);
29 bool matchh = actual.
upper() ==
static_cast<uint64_t
>(expected >> 64);
30 if (!matchl || !matchh) {
31 const char* testname = g_test_stack.back().c_str();
32 std::cerr <<
"Test " << testname <<
" failed in " << __FILE__
33 <<
" (" << __LINE__ <<
")" 41 uint64_t incr = internal::random<uint64_t>(1, 9999999999);
42 for (uint64_t i1 = 0; i1 < 100; ++i1) {
43 for (uint64_t i2 = 1; i2 < 100 * incr; i2 += incr) {
46 for (uint64_t j1 = 0; j1 < 100; ++j1) {
47 for (uint64_t j2 = 1; j2 < 100 * incr; j2 += incr) {
60 uint64_t incr = internal::random<uint64_t>(1, 9999999999);
61 for (uint64_t i1 = 0; i1 < 100; ++i1) {
62 for (uint64_t i2 = 1; i2 < 100 * incr; i2 += incr) {
65 for (uint64_t j1 = 0; j1 < 100; ++j1) {
66 for (uint64_t j2 = 1; j2 < 100 * incr; j2 += incr) {
79 uint64_t incr = internal::random<uint64_t>(1, 9999999999);
80 for (uint64_t i1 = 0; i1 < 100; ++i1) {
81 for (uint64_t i2 = 1; i2 < 100 * incr; i2 += incr) {
84 for (uint64_t j1 = 0; j1 < 100; ++j1) {
85 for (uint64_t j2 = 1; j2 < 100 * incr; j2 += incr) {
98 uint64_t incr = internal::random<uint64_t>(1, 9999999999);
99 for (uint64_t i1 = 0; i1 < 100; ++i1) {
100 for (uint64_t i2 = 1; i2 < 100 * incr; i2 += incr) {
103 for (uint64_t j1 = 0; j1 < 100; ++j1) {
104 for (uint64_t j2 = 1; j2 < 100 * incr; j2 += incr) {
117 uint64_t incr = internal::random<uint64_t>(1, 9999999999);
118 for (uint64_t i2 = 1; i2 < 100 * incr; i2 += incr) {
121 for (uint64_t j2 = 1; j2 < 100 * incr; j2 += incr) {
124 uint64_t actual = (i * j).upper();
125 uint64_t expected = (a *
b) >> 64;
126 VERIFY_IS_EQUAL(actual, expected);
132 int64_t incr = internal::random<int64_t>(1, 100);
133 for (int64_t log_div = 0; log_div < 63; ++log_div) {
134 for (int64_t divider = 1; divider <= 1000000 * incr; divider += incr) {
135 uint64_t expected = (
static_cast<uint128_t>(1) << (64+log_div)) / static_cast<uint128_t>(divider) - (
static_cast<uint128_t>(1) << 64) + 1;
136 uint64_t shift = 1ULL << log_div;
139 uint64_t actual =
static_cast<uint64_t
>(result);
140 VERIFY_IS_EQUAL(actual, expected);
149 #ifdef EIGEN_NO_INT128
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE HIGH upper() const
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE LOW lower() const
void VERIFY_EQUAL(TensorUInt128< uint64_t, uint64_t > actual, uint128_t expected)
void test_cxx11_tensor_uint128()
EIGEN_DEVICE_FUNC const Scalar & b