typed_logicals_test_impl< ArrayType > Struct Template Reference

Public Types

using Scalar = typename ArrayType::Scalar
 

Static Public Member Functions

static bool scalar_to_bool (const Scalar &x)
 
static Scalar bool_to_scalar (bool x)
 
static Scalar eval_bool_and (const Scalar &x, const Scalar &y)
 
static Scalar eval_bool_or (const Scalar &x, const Scalar &y)
 
static Scalar eval_bool_xor (const Scalar &x, const Scalar &y)
 
static Scalar eval_bool_not (const Scalar &x)
 
static void run (const ArrayType &m)
 

Member Typedef Documentation

◆ Scalar

template<typename ArrayType >
using typed_logicals_test_impl< ArrayType >::Scalar = typename ArrayType::Scalar

Member Function Documentation

◆ bool_to_scalar()

template<typename ArrayType >
static Scalar typed_logicals_test_impl< ArrayType >::bool_to_scalar ( bool  x)
inlinestatic

◆ eval_bool_and()

template<typename ArrayType >
static Scalar typed_logicals_test_impl< ArrayType >::eval_bool_and ( const Scalar x,
const Scalar y 
)
inlinestatic
1165  {
1167  }
Scalar * y
Definition: level1_cplx_impl.h:128
static Scalar bool_to_scalar(bool x)
Definition: array_cwise.cpp:1163
static bool scalar_to_bool(const Scalar &x)
Definition: array_cwise.cpp:1162

References typed_logicals_test_impl< ArrayType >::bool_to_scalar(), typed_logicals_test_impl< ArrayType >::scalar_to_bool(), plotDoE::x, and y.

Referenced by typed_logicals_test_impl< ArrayType >::run().

◆ eval_bool_not()

template<typename ArrayType >
static Scalar typed_logicals_test_impl< ArrayType >::eval_bool_not ( const Scalar x)
inlinestatic

◆ eval_bool_or()

template<typename ArrayType >
static Scalar typed_logicals_test_impl< ArrayType >::eval_bool_or ( const Scalar x,
const Scalar y 
)
inlinestatic

◆ eval_bool_xor()

template<typename ArrayType >
static Scalar typed_logicals_test_impl< ArrayType >::eval_bool_xor ( const Scalar x,
const Scalar y 
)
inlinestatic

◆ run()

