cxx11_tensor_casts.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::array;
16 
17 static void test_simple_cast()
18 {
19  Tensor<float, 2> ftensor(20,30);
20  ftensor = ftensor.random() * 100.f;
21  Tensor<char, 2> chartensor(20,30);
22  chartensor.setRandom();
23  Tensor<std::complex<float>, 2> cplextensor(20,30);
24  cplextensor.setRandom();
25 
26  chartensor = ftensor.cast<char>();
27  cplextensor = ftensor.cast<std::complex<float> >();
28 
29  for (int i = 0; i < 20; ++i) {
30  for (int j = 0; j < 30; ++j) {
31  VERIFY_IS_EQUAL(chartensor(i,j), static_cast<char>(ftensor(i,j)));
32  VERIFY_IS_EQUAL(cplextensor(i,j), static_cast<std::complex<float> >(ftensor(i,j)));
33  }
34  }
35 }
36 
37 
38 static void test_vectorized_cast()
39 {
40  Tensor<int, 2> itensor(20,30);
41  itensor = itensor.random() / 1000;
42  Tensor<float, 2> ftensor(20,30);
43  ftensor.setRandom();
44  Tensor<double, 2> dtensor(20,30);
45  dtensor.setRandom();
46 
47  ftensor = itensor.cast<float>();
48  dtensor = itensor.cast<double>();
49 
50  for (int i = 0; i < 20; ++i) {
51  for (int j = 0; j < 30; ++j) {
52  VERIFY_IS_EQUAL(itensor(i,j), static_cast<int>(ftensor(i,j)));
53  VERIFY_IS_EQUAL(dtensor(i,j), static_cast<double>(ftensor(i,j)));
54  }
55  }
56 }
57 
58 
60 {
61  Tensor<float, 2> ftensor(20,30);
62  ftensor = ftensor.random() * 1000.0f;
63  Tensor<double, 2> dtensor(20,30);
64  dtensor = dtensor.random() * 1000.0;
65 
66  Tensor<int, 2> i1tensor = ftensor.cast<int>();
67  Tensor<int, 2> i2tensor = dtensor.cast<int>();
68 
69  for (int i = 0; i < 20; ++i) {
70  for (int j = 0; j < 30; ++j) {
71  VERIFY_IS_EQUAL(i1tensor(i,j), static_cast<int>(ftensor(i,j)));
72  VERIFY_IS_EQUAL(i2tensor(i,j), static_cast<int>(dtensor(i,j)));
73  }
74  }
75 }
76 
77 
79 {
80  Tensor<double, 2> dtensor(20, 30);
81  dtensor.setRandom();
82  Tensor<float, 2> ftensor(20, 30);
83  ftensor = dtensor.cast<float>();
84 
85  for (int i = 0; i < 20; ++i) {
86  for (int j = 0; j < 30; ++j) {
87  VERIFY_IS_APPROX(dtensor(i,j), static_cast<double>(ftensor(i,j)));
88  }
89  }
90 }
91 
92 
94 {
95  Tensor<float, 2> ftensor(20, 30);
96  ftensor.setRandom();
97  Tensor<double, 2> dtensor(20, 30);
98  dtensor = ftensor.cast<double>();
99 
100  for (int i = 0; i < 20; ++i) {
101  for (int j = 0; j < 30; ++j) {
102  VERIFY_IS_APPROX(dtensor(i,j), static_cast<double>(ftensor(i,j)));
103  }
104  }
105 }
106 
107 
109 {
110  CALL_SUBTEST(test_simple_cast());
111  CALL_SUBTEST(test_vectorized_cast());
112  CALL_SUBTEST(test_float_to_int_cast());
113  CALL_SUBTEST(test_big_to_small_type_cast());
114  CALL_SUBTEST(test_small_to_big_type_cast());
115 }
void test_cxx11_tensor_casts()
static void test_simple_cast()
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Tensor< Scalar_, NumIndices_, Options_, IndexType_ > & setRandom()
Definition: TensorBase.h:848
static void test_vectorized_cast()
static void test_small_to_big_type_cast()
static void test_big_to_small_type_cast()
static void test_float_to_int_cast()
The tensor class.
Definition: Tensor.h:63


hebiros
Author(s): Xavier Artache , Matthew Tesch
autogenerated on Thu Sep 3 2020 04:08:08