cxx11_tensor_intdiv.cpp File Reference
#include "main.h"
#include <Eigen/CXX11/Tensor>

Functions

void test_signed_32bit ()
 
void test_unsigned_32bit ()
 
void test_signed_64bit ()
 
void test_unsigned_64bit ()
 
void test_powers_32bit ()
 
void test_powers_64bit ()
 
void test_specific ()
 
 EIGEN_DECLARE_TEST (cxx11_tensor_intdiv)
 

Function Documentation

◆ EIGEN_DECLARE_TEST()

EIGEN_DECLARE_TEST ( cxx11_tensor_intdiv  )
127  {
135 }
void test_powers_64bit()
Definition: cxx11_tensor_intdiv.cpp:100
void test_signed_32bit()
Definition: cxx11_tensor_intdiv.cpp:14
void test_unsigned_64bit()
Definition: cxx11_tensor_intdiv.cpp:71
void test_powers_32bit()
Definition: cxx11_tensor_intdiv.cpp:83
void test_unsigned_32bit()
Definition: cxx11_tensor_intdiv.cpp:47
void test_specific()
Definition: cxx11_tensor_intdiv.cpp:117
void test_signed_64bit()
Definition: cxx11_tensor_intdiv.cpp:59
#define CALL_SUBTEST_6(FUNC)
Definition: split_test_helper.h:34
#define CALL_SUBTEST_3(FUNC)
Definition: split_test_helper.h:16
#define CALL_SUBTEST_1(FUNC)
Definition: split_test_helper.h:4
#define CALL_SUBTEST_5(FUNC)
Definition: split_test_helper.h:28
#define CALL_SUBTEST_2(FUNC)
Definition: split_test_helper.h:10
#define CALL_SUBTEST_7(FUNC)
Definition: split_test_helper.h:40
#define CALL_SUBTEST_4(FUNC)
Definition: split_test_helper.h:22

References CALL_SUBTEST_1, CALL_SUBTEST_2, CALL_SUBTEST_3, CALL_SUBTEST_4, CALL_SUBTEST_5, CALL_SUBTEST_6, CALL_SUBTEST_7, test_powers_32bit(), test_powers_64bit(), test_signed_32bit(), test_signed_64bit(), test_specific(), test_unsigned_32bit(), and test_unsigned_64bit().

◆ test_powers_32bit()

void test_powers_32bit ( )
83  {
84  for (int expon = 1; expon < 31; expon++) {
85  int32_t div = (1 << expon);
86  for (int num_expon = 0; num_expon < 32; num_expon++) {
87  int32_t start_num = (1 << num_expon) - 100;
88  int32_t end_num = (1 << num_expon) + 100;
89  if (start_num < 0) start_num = 0;
90  for (int32_t num = start_num; num < end_num; num++) {
92  int32_t result = num / div;
93  int32_t result_op = divider.divide(num);
94  VERIFY_IS_EQUAL(result_op, result);
95  }
96  }
97  }
98 }
#define VERIFY_IS_EQUAL(a, b)
Definition: main.h:367
std::int32_t int32_t
Definition: Meta.h:41
Definition: TensorIntDiv.h:140
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE T divide(const T numerator) const
Definition: TensorIntDiv.h:171

References Eigen::internal::TensorIntDivisor< T, div_gt_one >::divide(), and VERIFY_IS_EQUAL.

Referenced by EIGEN_DECLARE_TEST().

◆ test_powers_64bit()

void test_powers_64bit ( )
100  {
101  for (int expon = 0; expon < 63; expon++) {
102  int64_t div = (1ull << expon);
103  for (int num_expon = 0; num_expon < 63; num_expon++) {
104  int64_t start_num = (1ull << num_expon) - 10;
105  int64_t end_num = (1ull << num_expon) + 10;
106  if (start_num < 0) start_num = 0;
107  for (int64_t num = start_num; num < end_num; num++) {
109  int64_t result = num / div;
110  int64_t result_op = divider.divide(num);
111  VERIFY_IS_EQUAL(result_op, result);
112  }
113  }
114  }
115 }
std::int64_t int64_t
Definition: Meta.h:43

