tuple_test.cpp File Reference
#include "main.h"
#include <Eigen/Core>
#include <Eigen/src/Core/arch/GPU/Tuple.h>

Functions

void basic_tuple_test ()
 
void eigen_tuple_test ()
 
 EIGEN_DECLARE_TEST (tuple)
 

Function Documentation

◆ basic_tuple_test()

void basic_tuple_test ( )
18  {
19  // Construction.
20  tuple<> tuple0{};
21  tuple<int> tuple1{1};
22  tuple<int, float> tuple2{3, 5.0f};
23  tuple<int, float, double> tuple3{7, 11.0f, 13.0};
24  // Default construction.
25  tuple<> tuple0default;
26  EIGEN_UNUSED_VARIABLE(tuple0default)
27  tuple<int> tuple1default;
28  EIGEN_UNUSED_VARIABLE(tuple1default)
29  tuple<int, float> tuple2default;
30  EIGEN_UNUSED_VARIABLE(tuple2default)
31  tuple<int, float, double> tuple3default;
32  EIGEN_UNUSED_VARIABLE(tuple3default)
33 
34  // Assignment.
35  tuple<> tuple0b = tuple0;
36  EIGEN_UNUSED_VARIABLE(tuple0b)
37  decltype(tuple1) tuple1b = tuple1;
38  EIGEN_UNUSED_VARIABLE(tuple1b)
39  decltype(tuple2) tuple2b = tuple2;
40  EIGEN_UNUSED_VARIABLE(tuple2b)
41  decltype(tuple3) tuple3b = tuple3;
42  EIGEN_UNUSED_VARIABLE(tuple3b)
43 
44  // get.
45  VERIFY_IS_EQUAL(tuple_impl::get<0>(tuple3), 7);
46  VERIFY_IS_EQUAL(tuple_impl::get<1>(tuple3), 11.0f);
47  VERIFY_IS_EQUAL(tuple_impl::get<2>(tuple3), 13.0);
48 
49  // tuple_impl::tuple_size.
50  VERIFY_IS_EQUAL(tuple_impl::tuple_size<decltype(tuple0)>::value, size_t(0));
51  VERIFY_IS_EQUAL(tuple_impl::tuple_size<decltype(tuple1)>::value, size_t(1));
52  VERIFY_IS_EQUAL(tuple_impl::tuple_size<decltype(tuple2)>::value, size_t(2));
53  VERIFY_IS_EQUAL(tuple_impl::tuple_size<decltype(tuple3)>::value, size_t(3));
54 
55  // tuple_impl::tuple_cat.
56  auto tuple2cat3 = tuple_impl::tuple_cat(tuple2, tuple3);
57  VERIFY_IS_EQUAL(tuple_impl::tuple_size<decltype(tuple2cat3)>::value, size_t(5));
58  VERIFY_IS_EQUAL(tuple_impl::get<1>(tuple2cat3), 5.0f);
59  VERIFY_IS_EQUAL(tuple_impl::get<3>(tuple2cat3), 11.0f);
60  auto tuple3cat0 = tuple_impl::tuple_cat(tuple3, tuple0);
61  VERIFY_IS_EQUAL(tuple_impl::tuple_size<decltype(tuple3cat0)>::value, size_t(3));
62  auto singlecat = tuple_impl::tuple_cat(tuple3);
63  VERIFY_IS_EQUAL(tuple_impl::tuple_size<decltype(singlecat)>::value, size_t(3));
64  auto emptycat = tuple_impl::tuple_cat();
65  VERIFY_IS_EQUAL(tuple_impl::tuple_size<decltype(emptycat)>::value, size_t(0));
66  auto tuple0cat1cat2cat3 = tuple_impl::tuple_cat(tuple0, tuple1, tuple2, tuple3);
67  VERIFY_IS_EQUAL(tuple_impl::tuple_size<decltype(tuple0cat1cat2cat3)>::value, size_t(6));
68 
69  // make_tuple.
70  // The tuple types should uses values for the second and fourth parameters.
71  double tmp = 20;
72  auto tuple_make = tuple_impl::make_tuple(int(10), tmp, float(20.0f), tuple0);
73  VERIFY((std::is_same<decltype(tuple_make), tuple<int, double, float, tuple<> > >::value));
74  VERIFY_IS_EQUAL(tuple_impl::get<1>(tuple_make), tmp);
75 
76  // forward_as_tuple.
77  // The tuple types should uses references for the second and fourth parameters.
78  auto tuple_forward = tuple_impl::forward_as_tuple(int(10), tmp, float(20.0f), tuple0);
79  VERIFY((std::is_same<decltype(tuple_forward), tuple<int, double&, float, tuple<>&> >::value));
80  VERIFY_IS_EQUAL(tuple_impl::get<1>(tuple_forward), tmp);
81 
82  // tie.
83  auto tuple_tie = tuple_impl::tie(tuple0, tuple1, tuple2, tuple3);
84  VERIFY((std::is_same<decltype(tuple_tie),
85  tuple<decltype(tuple0)&, decltype(tuple1)&, decltype(tuple2)&, decltype(tuple3)&> >::value));
86  VERIFY_IS_EQUAL((tuple_impl::get<1>(tuple_impl::get<2>(tuple_tie))), 5.0f);
87  // Modify value and ensure tuple2 is updated.
88  tuple_impl::get<1>(tuple_impl::get<2>(tuple_tie)) = 10.0f;
89  VERIFY_IS_EQUAL((tuple_impl::get<1>(tuple2)), 10.0f);
90 
91  // Assignment.
92  int x = -1;
93  float y = -1;
94  double z = -1;
95  tuple_impl::tie(x, y, z) = tuple3;
96  VERIFY_IS_EQUAL(x, tuple_impl::get<0>(tuple3));
97  VERIFY_IS_EQUAL(y, tuple_impl::get<1>(tuple3));
98  VERIFY_IS_EQUAL(z, tuple_impl::get<2>(tuple3));
99  tuple<int, float, double> tuple3c(-2, -2.0f, -2.0);
100  tuple3c = std::move(tuple3b);
101  VERIFY_IS_EQUAL(tuple_impl::get<0>(tuple3c), tuple_impl::get<0>(tuple3));
102  VERIFY_IS_EQUAL(tuple_impl::get<1>(tuple3c), tuple_impl::get<1>(tuple3));
103  VERIFY_IS_EQUAL(tuple_impl::get<2>(tuple3c), tuple_impl::get<2>(tuple3));
104 }
#define EIGEN_UNUSED_VARIABLE(var)
Definition: Macros.h:966
Scalar * y
Definition: level1_cplx_impl.h:128
Eigen::Matrix< Scalar, Dynamic, Dynamic, ColMajor > tmp
Definition: level3_impl.h:365
#define VERIFY(a)
Definition: main.h:362
#define VERIFY_IS_EQUAL(a, b)
Definition: main.h:367
TupleImpl< sizeof...(Types), Types... > tuple
Definition: Tuple.h:267
EIGEN_CONSTEXPR EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE ReturnType tie(Args &... args) EIGEN_NOEXCEPT
Definition: Tuple.h:242
EIGEN_CONSTEXPR EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE ReturnType make_tuple(Args &&... args)
Definition: Tuple.h:250
EIGEN_CONSTEXPR EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE tuple_cat_impl< sizeof...(Tuples), typename std::decay< Tuples >::type... >::ReturnType tuple_cat(Tuples &&... tuples)
Definition: Tuple.h:234
EIGEN_CONSTEXPR EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE TupleImpl< sizeof...(Args), Args... > forward_as_tuple(Args &&... args)
Definition: Tuple.h:258
squared absolute value
Definition: GlobalFunctions.h:87
list x
Definition: plotDoE.py:28

