mirror of
https://gitlab.com/libeigen/eigen.git
synced 2026-04-10 11:34:33 +08:00
Extended the range of value inputs for TensorIntDiv to support tensors with more than 4 billion elements.
This commit is contained in:
@@ -67,10 +67,46 @@ void test_unsigned_64bit()
|
||||
}
|
||||
}
|
||||
|
||||
void test_powers_32bit() {
|
||||
for (int expon = 1; expon < 31; expon++) {
|
||||
int32_t div = (1ull << expon);
|
||||
for (int num_expon = 0; num_expon < 32; num_expon++) {
|
||||
int32_t start_num = (1ull << num_expon) - 100;
|
||||
int32_t end_num = (1ull << num_expon) + 100;
|
||||
if (start_num < 0)
|
||||
start_num = 0;
|
||||
for (int64_t num = start_num; num < end_num; num++) {
|
||||
Eigen::internal::TensorIntDivisor<int32_t> divider =
|
||||
Eigen::internal::TensorIntDivisor<int32_t>(div);
|
||||
int32_t result = num/div;
|
||||
int32_t result_op = divider.divide(num);
|
||||
VERIFY_IS_EQUAL(result_op, result);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void test_specific()
|
||||
{
|
||||
// A particular combination that exposed a bug in the past.
|
||||
void test_powers_64bit() {
|
||||
for (int expon = 0; expon < 63; expon++) {
|
||||
int64_t div = (1ull << expon);
|
||||
for (int num_expon = 0; num_expon < 63; num_expon++) {
|
||||
int64_t start_num = (1ull << num_expon) - 10;
|
||||
int64_t end_num = (1ull << num_expon) + 10;
|
||||
if (start_num < 0)
|
||||
start_num = 0;
|
||||
for (int64_t num = start_num; num < end_num; num++) {
|
||||
Eigen::internal::TensorIntDivisor<int64_t> divider =
|
||||
Eigen::internal::TensorIntDivisor<int64_t>(div);
|
||||
int64_t result = num/div;
|
||||
int64_t result_op = divider.divide(num);
|
||||
VERIFY_IS_EQUAL(result_op, result);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void test_specific() {
|
||||
// A particular combination that was previously failing
|
||||
int64_t div = 209715200;
|
||||
int64_t num = 3238002688;
|
||||
Eigen::internal::TensorIntDivisor<int64_t> divider =
|
||||
@@ -86,5 +122,7 @@ void test_cxx11_tensor_intdiv()
|
||||
CALL_SUBTEST_2(test_unsigned_32bit());
|
||||
CALL_SUBTEST_3(test_signed_64bit());
|
||||
CALL_SUBTEST_4(test_unsigned_64bit());
|
||||
CALL_SUBTEST_5(test_specific());
|
||||
CALL_SUBTEST_5(test_powers_32bit());
|
||||
CALL_SUBTEST_6(test_powers_64bit());
|
||||
CALL_SUBTEST_7(test_specific());
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user