diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 2958ed7b..f905e300 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -46,6 +46,7 @@ set(TARGET_PREPARE prepare) set(TARGET_RESOURCE resource) set(TARGET_SIGNAL signal) set(TARGET_TIMER timer) +set(TARGET_UTIL util) set(TARGET_WORK work) # Test TARGET_MAIN @@ -173,6 +174,14 @@ target_include_directories(${TARGET_TIMER} PRIVATE ${COMMON_INCLUDE_DIRS}) target_link_libraries(${TARGET_TIMER} PRIVATE ${COMMON_LINK_LIBS}) add_test(NAME ${TARGET_TIMER} COMMAND ${TARGET_TIMER}) +# Test TARGET_UTIL + +set(TARGET_UTIL_SOURCES $ uvw/util.cpp) +add_executable(${TARGET_UTIL} ${TARGET_UTIL_SOURCES}) +target_include_directories(${TARGET_UTIL} PRIVATE ${COMMON_INCLUDE_DIRS}) +target_link_libraries(${TARGET_UTIL} PRIVATE ${COMMON_LINK_LIBS}) +add_test(NAME ${TARGET_UTIL} COMMAND ${TARGET_UTIL}) + # Test TARGET_WORK set(TARGET_WORK_SOURCES $ uvw/work.cpp) diff --git a/test/uvw/util.cpp b/test/uvw/util.cpp new file mode 100644 index 00000000..9e6c9def --- /dev/null +++ b/test/uvw/util.cpp @@ -0,0 +1,71 @@ +#include +#include + + +TEST(Util, UnscopedFlags) { + enum class UnscopedEnum { FOO = 1, BAR = 2, BAZ = 4, QUUX = 8 }; + + uvw::Flags flags{}; + + ASSERT_NO_THROW((flags = uvw::Flags::from())); + ASSERT_NO_THROW((flags = uvw::Flags{UnscopedEnum::BAZ})); + ASSERT_NO_THROW((flags = uvw::Flags{static_cast::Type>(UnscopedEnum::QUUX)})); + + ASSERT_NO_THROW((flags = uvw::Flags{std::move(flags)})); + ASSERT_NO_THROW((flags = uvw::Flags{flags})); + + flags = uvw::Flags::from(); + + ASSERT_TRUE(static_cast(flags)); + ASSERT_EQ(static_cast::Type>(flags), 9); + + ASSERT_TRUE(flags & uvw::Flags::from()); + ASSERT_FALSE(flags & UnscopedEnum::BAR); + ASSERT_FALSE(flags & uvw::Flags::from()); + ASSERT_TRUE(flags & UnscopedEnum::QUUX); + + ASSERT_NO_THROW(flags = flags | UnscopedEnum::BAR); + ASSERT_NO_THROW(flags = flags | uvw::Flags::from()); + + ASSERT_TRUE(flags & UnscopedEnum::FOO); + ASSERT_TRUE(flags & uvw::Flags::from()); + ASSERT_TRUE(flags & UnscopedEnum::BAZ); + ASSERT_TRUE(flags & uvw::Flags::from()); +} + + +TEST(Util, ScopedFlags) { + enum class ScopedEnum { FOO = 1, BAR = 2, BAZ = 4, QUUX = 8 }; + + uvw::Flags flags{}; + + ASSERT_NO_THROW((flags = uvw::Flags::from())); + ASSERT_NO_THROW((flags = uvw::Flags{ScopedEnum::BAZ})); + ASSERT_NO_THROW((flags = uvw::Flags{static_cast::Type>(ScopedEnum::QUUX)})); + + ASSERT_NO_THROW((flags = uvw::Flags{std::move(flags)})); + ASSERT_NO_THROW((flags = uvw::Flags{flags})); + + flags = uvw::Flags::from(); + + ASSERT_TRUE(static_cast(flags)); + ASSERT_EQ(static_cast::Type>(flags), 9); + + ASSERT_TRUE(flags & uvw::Flags::from()); + ASSERT_FALSE(flags & ScopedEnum::BAR); + ASSERT_FALSE(flags & uvw::Flags::from()); + ASSERT_TRUE(flags & ScopedEnum::QUUX); + + ASSERT_NO_THROW(flags = flags | ScopedEnum::BAR); + ASSERT_NO_THROW(flags = flags | uvw::Flags::from()); + + ASSERT_TRUE(flags & ScopedEnum::FOO); + ASSERT_TRUE(flags & uvw::Flags::from()); + ASSERT_TRUE(flags & ScopedEnum::BAZ); + ASSERT_TRUE(flags & uvw::Flags::from()); +} + + +TEST(Util, Utilities) { + // TODO +}