diff options
Diffstat (limited to 'test/nesting_ops.cpp')
-rw-r--r-- | test/nesting_ops.cpp | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/test/nesting_ops.cpp b/test/nesting_ops.cpp new file mode 100644 index 000000000..938ebcb7a --- /dev/null +++ b/test/nesting_ops.cpp @@ -0,0 +1,41 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2010 Hauke Heibel <hauke.heibel@gmail.com> +// +// This Source Code Form is subject to the terms of the Mozilla +// Public License v. 2.0. If a copy of the MPL was not distributed +// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. + +#include "main.h" + +template <typename MatrixType> void run_nesting_ops(const MatrixType& _m) +{ + typename MatrixType::Nested m(_m); + typedef typename MatrixType::Scalar Scalar; + +#ifdef NDEBUG + const bool is_debug = false; +#else + const bool is_debug = true; +#endif + + // Make really sure that we are in debug mode! We don't want any type of + // inlining for these tests to pass. + VERIFY(is_debug); + + // The only intention of these tests is to ensure that this code does + // not trigger any asserts or segmentation faults... more to come. + VERIFY_IS_APPROX( (m.transpose() * m).diagonal().sum(), (m.transpose() * m).diagonal().sum() ); + VERIFY_IS_APPROX( (m.transpose() * m).diagonal().array().abs().sum(), (m.transpose() * m).diagonal().array().abs().sum() ); + + VERIFY_IS_APPROX( (m.transpose() * m).array().abs().sum(), (m.transpose() * m).array().abs().sum() ); +} + +void test_nesting_ops() +{ + CALL_SUBTEST_1(run_nesting_ops(MatrixXf::Random(25,25))); + CALL_SUBTEST_2(run_nesting_ops(MatrixXd::Random(25,25))); + CALL_SUBTEST_3(run_nesting_ops(Matrix4f::Random())); + CALL_SUBTEST_4(run_nesting_ops(Matrix4d::Random())); +} |