tests: util (partial)

This commit is contained in:
Michele Caini 2017-01-26 15:12:24 +01:00
parent 511dc309c8
commit dda5eec466
2 changed files with 80 additions and 0 deletions

View File

@ -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 $<TARGET_OBJECTS:odr> 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 $<TARGET_OBJECTS:odr> uvw/work.cpp)

71
test/uvw/util.cpp Normal file
View File

@ -0,0 +1,71 @@
#include <gtest/gtest.h>
#include <uvw.hpp>
TEST(Util, UnscopedFlags) {
enum class UnscopedEnum { FOO = 1, BAR = 2, BAZ = 4, QUUX = 8 };
uvw::Flags<UnscopedEnum> flags{};
ASSERT_NO_THROW((flags = uvw::Flags<UnscopedEnum>::from<UnscopedEnum::FOO, UnscopedEnum::BAR>()));
ASSERT_NO_THROW((flags = uvw::Flags<UnscopedEnum>{UnscopedEnum::BAZ}));
ASSERT_NO_THROW((flags = uvw::Flags<UnscopedEnum>{static_cast<uvw::Flags<UnscopedEnum>::Type>(UnscopedEnum::QUUX)}));
ASSERT_NO_THROW((flags = uvw::Flags<UnscopedEnum>{std::move(flags)}));
ASSERT_NO_THROW((flags = uvw::Flags<UnscopedEnum>{flags}));
flags = uvw::Flags<UnscopedEnum>::from<UnscopedEnum::FOO, UnscopedEnum::QUUX>();
ASSERT_TRUE(static_cast<bool>(flags));
ASSERT_EQ(static_cast<uvw::Flags<UnscopedEnum>::Type>(flags), 9);
ASSERT_TRUE(flags & uvw::Flags<UnscopedEnum>::from<UnscopedEnum::FOO>());
ASSERT_FALSE(flags & UnscopedEnum::BAR);
ASSERT_FALSE(flags & uvw::Flags<UnscopedEnum>::from<UnscopedEnum::BAZ>());
ASSERT_TRUE(flags & UnscopedEnum::QUUX);
ASSERT_NO_THROW(flags = flags | UnscopedEnum::BAR);
ASSERT_NO_THROW(flags = flags | uvw::Flags<UnscopedEnum>::from<UnscopedEnum::BAZ>());
ASSERT_TRUE(flags & UnscopedEnum::FOO);
ASSERT_TRUE(flags & uvw::Flags<UnscopedEnum>::from<UnscopedEnum::BAR>());
ASSERT_TRUE(flags & UnscopedEnum::BAZ);
ASSERT_TRUE(flags & uvw::Flags<UnscopedEnum>::from<UnscopedEnum::QUUX>());
}
TEST(Util, ScopedFlags) {
enum class ScopedEnum { FOO = 1, BAR = 2, BAZ = 4, QUUX = 8 };
uvw::Flags<ScopedEnum> flags{};
ASSERT_NO_THROW((flags = uvw::Flags<ScopedEnum>::from<ScopedEnum::FOO, ScopedEnum::BAR>()));
ASSERT_NO_THROW((flags = uvw::Flags<ScopedEnum>{ScopedEnum::BAZ}));
ASSERT_NO_THROW((flags = uvw::Flags<ScopedEnum>{static_cast<uvw::Flags<ScopedEnum>::Type>(ScopedEnum::QUUX)}));
ASSERT_NO_THROW((flags = uvw::Flags<ScopedEnum>{std::move(flags)}));
ASSERT_NO_THROW((flags = uvw::Flags<ScopedEnum>{flags}));
flags = uvw::Flags<ScopedEnum>::from<ScopedEnum::FOO, ScopedEnum::QUUX>();
ASSERT_TRUE(static_cast<bool>(flags));
ASSERT_EQ(static_cast<uvw::Flags<ScopedEnum>::Type>(flags), 9);
ASSERT_TRUE(flags & uvw::Flags<ScopedEnum>::from<ScopedEnum::FOO>());
ASSERT_FALSE(flags & ScopedEnum::BAR);
ASSERT_FALSE(flags & uvw::Flags<ScopedEnum>::from<ScopedEnum::BAZ>());
ASSERT_TRUE(flags & ScopedEnum::QUUX);
ASSERT_NO_THROW(flags = flags | ScopedEnum::BAR);
ASSERT_NO_THROW(flags = flags | uvw::Flags<ScopedEnum>::from<ScopedEnum::BAZ>());
ASSERT_TRUE(flags & ScopedEnum::FOO);
ASSERT_TRUE(flags & uvw::Flags<ScopedEnum>::from<ScopedEnum::BAR>());
ASSERT_TRUE(flags & ScopedEnum::BAZ);
ASSERT_TRUE(flags & uvw::Flags<ScopedEnum>::from<ScopedEnum::QUUX>());
}
TEST(Util, Utilities) {
// TODO
}