12 #ifndef INCLUDE_MOLASSEMBLER_TEMPLE_CONSTEXPR_LOGICAL_OPERATOR_TESTS_H
13 #define INCLUDE_MOLASSEMBLER_TEMPLE_CONSTEXPR_LOGICAL_OPERATOR_TESTS_H
20 namespace Molassembler {
28 a < b && b > a && a != b,
29 b < a && a > b && a != b,
30 !(a < b) && !(a > b) && a == b
52 void explainLogicalOperatorFailures(
const T& a,
const T& b) {
55 a < b && b > a && a != b,
56 b < a && a > b && a != b,
57 !(a < b) && !(a > b) && a == b
60 std::cout <<
"operator < is inconsistent:\n" << std::boolalpha
61 <<
" a < b && b > a && a != b -> "
62 << (a < b) <<
" && " << (b > a) <<
" && " << (a != b) <<
" -> "
63 << (a < b && b > a && a != b) <<
"\n"
64 <<
" b < a && a > b && a != b -> "
65 << (b < a) <<
" && " << (a > b) <<
" && " << (a != b) <<
" -> "
66 << (b < a && a > b && a != b) <<
"\n"
67 <<
" !(a < b) && !(a > b) && a == b -> "
68 << !(a < b) <<
" && " << !(a > b) <<
" && " << (a == b) <<
" -> "
69 << (!(a < b) && !(a > b) && a == b) <<
"\n";
78 std::cout <<
"operator == is inconsistent:\n" << std::boolalpha
79 <<
" a == b -> " << (a == b) <<
"\n"
80 <<
" a != b -> " << (a != b) <<
"\n";
constexpr math implementations
constexpr bool testLogicalOperators(const T &a, const T &b)
For any two types, check consistency of their logical operators.
Definition: LogicalOperatorTests.h:25
constexpr bool testOperatorSmaller(const T &a, const T &b)
Limited variant of testLogicalOperators.
Definition: LogicalOperatorTests.h:40