mirror of
https://gitlab.com/libeigen/eigen.git
synced 2026-04-10 11:34:33 +08:00
Use select ternary op in tensor select evaulator
This commit is contained in:
committed by
Rasmus Munk Larsen
parent
2b954be663
commit
e2bbf496f6
@@ -16,23 +16,41 @@ using Eigen::RowMajor;
|
||||
|
||||
using Scalar = float;
|
||||
|
||||
using TypedLTOp = internal::scalar_cmp_op<Scalar, Scalar, internal::cmp_LT, true>;
|
||||
using TypedLEOp = internal::scalar_cmp_op<Scalar, Scalar, internal::cmp_LE, true>;
|
||||
using TypedGTOp = internal::scalar_cmp_op<Scalar, Scalar, internal::cmp_GT, true>;
|
||||
using TypedGEOp = internal::scalar_cmp_op<Scalar, Scalar, internal::cmp_GE, true>;
|
||||
using TypedEQOp = internal::scalar_cmp_op<Scalar, Scalar, internal::cmp_EQ, true>;
|
||||
using TypedNEOp = internal::scalar_cmp_op<Scalar, Scalar, internal::cmp_NEQ, true>;
|
||||
|
||||
static void test_orderings()
|
||||
{
|
||||
Tensor<Scalar, 3> mat1(2,3,7);
|
||||
Tensor<Scalar, 3> mat2(2,3,7);
|
||||
|
||||
mat1.setRandom();
|
||||
mat2.setRandom();
|
||||
|
||||
Tensor<bool, 3> lt(2,3,7);
|
||||
Tensor<bool, 3> le(2,3,7);
|
||||
Tensor<bool, 3> gt(2,3,7);
|
||||
Tensor<bool, 3> ge(2,3,7);
|
||||
|
||||
mat1.setRandom();
|
||||
mat2.setRandom();
|
||||
Tensor<Scalar, 3> typed_lt(2, 3, 7);
|
||||
Tensor<Scalar, 3> typed_le(2, 3, 7);
|
||||
Tensor<Scalar, 3> typed_gt(2, 3, 7);
|
||||
Tensor<Scalar, 3> typed_ge(2, 3, 7);
|
||||
|
||||
lt = mat1 < mat2;
|
||||
le = mat1 <= mat2;
|
||||
gt = mat1 > mat2;
|
||||
ge = mat1 >= mat2;
|
||||
|
||||
typed_lt = mat1.binaryExpr(mat2, TypedLTOp());
|
||||
typed_le = mat1.binaryExpr(mat2, TypedLEOp());
|
||||
typed_gt = mat1.binaryExpr(mat2, TypedGTOp());
|
||||
typed_ge = mat1.binaryExpr(mat2, TypedGEOp());
|
||||
|
||||
for (int i = 0; i < 2; ++i) {
|
||||
for (int j = 0; j < 3; ++j) {
|
||||
for (int k = 0; k < 7; ++k) {
|
||||
@@ -40,6 +58,11 @@ static void test_orderings()
|
||||
VERIFY_IS_EQUAL(le(i,j,k), mat1(i,j,k) <= mat2(i,j,k));
|
||||
VERIFY_IS_EQUAL(gt(i,j,k), mat1(i,j,k) > mat2(i,j,k));
|
||||
VERIFY_IS_EQUAL(ge(i,j,k), mat1(i,j,k) >= mat2(i,j,k));
|
||||
|
||||
VERIFY_IS_EQUAL(lt(i, j, k), (bool)typed_lt(i, j, k));
|
||||
VERIFY_IS_EQUAL(le(i, j, k), (bool)typed_le(i, j, k));
|
||||
VERIFY_IS_EQUAL(gt(i, j, k), (bool)typed_gt(i, j, k));
|
||||
VERIFY_IS_EQUAL(ge(i, j, k), (bool)typed_ge(i, j, k));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -65,14 +88,24 @@ static void test_equality()
|
||||
|
||||
Tensor<bool, 3> eq(2,3,7);
|
||||
Tensor<bool, 3> ne(2,3,7);
|
||||
|
||||
Tensor<Scalar, 3> typed_eq(2, 3, 7);
|
||||
Tensor<Scalar, 3> typed_ne(2, 3, 7);
|
||||
|
||||
eq = (mat1 == mat2);
|
||||
ne = (mat1 != mat2);
|
||||
|
||||
typed_eq = mat1.binaryExpr(mat2, TypedEQOp());
|
||||
typed_ne = mat1.binaryExpr(mat2, TypedNEOp());
|
||||
|
||||
for (int i = 0; i < 2; ++i) {
|
||||
for (int j = 0; j < 3; ++j) {
|
||||
for (int k = 0; k < 7; ++k) {
|
||||
VERIFY_IS_EQUAL(eq(i,j,k), mat1(i,j,k) == mat2(i,j,k));
|
||||
VERIFY_IS_EQUAL(ne(i,j,k), mat1(i,j,k) != mat2(i,j,k));
|
||||
|
||||
VERIFY_IS_EQUAL(eq(i, j, k), (bool)typed_eq(i,j,k));
|
||||
VERIFY_IS_EQUAL(ne(i, j, k), (bool)typed_ne(i,j,k));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user