template<typename ArrayType >
static void typed_logicals_test_impl< ArrayType >::run ( const ArrayType &  m)
inlinestatic
1176  {
1177  Index rows = m.rows();
1178  Index cols = m.cols();
1179 
1180  ArrayType m1(rows, cols), m2(rows, cols), m3(rows, cols), m4(rows, cols);
1181 
1182  m1.setRandom();
1183  m2.setRandom();
1184  m1 *= ArrayX<bool>::Random(rows, cols).cast<Scalar>();
1185  m2 *= ArrayX<bool>::Random(rows, cols).cast<Scalar>();
1186 
1187  // test boolean and
1188  m3 = m1 && m2;
1189  m4 = m1.binaryExpr(m2, [](const Scalar& x, const Scalar& y) { return eval_bool_and(x, y); });
1190  VERIFY_IS_CWISE_EQUAL(m3, m4);
1191  for (const Scalar& val : m3) VERIFY(val == Scalar(0) || val == Scalar(1));
1192 
1193  // test boolean or
1194  m3 = m1 || m2;
1195  m4 = m1.binaryExpr(m2, [](const Scalar& x, const Scalar& y) { return eval_bool_or(x, y); });
1196  VERIFY_IS_CWISE_EQUAL(m3, m4);
1197  for (const Scalar& val : m3) VERIFY(val == Scalar(0) || val == Scalar(1));
1198 
1199  // test boolean xor
1200  m3 = m1.binaryExpr(m2, internal::scalar_boolean_xor_op<Scalar>());
1201  m4 = m1.binaryExpr(m2, [](const Scalar& x, const Scalar& y) { return eval_bool_xor(x, y); });
1202  VERIFY_IS_CWISE_EQUAL(m3, m4);
1203  for (const Scalar& val : m3) VERIFY(val == Scalar(0) || val == Scalar(1));
1204 
1205  // test boolean not
1206  m3 = !m1;
1207  m4 = m1.unaryExpr([](const Scalar& x) { return eval_bool_not(x); });
1208  VERIFY_IS_CWISE_EQUAL(m3, m4);
1209  for (const Scalar& val : m3) VERIFY(val == Scalar(0) || val == Scalar(1));
1210 
1211  // test something more complicated
1212  m3 = m1 && m2;
1213  m4 = !(!m1 || !m2);
1214  VERIFY_IS_CWISE_EQUAL(m3, m4);
1215 
1216  m3 = m1.binaryExpr(m2, internal::scalar_boolean_xor_op<Scalar>());
1217  m4 = (!m1).binaryExpr((!m2), internal::scalar_boolean_xor_op<Scalar>());
1218  VERIFY_IS_CWISE_EQUAL(m3, m4);
1219 
1220  const size_t bytes = size_t(rows) * size_t(cols) * sizeof(Scalar);
1221 
1222  std::vector<uint8_t> m1_buffer(bytes), m2_buffer(bytes), m3_buffer(bytes), m4_buffer(bytes);
1223 
1224  std::memcpy(m1_buffer.data(), m1.data(), bytes);
1225  std::memcpy(m2_buffer.data(), m2.data(), bytes);
1226 
1227  // test bitwise and
1228  m3 = m1 & m2;
1229  std::memcpy(m3_buffer.data(), m3.data(), bytes);
1230  for (size_t i = 0; i < bytes; i++) VERIFY_IS_EQUAL(m3_buffer[i], uint8_t(m1_buffer[i] & m2_buffer[i]));
1231 
1232  // test bitwise or
1233  m3 = m1 | m2;
1234  std::memcpy(m3_buffer.data(), m3.data(), bytes);
1235  for (size_t i = 0; i < bytes; i++) VERIFY_IS_EQUAL(m3_buffer[i], uint8_t(m1_buffer[i] | m2_buffer[i]));
1236 
1237  // test bitwise xor
1238  m3 = m1 ^ m2;
1239  std::memcpy(m3_buffer.data(), m3.data(), bytes);
1240  for (size_t i = 0; i < bytes; i++) VERIFY_IS_EQUAL(m3_buffer[i], uint8_t(m1_buffer[i] ^ m2_buffer[i]));
1241 
1242  // test bitwise not
1243  m3 = ~m1;
1244  std::memcpy(m3_buffer.data(), m3.data(), bytes);
1245  for (size_t i = 0; i < bytes; i++) VERIFY_IS_EQUAL(m3_buffer[i], uint8_t(~m1_buffer[i]));
1246 
1247  // test something more complicated
1248  m3 = m1 & m2;
1249  m4 = ~(~m1 | ~m2);
1250  std::memcpy(m3_buffer.data(), m3.data(), bytes);
1251  std::memcpy(m4_buffer.data(), m4.data(), bytes);
1252  for (size_t i = 0; i < bytes; i++) VERIFY_IS_EQUAL(m3_buffer[i], m4_buffer[i]);
1253 
1254  m3 = m1 ^ m2;
1255  m4 = (~m1) ^ (~m2);
1256  std::memcpy(m3_buffer.data(), m3.data(), bytes);
1257  std::memcpy(m4_buffer.data(), m4.data(), bytes);
1258  for (size_t i = 0; i < bytes; i++) VERIFY_IS_EQUAL(m3_buffer[i], m4_buffer[i]);
1259  }
int i
Definition: BiCGSTAB_step_by_step.cpp:9
Matrix3d m1
Definition: IOFormat.cpp:2
MatrixType m2(n_dims)
int rows
Definition: Tutorial_commainit_02.cpp:1
int cols
Definition: Tutorial_commainit_02.cpp:1
int * m
Definition: level2_cplx_impl.h:294
#define VERIFY_IS_CWISE_EQUAL(a, b)
Definition: main.h:375
#define VERIFY(a)
Definition: main.h:362
#define VERIFY_IS_EQUAL(a, b)
Definition: main.h:367
std::uint8_t uint8_t
Definition: Meta.h:36
EIGEN_DEFAULT_DENSE_INDEX_TYPE Index
The Index type as used for the API.
Definition: Meta.h:83
val
Definition: calibrate.py:119
static Scalar eval_bool_or(const Scalar &x, const Scalar &y)
Definition: array_cwise.cpp:1168
static Scalar eval_bool_and(const Scalar &x, const Scalar &y)
Definition: array_cwise.cpp:1165
static Scalar eval_bool_xor(const Scalar &x, const Scalar &y)
Definition: array_cwise.cpp:1171
static Scalar eval_bool_not(const Scalar &x)
Definition: array_cwise.cpp:1174

References cols, typed_logicals_test_impl< ArrayType >::eval_bool_and(), typed_logicals_test_impl< ArrayType >::eval_bool_not(), typed_logicals_test_impl< ArrayType >::eval_bool_or(), typed_logicals_test_impl< ArrayType >::eval_bool_xor(), i, m, m1, m2(), rows, calibrate::val, VERIFY, VERIFY_IS_CWISE_EQUAL, VERIFY_IS_EQUAL, plotDoE::x, and y.

Referenced by typed_logicals_test().

◆ scalar_to_bool()


The documentation for this struct was generated from the following file: