mirror of
https://github.com/BlackMATov/enum.hpp.git
synced 2025-12-13 06:59:45 +07:00
fix bitflags logic ops
This commit is contained in:
@@ -17,6 +17,11 @@ namespace enum_hpp::bitflags
|
||||
using enum_type = Enum;
|
||||
using underlying_type = std::underlying_type_t<Enum>;
|
||||
|
||||
bitflags() = default;
|
||||
|
||||
bitflags(const bitflags&) = default;
|
||||
bitflags& operator=(const bitflags&) = default;
|
||||
|
||||
constexpr bitflags(enum_type flags)
|
||||
: flags_(static_cast<underlying_type>(flags)) {}
|
||||
|
||||
@@ -44,11 +49,11 @@ namespace enum_hpp::bitflags
|
||||
#define ENUM_HPP_DEFINE_BINARY_OPERATOR(op)\
|
||||
template < typename Enum >\
|
||||
constexpr bool operator op(Enum l, bitflags<Enum> r) noexcept {\
|
||||
return l op r.as_raw();\
|
||||
return l op r.as_enum();\
|
||||
}\
|
||||
template < typename Enum >\
|
||||
constexpr bool operator op(bitflags<Enum> l, Enum r) noexcept {\
|
||||
return l.as_raw() op r;\
|
||||
return l.as_enum() op r;\
|
||||
}\
|
||||
template < typename Enum >\
|
||||
constexpr bool operator op(std::underlying_type_t<Enum> l, bitflags<Enum> r) noexcept {\
|
||||
|
||||
@@ -34,22 +34,92 @@ TEST_CASE("enum_bitflags") {
|
||||
}
|
||||
|
||||
SUBCASE("logic_operators") {
|
||||
STATIC_CHECK(0x1 < bf::bitflags{access::write});
|
||||
STATIC_CHECK(access::read < bf::bitflags{access::write});
|
||||
STATIC_CHECK(bf::bitflags{access::read} < 0x2);
|
||||
STATIC_CHECK(bf::bitflags{access::read} < access::write);
|
||||
STATIC_CHECK(bf::bitflags{access::read} < bf::bitflags{access::write});
|
||||
|
||||
STATIC_CHECK_FALSE(0x2 < bf::bitflags{access::read});
|
||||
STATIC_CHECK_FALSE(access::write < bf::bitflags{access::read});
|
||||
STATIC_CHECK_FALSE(bf::bitflags{access::write} < 0x1);
|
||||
STATIC_CHECK_FALSE(bf::bitflags{access::write} < access::read);
|
||||
STATIC_CHECK_FALSE(bf::bitflags{access::write} < bf::bitflags{access::read});
|
||||
|
||||
STATIC_CHECK(0x1 <= bf::bitflags{access::write});
|
||||
STATIC_CHECK(access::read <= bf::bitflags{access::write});
|
||||
STATIC_CHECK(bf::bitflags{access::read} <= 0x2);
|
||||
STATIC_CHECK(bf::bitflags{access::read} <= access::write);
|
||||
STATIC_CHECK(bf::bitflags{access::read} <= bf::bitflags{access::write});
|
||||
|
||||
STATIC_CHECK_FALSE(0x2 <= bf::bitflags{access::read});
|
||||
STATIC_CHECK_FALSE(access::write <= bf::bitflags{access::read});
|
||||
STATIC_CHECK_FALSE(bf::bitflags{access::write} <= 0x1);
|
||||
STATIC_CHECK_FALSE(bf::bitflags{access::write} <= access::read);
|
||||
STATIC_CHECK_FALSE(bf::bitflags{access::write} <= bf::bitflags{access::read});
|
||||
|
||||
STATIC_CHECK(0x2 <= bf::bitflags{access::write});
|
||||
STATIC_CHECK(access::write <= bf::bitflags{access::write});
|
||||
STATIC_CHECK(bf::bitflags{access::write} <= 0x2);
|
||||
STATIC_CHECK(bf::bitflags{access::write} <= access::write);
|
||||
STATIC_CHECK(bf::bitflags{access::write} <= bf::bitflags{access::write});
|
||||
|
||||
STATIC_CHECK(bf::bitflags{access::write} > bf::bitflags{access::read});
|
||||
STATIC_CHECK_FALSE(bf::bitflags{access::read} > bf::bitflags{access::write});
|
||||
STATIC_CHECK(bf::bitflags{access::write} >= bf::bitflags{access::read});
|
||||
STATIC_CHECK_FALSE(bf::bitflags{access::read} >= bf::bitflags{access::write});
|
||||
STATIC_CHECK(bf::bitflags{access::read} >= bf::bitflags{access::read});
|
||||
//
|
||||
|
||||
STATIC_CHECK_FALSE(0x1 > bf::bitflags{access::write});
|
||||
STATIC_CHECK_FALSE(access::read > bf::bitflags{access::write});
|
||||
STATIC_CHECK_FALSE(bf::bitflags{access::read} > 0x2);
|
||||
STATIC_CHECK_FALSE(bf::bitflags{access::read} > access::write);
|
||||
STATIC_CHECK_FALSE(bf::bitflags{access::read} > bf::bitflags{access::write});
|
||||
|
||||
STATIC_CHECK(0x2 > bf::bitflags{access::read});
|
||||
STATIC_CHECK(access::write > bf::bitflags{access::read});
|
||||
STATIC_CHECK(bf::bitflags{access::write} > 0x1);
|
||||
STATIC_CHECK(bf::bitflags{access::write} > access::read);
|
||||
STATIC_CHECK(bf::bitflags{access::write} > bf::bitflags{access::read});
|
||||
|
||||
STATIC_CHECK_FALSE(0x1 >= bf::bitflags{access::write});
|
||||
STATIC_CHECK_FALSE(access::read >= bf::bitflags{access::write});
|
||||
STATIC_CHECK_FALSE(bf::bitflags{access::read} >= 0x2);
|
||||
STATIC_CHECK_FALSE(bf::bitflags{access::read} >= access::write);
|
||||
STATIC_CHECK_FALSE(bf::bitflags{access::read} >= bf::bitflags{access::write});
|
||||
|
||||
STATIC_CHECK(0x2 >= bf::bitflags{access::read});
|
||||
STATIC_CHECK(access::write >= bf::bitflags{access::read});
|
||||
STATIC_CHECK(bf::bitflags{access::write} >= 0x1);
|
||||
STATIC_CHECK(bf::bitflags{access::write} >= access::read);
|
||||
STATIC_CHECK(bf::bitflags{access::write} >= bf::bitflags{access::read});
|
||||
|
||||
STATIC_CHECK(0x2 >= bf::bitflags{access::write});
|
||||
STATIC_CHECK(access::write >= bf::bitflags{access::write});
|
||||
STATIC_CHECK(bf::bitflags{access::write} >= 0x2);
|
||||
STATIC_CHECK(bf::bitflags{access::write} >= access::write);
|
||||
STATIC_CHECK(bf::bitflags{access::write} >= bf::bitflags{access::write});
|
||||
|
||||
//
|
||||
|
||||
STATIC_CHECK(0x1 == bf::bitflags{access::read});
|
||||
STATIC_CHECK(access::read == bf::bitflags{access::read});
|
||||
STATIC_CHECK(bf::bitflags{access::read} == 0x1);
|
||||
STATIC_CHECK(bf::bitflags{access::read} == access::read);
|
||||
STATIC_CHECK(bf::bitflags{access::read} == bf::bitflags{access::read});
|
||||
|
||||
STATIC_CHECK_FALSE(0x1 == bf::bitflags{access::write});
|
||||
STATIC_CHECK_FALSE(access::read == bf::bitflags{access::write});
|
||||
STATIC_CHECK_FALSE(bf::bitflags{access::read} == 0x2);
|
||||
STATIC_CHECK_FALSE(bf::bitflags{access::read} == access::write);
|
||||
STATIC_CHECK_FALSE(bf::bitflags{access::read} == bf::bitflags{access::write});
|
||||
|
||||
STATIC_CHECK(0x1 != bf::bitflags{access::write});
|
||||
STATIC_CHECK(access::read != bf::bitflags{access::write});
|
||||
STATIC_CHECK(bf::bitflags{access::read} != 0x2);
|
||||
STATIC_CHECK(bf::bitflags{access::read} != access::write);
|
||||
STATIC_CHECK(bf::bitflags{access::read} != bf::bitflags{access::write});
|
||||
|
||||
STATIC_CHECK_FALSE(0x1 != bf::bitflags{access::read});
|
||||
STATIC_CHECK_FALSE(access::read != bf::bitflags{access::read});
|
||||
STATIC_CHECK_FALSE(bf::bitflags{access::read} != 0x1);
|
||||
STATIC_CHECK_FALSE(bf::bitflags{access::read} != access::read);
|
||||
STATIC_CHECK_FALSE(bf::bitflags{access::read} != bf::bitflags{access::read});
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user