References Eigen::internal::TensorIntDivisor< T, div_gt_one >::divide(), and VERIFY_IS_EQUAL.

Referenced by EIGEN_DECLARE_TEST().

◆ test_signed_32bit()

void test_signed_32bit ( )
14  {
15  // Divide by one
17 
18  for (int32_t j = 0; j < 25000; ++j) {
19  const int32_t fast_div = j / div_by_one;
20  const int32_t slow_div = j / 1;
21  VERIFY_IS_EQUAL(fast_div, slow_div);
22  }
23 
24  // Standard divide by 2 or more
25  for (int32_t i = 2; i < 25000; ++i) {
27 
28  for (int32_t j = 0; j < 25000; ++j) {
29  const int32_t fast_div = j / div;
30  const int32_t slow_div = j / i;
31  VERIFY_IS_EQUAL(fast_div, slow_div);
32  }
33  }
34 
35  // Optimized divide by 2 or more
36  for (int32_t i = 2; i < 25000; ++i) {
38 
39  for (int32_t j = 0; j < 25000; ++j) {
40  const int32_t fast_div = j / div;
41  const int32_t slow_div = j / i;
42  VERIFY_IS_EQUAL(fast_div, slow_div);
43  }
44  }
45 }
int i
Definition: BiCGSTAB_step_by_step.cpp:9
std::ptrdiff_t j
Definition: tut_arithmetic_redux_minmax.cpp:2

References i, j, and VERIFY_IS_EQUAL.

Referenced by EIGEN_DECLARE_TEST().

◆ test_signed_64bit()

void test_signed_64bit ( )
59  {
60  for (int64_t i = 1; i < 25000; ++i) {
62 
63  for (int64_t j = 0; j < 25000; ++j) {
64  const int64_t fast_div = j / div;
65  const int64_t slow_div = j / i;
66  VERIFY_IS_EQUAL(fast_div, slow_div);
67  }
68  }
69 }

References i, j, and VERIFY_IS_EQUAL.

Referenced by EIGEN_DECLARE_TEST().

◆ test_specific()

void test_specific ( )
117  {
118  // A particular combination that was previously failing
119  int64_t div = 209715200;
120  int64_t num = 3238002688ll;
122  int64_t result = num / div;
123  int64_t result_op = divider.divide(num);
124  VERIFY_IS_EQUAL(result, result_op);
125 }

References Eigen::internal::TensorIntDivisor< T, div_gt_one >::divide(), and VERIFY_IS_EQUAL.

Referenced by EIGEN_DECLARE_TEST().

◆ test_unsigned_32bit()

void test_unsigned_32bit ( )
47  {
48  for (uint32_t i = 1; i < 25000; ++i) {
50 
51  for (uint32_t j = 0; j < 25000; ++j) {
52  const uint32_t fast_div = j / div;
53  const uint32_t slow_div = j / i;
54  VERIFY_IS_EQUAL(fast_div, slow_div);
55  }
56  }
57 }
std::uint32_t uint32_t
Definition: Meta.h:40

References i, j, and VERIFY_IS_EQUAL.

Referenced by EIGEN_DECLARE_TEST().

◆ test_unsigned_64bit()

void test_unsigned_64bit ( )
71  {
72  for (uint64_t i = 1; i < 25000; ++i) {
74 
75  for (uint64_t j = 0; j < 25000; ++j) {
76  const uint64_t fast_div = j / div;
77  const uint64_t slow_div = j / i;
78  VERIFY_IS_EQUAL(fast_div, slow_div);
79  }
80  }
81 }
std::uint64_t uint64_t
Definition: Meta.h:42

References i, j, and VERIFY_IS_EQUAL.

Referenced by EIGEN_DECLARE_TEST().