mirror of
https://gitlab.com/libeigen/eigen.git
synced 2026-04-10 11:34:33 +08:00
Pulled latest update from the eigen main codebase
This commit is contained in:
@@ -50,7 +50,7 @@ if(MPFR_FOUND)
|
||||
include_directories(${MPFR_INCLUDES} ./mpreal)
|
||||
ei_add_property(EIGEN_TESTED_BACKENDS "MPFR C++, ")
|
||||
set(EIGEN_MPFR_TEST_LIBRARIES ${MPFR_LIBRARIES} ${GMP_LIBRARIES})
|
||||
# ei_add_test(mpreal_support "" "${EIGEN_MPFR_TEST_LIBRARIES}" )
|
||||
ei_add_test(mpreal_support "" "${EIGEN_MPFR_TEST_LIBRARIES}" )
|
||||
else()
|
||||
ei_add_property(EIGEN_MISSING_BACKENDS "MPFR C++, ")
|
||||
endif()
|
||||
|
||||
@@ -54,7 +54,7 @@ static void test_equality()
|
||||
for (int i = 0; i < 2; ++i) {
|
||||
for (int j = 0; j < 3; ++j) {
|
||||
for (int k = 0; k < 7; ++k) {
|
||||
if (random() < 0.5) {
|
||||
if (internal::random<bool>()) {
|
||||
mat2(i,j,k) = mat1(i,j,k);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,8 +13,6 @@
|
||||
using Eigen::Tensor;
|
||||
|
||||
|
||||
|
||||
|
||||
static void test_simple_assign()
|
||||
{
|
||||
Tensor<int, 3> random(2,3,7);
|
||||
@@ -33,7 +31,32 @@ static void test_simple_assign()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static void test_assign_of_const_tensor()
|
||||
{
|
||||
Tensor<int, 3> random(2,3,7);
|
||||
random.setRandom();
|
||||
|
||||
TensorMap<Tensor<const int, 3> > constant1(random.data(), 2, 3, 7);
|
||||
TensorMap<const Tensor<int, 3> > constant2(random.data(), 2, 3, 7);
|
||||
const TensorMap<Tensor<int, 3> > constant3(random.data(), 2, 3, 7);
|
||||
|
||||
Tensor<int, 2> result1 = constant1.chip(0, 2);
|
||||
Tensor<int, 2> result2 = constant2.chip(0, 2);
|
||||
Tensor<int, 2> result3 = constant3.chip(0, 2);
|
||||
|
||||
for (int i = 0; i < 2; ++i) {
|
||||
for (int j = 0; j < 3; ++j) {
|
||||
VERIFY_IS_EQUAL((result1(i,j)), random(i,j,0));
|
||||
VERIFY_IS_EQUAL((result2(i,j)), random(i,j,0));
|
||||
VERIFY_IS_EQUAL((result3(i,j)), random(i,j,0));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void test_cxx11_tensor_const()
|
||||
{
|
||||
CALL_SUBTEST(test_simple_assign());
|
||||
CALL_SUBTEST(test_assign_of_const_tensor());
|
||||
}
|
||||
|
||||
@@ -260,7 +260,7 @@ static void test_type_casting()
|
||||
mat1.setRandom();
|
||||
mat2.setRandom();
|
||||
|
||||
mat3 = mat1.template cast<double>();
|
||||
mat3 = mat1.cast<double>();
|
||||
for (int i = 0; i < 2; ++i) {
|
||||
for (int j = 0; j < 3; ++j) {
|
||||
for (int k = 0; k < 7; ++k) {
|
||||
@@ -269,7 +269,7 @@ static void test_type_casting()
|
||||
}
|
||||
}
|
||||
|
||||
mat3 = mat2.template cast<double>();
|
||||
mat3 = mat2.cast<double>();
|
||||
for (int i = 0; i < 2; ++i) {
|
||||
for (int j = 0; j < 3; ++j) {
|
||||
for (int k = 0; k < 7; ++k) {
|
||||
|
||||
@@ -196,6 +196,45 @@ static void test_coeff_ref()
|
||||
}
|
||||
|
||||
|
||||
static void test_nested_ops_with_ref()
|
||||
{
|
||||
Tensor<float, 4> t(2, 3, 5, 7);
|
||||
t.setRandom();
|
||||
TensorMap<Tensor<const float, 4> > m(t.data(), 2, 3, 5, 7);
|
||||
array<std::pair<ptrdiff_t, ptrdiff_t>, 4> paddings;
|
||||
paddings[0] = std::make_pair(0, 0);
|
||||
paddings[1] = std::make_pair(2, 1);
|
||||
paddings[2] = std::make_pair(3, 4);
|
||||
paddings[3] = std::make_pair(0, 0);
|
||||
DSizes<Eigen::DenseIndex, 4> shuffle_dims(0, 1, 2, 3);
|
||||
TensorRef<Tensor<const float, 4> > ref(m.pad(paddings));
|
||||
array<std::pair<ptrdiff_t, ptrdiff_t>, 4> trivial;
|
||||
trivial[0] = std::make_pair(0, 0);
|
||||
trivial[1] = std::make_pair(0, 0);
|
||||
trivial[2] = std::make_pair(0, 0);
|
||||
trivial[3] = std::make_pair(0, 0);
|
||||
Tensor<float, 4> padded = ref.shuffle(shuffle_dims).pad(trivial);
|
||||
VERIFY_IS_EQUAL(padded.dimension(0), 2+0);
|
||||
VERIFY_IS_EQUAL(padded.dimension(1), 3+3);
|
||||
VERIFY_IS_EQUAL(padded.dimension(2), 5+7);
|
||||
VERIFY_IS_EQUAL(padded.dimension(3), 7+0);
|
||||
|
||||
for (int i = 0; i < 2; ++i) {
|
||||
for (int j = 0; j < 6; ++j) {
|
||||
for (int k = 0; k < 12; ++k) {
|
||||
for (int l = 0; l < 7; ++l) {
|
||||
if (j >= 2 && j < 5 && k >= 3 && k < 8) {
|
||||
VERIFY_IS_EQUAL(padded(i,j,k,l), t(i,j-2,k-3,l));
|
||||
} else {
|
||||
VERIFY_IS_EQUAL(padded(i,j,k,l), 0.0f);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void test_cxx11_tensor_ref()
|
||||
{
|
||||
CALL_SUBTEST(test_simple_lvalue_ref());
|
||||
@@ -205,4 +244,5 @@ void test_cxx11_tensor_ref()
|
||||
CALL_SUBTEST(test_ref_of_ref());
|
||||
CALL_SUBTEST(test_ref_in_expr());
|
||||
CALL_SUBTEST(test_coeff_ref());
|
||||
CALL_SUBTEST(test_nested_ops_with_ref());
|
||||
}
|
||||
|
||||
@@ -57,7 +57,8 @@
|
||||
#include <limits>
|
||||
|
||||
// Options
|
||||
#define MPREAL_HAVE_INT64_SUPPORT // Enable int64_t support if possible. Available only for MSVC 2010 & GCC.
|
||||
// FIXME HAVE_INT64_SUPPORT leads to clashes with long int and int64_t on some systems.
|
||||
//#define MPREAL_HAVE_INT64_SUPPORT // Enable int64_t support if possible. Available only for MSVC 2010 & GCC.
|
||||
#define MPREAL_HAVE_MSVC_DEBUGVIEW // Enable Debugger Visualizer for "Debug" builds in MSVC.
|
||||
#define MPREAL_HAVE_DYNAMIC_STD_NUMERIC_LIMITS // Enable extended std::numeric_limits<mpfr::mpreal> specialization.
|
||||
// Meaning that "digits", "round_style" and similar members are defined as functions, not constants.
|
||||
|
||||
Reference in New Issue
Block a user