References EIGEN_UNUSED_VARIABLE, Eigen::internal::tuple_impl::forward_as_tuple(), Eigen::internal::tuple_impl::make_tuple(), Eigen::internal::tuple_impl::tie(), tmp, Eigen::internal::tuple_impl::tuple_cat(), Eigen::value, VERIFY, VERIFY_IS_EQUAL, plotDoE::x, and Eigen::internal::y.

Referenced by EIGEN_DECLARE_TEST().

◆ EIGEN_DECLARE_TEST()

EIGEN_DECLARE_TEST ( tuple  )
116  {
119 }
#define CALL_SUBTEST(FUNC)
Definition: main.h:382
void eigen_tuple_test()
Definition: tuple_test.cpp:106
void basic_tuple_test()
Definition: tuple_test.cpp:18

References basic_tuple_test(), CALL_SUBTEST, and eigen_tuple_test().

◆ eigen_tuple_test()

void eigen_tuple_test ( )
106  {
107  tuple<Eigen::Matrix3d, Eigen::MatrixXd> tuple;
108  tuple_impl::get<0>(tuple).setRandom();
109  tuple_impl::get<1>(tuple).setRandom(10, 10);
110 
111  auto tuple_tie = tuple_impl::tie(tuple_impl::get<0>(tuple), tuple_impl::get<1>(tuple));
112  tuple_impl::get<1>(tuple_tie).setIdentity();
113  VERIFY(tuple_impl::get<1>(tuple).isIdentity());
114 }

References Eigen::internal::tuple_impl::tie(), and VERIFY.

Referenced by EIGEN_DECLARE_TEST().