aboutsummaryrefslogtreecommitdiffhomepage
path: root/test/evaluators.cpp
diff options
context:
space:
mode:
authorGravatar Jitse Niesen <jitse@maths.leeds.ac.uk>2011-03-31 13:50:52 +0100
committerGravatar Jitse Niesen <jitse@maths.leeds.ac.uk>2011-03-31 13:50:52 +0100
commitd90a8ee8bd0a20b76c5a04e95c79b59ce42963ec (patch)
treee662b6b7a6ed5061df8a54577df517c8b05c8f35 /test/evaluators.cpp
parentb471161f28e13b41fdc847f441de04ab3aadbfe8 (diff)
Evaluators: add Block evaluator as dumb wrapper, add slice vectorization.
Diffstat (limited to 'test/evaluators.cpp')
-rw-r--r--test/evaluators.cpp19
1 files changed, 18 insertions, 1 deletions
diff --git a/test/evaluators.cpp b/test/evaluators.cpp
index b804171a7..e3fe53215 100644
--- a/test/evaluators.cpp
+++ b/test/evaluators.cpp
@@ -98,6 +98,7 @@ void test_evaluators()
VERIFY_IS_APPROX_EVALUATOR(m3.transpose(), Matrix3f::Identity().transpose()); // transpose
VERIFY_IS_APPROX_EVALUATOR(m3, 2 * Matrix3f::Identity()); // unary
VERIFY_IS_APPROX_EVALUATOR(m3, Matrix3f::Identity() + m3); // binary
+ VERIFY_IS_APPROX_EVALUATOR(m3.block(0,0,2,2), Matrix3f::Identity().block(1,1,2,2)); // block
// test linear traversal
VERIFY_IS_APPROX_EVALUATOR(m3, Matrix3f::Zero()); // matrix, nullary
@@ -118,11 +119,27 @@ void test_evaluators()
// test linear vectorization
MatrixXf mX(6,6), mXsrc = MatrixXf::Random(6,6);
- ArrayXXf aX(6,6), aXsrc = MatrixXf::Random(6,6);
+ ArrayXXf aX(6,6), aXsrc = ArrayXXf::Random(6,6);
VERIFY_IS_APPROX_EVALUATOR(mX, mXsrc); // matrix
VERIFY_IS_APPROX_EVALUATOR(aX, aXsrc); // array
VERIFY_IS_APPROX_EVALUATOR(mX.transpose(), mXsrc.transpose()); // transpose
VERIFY_IS_APPROX_EVALUATOR(mX, MatrixXf::Zero(6,6)); // nullary
VERIFY_IS_APPROX_EVALUATOR(mX, 2 * mXsrc); // unary
VERIFY_IS_APPROX_EVALUATOR(mX, mXsrc + mXsrc); // binary
+
+ // test blocks and slice vectorization
+ VERIFY_IS_APPROX_EVALUATOR(m4, (mXsrc.block<4,4>(1,0)));
+ VERIFY_IS_APPROX_EVALUATOR(aX, ArrayXXf::Constant(10, 10, 3.0).block(2, 3, 6, 6));
+
+ Matrix4f m4ref = m4;
+ copy_using_evaluator(m4.block(1, 1, 2, 3), m3.bottomRows(2));
+ m4ref.block(1, 1, 2, 3) = m3.bottomRows(2);
+ VERIFY_IS_APPROX(m4, m4ref);
+
+ mX.setIdentity(20,20);
+ MatrixXf mXref = MatrixXf::Identity(20,20);
+ mXsrc = MatrixXf::Random(9,12);
+ copy_using_evaluator(mX.block(4, 4, 9, 12), mXsrc);
+ mXref.block(4, 4, 9, 12) = mXsrc;
+ VERIFY_IS_APPROX(mX, mXref);
}