fix any_of/none_of

This commit is contained in:
BlackMATov
2022-03-28 21:41:00 +07:00
parent 2917a832db
commit deb76ce5a5
3 changed files with 11 additions and 12 deletions

1
.gitignore vendored
View File

@@ -1,3 +1,4 @@
build/* build/*
.clangd/*
.vscode/* .vscode/*
CMakeLists.txt.user CMakeLists.txt.user

View File

@@ -232,8 +232,7 @@ namespace enum_hpp::bitflags
template < typename Enum > template < typename Enum >
constexpr bool any_of(bitflags<Enum> flags, bitflags<Enum> mask) noexcept { constexpr bool any_of(bitflags<Enum> flags, bitflags<Enum> mask) noexcept {
return mask.as_raw() == 0 return 0 != (flags.as_raw() & mask.as_raw());
|| (flags.as_raw() & mask.as_raw()) != 0;
} }
// //
@@ -258,8 +257,7 @@ namespace enum_hpp::bitflags
template < typename Enum > template < typename Enum >
constexpr bool none_of(bitflags<Enum> flags, bitflags<Enum> mask) noexcept { constexpr bool none_of(bitflags<Enum> flags, bitflags<Enum> mask) noexcept {
return mask.as_raw() != 0 return 0 == (flags.as_raw() & mask.as_raw());
&& (flags.as_raw() & mask.as_raw()) == 0;
} }
// //

View File

@@ -337,44 +337,44 @@ TEST_CASE("enum_bitflags") {
} }
SUBCASE("any_of") { SUBCASE("any_of") {
STATIC_CHECK(bf::any_of(access::none, access::none)); STATIC_CHECK_FALSE(bf::any_of(access::none, access::none));
STATIC_CHECK_FALSE(bf::any_of(access::none, access::read)); STATIC_CHECK_FALSE(bf::any_of(access::none, access::read));
STATIC_CHECK_FALSE(bf::any_of(access::none, access::write)); STATIC_CHECK_FALSE(bf::any_of(access::none, access::write));
STATIC_CHECK_FALSE(bf::any_of(access::none, access::read_write)); STATIC_CHECK_FALSE(bf::any_of(access::none, access::read_write));
STATIC_CHECK(bf::any_of(access::read, access::none)); STATIC_CHECK_FALSE(bf::any_of(access::read, access::none));
STATIC_CHECK(bf::any_of(access::read, access::read)); STATIC_CHECK(bf::any_of(access::read, access::read));
STATIC_CHECK_FALSE(bf::any_of(access::read, access::write)); STATIC_CHECK_FALSE(bf::any_of(access::read, access::write));
STATIC_CHECK(bf::any_of(access::read, access::read_write)); STATIC_CHECK(bf::any_of(access::read, access::read_write));
STATIC_CHECK(bf::any_of(access::write, access::none)); STATIC_CHECK_FALSE(bf::any_of(access::write, access::none));
STATIC_CHECK_FALSE(bf::any_of(access::write, access::read)); STATIC_CHECK_FALSE(bf::any_of(access::write, access::read));
STATIC_CHECK(bf::any_of(access::write, access::write)); STATIC_CHECK(bf::any_of(access::write, access::write));
STATIC_CHECK(bf::any_of(access::write, access::read_write)); STATIC_CHECK(bf::any_of(access::write, access::read_write));
STATIC_CHECK(bf::any_of(access::read_write, access::none)); STATIC_CHECK_FALSE(bf::any_of(access::read_write, access::none));
STATIC_CHECK(bf::any_of(access::read_write, access::read)); STATIC_CHECK(bf::any_of(access::read_write, access::read));
STATIC_CHECK(bf::any_of(access::read_write, access::write)); STATIC_CHECK(bf::any_of(access::read_write, access::write));
STATIC_CHECK(bf::any_of(access::read_write, access::read_write)); STATIC_CHECK(bf::any_of(access::read_write, access::read_write));
} }
SUBCASE("none_of") { SUBCASE("none_of") {
STATIC_CHECK_FALSE(bf::none_of(access::none, access::none)); STATIC_CHECK(bf::none_of(access::none, access::none));
STATIC_CHECK(bf::none_of(access::none, access::read)); STATIC_CHECK(bf::none_of(access::none, access::read));
STATIC_CHECK(bf::none_of(access::none, access::write)); STATIC_CHECK(bf::none_of(access::none, access::write));
STATIC_CHECK(bf::none_of(access::none, access::read_write)); STATIC_CHECK(bf::none_of(access::none, access::read_write));
STATIC_CHECK_FALSE(bf::none_of(access::read, access::none)); STATIC_CHECK(bf::none_of(access::read, access::none));
STATIC_CHECK_FALSE(bf::none_of(access::read, access::read)); STATIC_CHECK_FALSE(bf::none_of(access::read, access::read));
STATIC_CHECK(bf::none_of(access::read, access::write)); STATIC_CHECK(bf::none_of(access::read, access::write));
STATIC_CHECK_FALSE(bf::none_of(access::read, access::read_write)); STATIC_CHECK_FALSE(bf::none_of(access::read, access::read_write));
STATIC_CHECK_FALSE(bf::none_of(access::write, access::none)); STATIC_CHECK(bf::none_of(access::write, access::none));
STATIC_CHECK(bf::none_of(access::write, access::read)); STATIC_CHECK(bf::none_of(access::write, access::read));
STATIC_CHECK_FALSE(bf::none_of(access::write, access::write)); STATIC_CHECK_FALSE(bf::none_of(access::write, access::write));
STATIC_CHECK_FALSE(bf::none_of(access::write, access::read_write)); STATIC_CHECK_FALSE(bf::none_of(access::write, access::read_write));
STATIC_CHECK_FALSE(bf::none_of(access::read_write, access::none)); STATIC_CHECK(bf::none_of(access::read_write, access::none));
STATIC_CHECK_FALSE(bf::none_of(access::read_write, access::read)); STATIC_CHECK_FALSE(bf::none_of(access::read_write, access::read));
STATIC_CHECK_FALSE(bf::none_of(access::read_write, access::write)); STATIC_CHECK_FALSE(bf::none_of(access::read_write, access::write));
STATIC_CHECK_FALSE(bf::none_of(access::read_write, access::read_write)); STATIC_CHECK_FALSE(bf::none_of(access::read_write, access::read_write));