Skip to content

Commit

Permalink
Merge pull request #10 from jherico/fix/flag_or
Browse files Browse the repository at this point in the history
Support FlagBit|FlagBit and ~FlagBit
  • Loading branch information
rpavlik committed Nov 4, 2019
2 parents 767d6e9 + 6cfbe91 commit 6036936
Show file tree
Hide file tree
Showing 2 changed files with 58 additions and 0 deletions.
8 changes: 8 additions & 0 deletions scripts/template_openxr_flags.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,14 @@ enum class /*{projected_bits_type }*/ : XrFlags64 {

using /*{projected_type }*/ = Flags</*{projected_bits_type }*/, /*{flags.name}*/>;

OPENXR_HPP_INLINE /*{projected_type }*/ operator|( /*{projected_bits_type }*/ bit0, /*{projected_bits_type }*/ bit1 ) {
return /*{projected_type }*/( bit0 ) | bit1;
}

OPENXR_HPP_INLINE /*{projected_type }*/ operator~( /*{projected_bits_type }*/ bits ) {
return ~( /*{projected_type }*/( bits ) );
}

/*{ protect_end(flags) }*/
//# endfor

Expand Down
50 changes: 50 additions & 0 deletions tests/flags.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
#include "openxr/openxr.hpp"
#include <type_traits>

#include <gtest/gtest.h>

class OpenXrFlagsTest : public ::testing::Test {
protected:
void SetUp() override {}

void TearDown() override {}
};

TEST_F(OpenXrFlagsTest, flagsTest) {
{
xr::SpaceVelocityFlags flags = xr::SpaceVelocityFlagBits::LinearValid | xr::SpaceVelocityFlagBits::AngularValid;
EXPECT_EQ(flags & xr::SpaceVelocityFlagBits::LinearValid, xr::SpaceVelocityFlagBits::LinearValid);
EXPECT_EQ((flags & xr::SpaceVelocityFlagBits::LinearValid).operator bool(), true);
EXPECT_EQ(flags & xr::SpaceVelocityFlagBits::AngularValid, xr::SpaceVelocityFlagBits::AngularValid);
EXPECT_EQ((flags & xr::SpaceVelocityFlagBits::AngularValid).operator bool(), true);
XrSpaceVelocityFlags cflags = flags.operator size_t();
EXPECT_EQ(cflags, XR_SPACE_VELOCITY_LINEAR_VALID_BIT | XR_SPACE_VELOCITY_ANGULAR_VALID_BIT);
}

{
xr::SpaceVelocityFlags flags = xr::SpaceVelocityFlagBits::LinearValid;
EXPECT_EQ(flags & xr::SpaceVelocityFlagBits::LinearValid, xr::SpaceVelocityFlagBits::LinearValid);
EXPECT_EQ((flags & xr::SpaceVelocityFlagBits::LinearValid).operator bool(), true);
EXPECT_EQ(flags & xr::SpaceVelocityFlagBits::AngularValid, xr::SpaceVelocityFlagBits::None);
EXPECT_EQ((flags & xr::SpaceVelocityFlagBits::AngularValid).operator bool(), false);
XrSpaceVelocityFlags cflags = flags.operator size_t();
EXPECT_EQ(cflags, XR_SPACE_VELOCITY_LINEAR_VALID_BIT);
}

{
xr::SpaceVelocityFlags flags;
EXPECT_EQ(flags, xr::SpaceVelocityFlagBits::None);
XrSpaceVelocityFlags cflags = flags.operator size_t();
EXPECT_EQ(cflags, 0);
}

{
auto flags = xr::SpaceVelocityFlagBits::LinearValid | xr::SpaceVelocityFlagBits::AngularValid;
EXPECT_TRUE((std::is_same<decltype(flags), xr::SpaceVelocityFlags>::value));
}

{
auto flags = xr::SpaceVelocityFlagBits::LinearValid | xr::SpaceVelocityFlagBits::AngularValid;
EXPECT_TRUE((std::is_same<decltype(flags), xr::SpaceVelocityFlags>::value));
}
}

0 comments on commit 6036936

Please sign in to comment.