cxx11_tensor_of_strings.cpp
Go to the documentation of this file.
1 // This file is part of Eigen, a lightweight C++ template library
2 // for linear algebra.
3 //
4 // Copyright (C) 2014 Benoit Steiner <benoit.steiner.goog@gmail.com>
5 //
6 // This Source Code Form is subject to the terms of the Mozilla
7 // Public License v. 2.0. If a copy of the MPL was not distributed
8 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
9 
10 #include "main.h"
11 
12 #include <Eigen/CXX11/Tensor>
13 
14 using Eigen::Tensor;
15 using Eigen::TensorMap;
16 
17 static void test_assign()
18 {
19  std::string data1[6];
21  std::string data2[6];
22  const TensorMap<Tensor<const std::string, 2>> mat2(data2, 2, 3);
23 
24  for (int i = 0; i < 6; ++i) {
25  std::ostringstream s1;
26  s1 << "abc" << i*3;
27  data1[i] = s1.str();
28  std::ostringstream s2;
29  s2 << "def" << i*5;
30  data2[i] = s2.str();
31  }
32 
34  rslt1 = mat1;
36  rslt2 = mat2;
37 
39  Tensor<std::string, 2> rslt4 = mat2;
40 
41  Tensor<std::string, 2> rslt5(mat1);
42  Tensor<std::string, 2> rslt6(mat2);
43 
44  for (int i = 0; i < 2; ++i) {
45  for (int j = 0; j < 3; ++j) {
46  VERIFY_IS_EQUAL(rslt1(i,j), data1[i+2*j]);
47  VERIFY_IS_EQUAL(rslt2(i,j), data2[i+2*j]);
48  VERIFY_IS_EQUAL(rslt3(i,j), data1[i+2*j]);
49  VERIFY_IS_EQUAL(rslt4(i,j), data2[i+2*j]);
50  VERIFY_IS_EQUAL(rslt5(i,j), data1[i+2*j]);
51  VERIFY_IS_EQUAL(rslt6(i,j), data2[i+2*j]);
52  }
53  }
54 }
55 
56 
57 static void test_concat()
58 {
59  Tensor<std::string, 2> t1(2, 3);
60  Tensor<std::string, 2> t2(2, 3);
61 
62  for (int i = 0; i < 2; ++i) {
63  for (int j = 0; j < 3; ++j) {
64  std::ostringstream s1;
65  s1 << "abc" << i + j*2;
66  t1(i, j) = s1.str();
67  std::ostringstream s2;
68  s2 << "def" << i*5 + j*32;
69  t2(i, j) = s2.str();
70  }
71  }
72 
74  VERIFY_IS_EQUAL(result.dimension(0), 2);
75  VERIFY_IS_EQUAL(result.dimension(1), 6);
76 
77  for (int i = 0; i < 2; ++i) {
78  for (int j = 0; j < 3; ++j) {
79  VERIFY_IS_EQUAL(result(i, j), t1(i, j));
80  VERIFY_IS_EQUAL(result(i, j+3), t2(i, j));
81  }
82  }
83 }
84 
85 
86 static void test_slices()
87 {
89  for (int i = 0; i < 2; ++i) {
90  for (int j = 0; j < 3; ++j) {
91  std::ostringstream s1;
92  s1 << "abc" << i + j*2;
93  data(i, j) = s1.str();
94  }
95  }
96 
97  const Eigen::DSizes<ptrdiff_t, 2> half_size(2, 3);
98  const Eigen::DSizes<ptrdiff_t, 2> first_half(0, 0);
99  const Eigen::DSizes<ptrdiff_t, 2> second_half(0, 3);
100 
101  Tensor<std::string, 2> t1 = data.slice(first_half, half_size);
102  Tensor<std::string, 2> t2 = data.slice(second_half, half_size);
103 
104  for (int i = 0; i < 2; ++i) {
105  for (int j = 0; j < 3; ++j) {
106  VERIFY_IS_EQUAL(data(i, j), t1(i, j));
107  VERIFY_IS_EQUAL(data(i, j+3), t2(i, j));
108  }
109  }
110 }
111 
112 
113 static void test_additions()
114 {
115  Tensor<std::string, 1> data1(3);
116  Tensor<std::string, 1> data2(3);
117  for (int i = 0; i < 3; ++i) {
118  data1(i) = "abc";
119  std::ostringstream s1;
120  s1 << i;
121  data2(i) = s1.str();
122  }
123 
124  Tensor<std::string, 1> sum = data1 + data2;
125  for (int i = 0; i < 3; ++i) {
126  std::ostringstream concat;
127  concat << "abc" << i;
128  std::string expected = concat.str();
129  VERIFY_IS_EQUAL(sum(i), expected);
130  }
131 }
132 
133 
134 static void test_initialization()
135 {
137  a.setConstant(std::string("foo"));
138  for (int i = 0; i < 2*3; ++i) {
139  VERIFY_IS_EQUAL(a(i), std::string("foo"));
140  }
141 }
142 
143 
145 {
146  // Beware: none of this is likely to ever work on a GPU.
152 }
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const TensorSlicingOp< const StartIndices, const Sizes, const Tensor< Scalar_, NumIndices_, Options_, IndexType_ > > slice(const StartIndices &startIndices, const Sizes &sizes) const
Definition: TensorBase.h:920
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Index dimension(std::size_t n) const
Definition: Tensor.h:101
Matrix expected
Definition: testMatrix.cpp:974
static void test_concat()
MatrixXd mat1(size, size)
static void test_additions()
Array33i a
static void test_slices()
void test_cxx11_tensor_of_strings()
#define VERIFY_IS_EQUAL(a, b)
Definition: main.h:331
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Tensor< Scalar_, NumIndices_, Options_, IndexType_ > & setConstant(const Scalar &val)
Definition: TensorBase.h:846
Values result
A tensor expression mapping an existing array of data.
int data[]
const mpreal sum(const mpreal tab[], const unsigned long int n, int &status, mp_rnd_t mode=mpreal::get_default_rnd())
Definition: mpreal.h:2381
constexpr descr< 0 > concat()
Definition: descr.h:83
#define CALL_SUBTEST(FUNC)
Definition: main.h:342
static void test_initialization()
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const TensorConcatenationOp< const Axis, const Tensor< Scalar_, NumIndices_, Options_, IndexType_ >, const OtherDerived > concatenate(const OtherDerived &other, const Axis &axis) const
Definition: TensorBase.h:898
static void test_assign()
std::ptrdiff_t j
The tensor class.
Definition: Tensor.h:63


gtsam
Author(s):
autogenerated on Sat May 8 2021 02:41:56