| 102 | #define VERIFY_IS_APPROX_EVALUATOR2(DEST,EXPR,REF) VERIFY_IS_APPROX(copy_using_evaluator(DEST,(EXPR)), (REF).eval()); |
| 103 | |
| 104 | void test_evaluators() |
| 105 | { |
| 106 | // Testing Matrix evaluator and Transpose |
| 107 | Vector2d v = Vector2d::Random(); |
| 108 | const Vector2d v_const(v); |
| 109 | Vector2d v2; |
| 110 | RowVector2d w; |
| 111 | |
| 112 | VERIFY_IS_APPROX_EVALUATOR(v2, v); |
| 113 | VERIFY_IS_APPROX_EVALUATOR(v2, v_const); |
| 114 | |
| 115 | // Testing Transpose |
| 116 | VERIFY_IS_APPROX_EVALUATOR(w, v.transpose()); // Transpose as rvalue |
| 117 | VERIFY_IS_APPROX_EVALUATOR(w, v_const.transpose()); |
| 118 | |
| 119 | copy_using_evaluator(w.transpose(), v); // Transpose as lvalue |
| 120 | VERIFY_IS_APPROX(w,v.transpose().eval()); |
| 121 | |
| 122 | copy_using_evaluator(w.transpose(), v_const); |
| 123 | VERIFY_IS_APPROX(w,v_const.transpose().eval()); |
| 124 | |
| 125 | // Testing Array evaluator |
| 126 | { |
| 127 | ArrayXXf a(2,3); |
| 128 | ArrayXXf b(3,2); |
| 129 | a << 1,2,3, 4,5,6; |
| 130 | const ArrayXXf a_const(a); |
| 131 | |
| 132 | VERIFY_IS_APPROX_EVALUATOR(b, a.transpose()); |
| 133 | |
| 134 | VERIFY_IS_APPROX_EVALUATOR(b, a_const.transpose()); |
| 135 | |
| 136 | // Testing CwiseNullaryOp evaluator |
| 137 | copy_using_evaluator(w, RowVector2d::Random()); |
| 138 | VERIFY((w.array() >= -1).all() && (w.array() <= 1).all()); // not easy to test ... |
| 139 | |
| 140 | VERIFY_IS_APPROX_EVALUATOR(w, RowVector2d::Zero()); |
| 141 | |
| 142 | VERIFY_IS_APPROX_EVALUATOR(w, RowVector2d::Constant(3)); |
| 143 | |
| 144 | // mix CwiseNullaryOp and transpose |
| 145 | VERIFY_IS_APPROX_EVALUATOR(w, Vector2d::Zero().transpose()); |
| 146 | } |
| 147 | |
| 148 | { |
| 149 | // test product expressions |
| 150 | int s = internal::random<int>(1,100); |
| 151 | MatrixXf a(s,s), b(s,s), c(s,s), d(s,s); |
| 152 | a.setRandom(); |
| 153 | b.setRandom(); |
| 154 | c.setRandom(); |
| 155 | d.setRandom(); |
| 156 | VERIFY_IS_APPROX_EVALUATOR(d, (a + b)); |
| 157 | VERIFY_IS_APPROX_EVALUATOR(d, (a + b).transpose()); |
| 158 | VERIFY_IS_APPROX_EVALUATOR2(d, prod(a,b), a*b); |
| 159 | VERIFY_IS_APPROX_EVALUATOR2(d.noalias(), prod(a,b), a*b); |
| 160 | VERIFY_IS_APPROX_EVALUATOR2(d, prod(a,b) + c, a*b + c); |
| 161 | VERIFY_IS_APPROX_EVALUATOR2(d, s * prod(a,b), s * a*b); |
nothing calls this directly
no test coverage detected