GCC Code Coverage Report
Directory: ./ Exec Total Coverage
File: unittest/eigen-tensor.cpp Lines: 27 27 100.0 %
Date: 2024-01-23 21:41:47 Branches: 116 220 52.7 %

Line Branch Exec Source
1
//
2
// Copyright (c) 2019 INRIA
3
//
4
5
#include "pinocchio/math/tensor.hpp"
6
#include "pinocchio/multibody/model.hpp"
7
8
#include <boost/test/unit_test.hpp>
9
#include <boost/utility/binary.hpp>
10
11
#include <iostream>
12
13
BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE)
14
15
















4
BOOST_AUTO_TEST_CASE(test_emulate_tensors)
16
{
17
  typedef double Scalar;
18
2
  const int rank = 3;
19
  typedef pinocchio::Tensor<Scalar,rank> Tensor;
20
21
2
  const Eigen::DenseIndex x_dim = 6, y_dim = 20, z_dim = 20;
22

4
  Tensor tensor1(x_dim,y_dim,z_dim), tensor1_bis(x_dim,y_dim,z_dim);
23
24



2
  BOOST_CHECK(tensor1.size() == x_dim * y_dim * z_dim);
25



2
  BOOST_CHECK(tensor1.dimension(0) == x_dim);
26



2
  BOOST_CHECK(tensor1.dimension(1) == y_dim);
27



2
  BOOST_CHECK(tensor1.dimension(2) == z_dim);
28
29
2
  Scalar * data = tensor1.data();
30

4802
  for(Eigen::DenseIndex k = 0; k < tensor1.size(); ++k)
31
4800
    data[k] = (Scalar)k;
32
33
42
  for(Eigen::DenseIndex k = 0; k < z_dim; ++k)
34
  {
35
840
    for(Eigen::DenseIndex j = 0; j < y_dim; ++j)
36
    {
37
5600
      for(Eigen::DenseIndex i = 0; i < x_dim; ++i)
38
      {
39



4800
        BOOST_CHECK(tensor1(i,j,k) == (Scalar)(i + j*x_dim + k*(x_dim*y_dim)));
40
      }
41
    }
42
  }
43
44
2
  const Eigen::DenseIndex new_x_dim = 2*x_dim, new_y_dim = 2*y_dim, new_z_dim = 2*z_dim;
45
2
  const Eigen::array<Tensor::Index,rank> dims = { x_dim,y_dim,z_dim };
46
2
  tensor1.resize(dims);
47
48




2
  BOOST_CHECK(tensor1.size() == tensor1_bis.size());
49
8
  for(std::size_t i = 0; i < rank; ++i)
50



6
    BOOST_CHECK(tensor1.dimension(i) == dims[i]);
51
52
2
  const Eigen::array<Tensor::Index,rank> new_dims = { new_x_dim,new_y_dim,new_z_dim };
53
2
  tensor1.resize(new_dims);
54
55




2
  BOOST_CHECK(tensor1.size() == 8*tensor1_bis.size());
56
8
  for(std::size_t i = 0; i < rank; ++i)
57



6
    BOOST_CHECK(tensor1.dimension(i) == new_dims[i]);
58
2
}
59
60
BOOST_AUTO_TEST_SUITE_END()