tmp/tests/traits.cpp

75 lines
1.9 KiB
C++

#include "catch_tmp.h"
#include <traits.h>
using namespace tmp;
TEST_CASE("void_t") {}
TEST_CASE("Void") {}
TEST_CASE("ReturnType") {
REQUIRE_SAME(void, ReturnType<void()>);
REQUIRE_SAME(void, ReturnType<void(int)>);
REQUIRE_SAME(bool, ReturnType<bool()>);
REQUIRE_SAME(bool&, ReturnType<bool&()>);
REQUIRE_SAME(bool const&, ReturnType<bool const&()>);
REQUIRE_SAME(void*, ReturnType<void*()>);
REQUIRE_SAME(void const*, ReturnType<void const*()>);
REQUIRE_SAME(void const*&, ReturnType<void const*&()>);
REQUIRE_SAME(void const* const&, ReturnType<void const* const&()>);
}
TEST_CASE("Parameters") {
REQUIRE_SAME(Pack<>, Parameters<void()>);
SECTION("single parameter") {
REQUIRE_SAME(Pack<int>, Parameters<void(int)>);
REQUIRE_SAME(Pack<int>, Parameters<void(int const)>);
REQUIRE_SAME(Pack<int&>, Parameters<void(int&)>);
REQUIRE_SAME(Pack<int const&>, Parameters<void(int const&)>);
REQUIRE_SAME(Pack<int*>, Parameters<void(int*)>);
REQUIRE_SAME(Pack<int const*>, Parameters<void(int const*)>);
}
SECTION("multiple parameters") {
using Input = void(void*, char, bool, int);
using Result = Parameters<Input>;
using Expected = Pack<void*, char, bool, int>;
REQUIRE_SAME(Expected, Result);
}
}
TEST_CASE("invoke_result_t") {}
TEST_CASE("FunctionCat") {
SECTION("empty lhs and rhs") {
using Result = FunctionCat<void(), void()>;
using Expected = void();
REQUIRE_SAME(Expected, Result);
}
SECTION("empty lhs") {
using Result = FunctionCat<void(), void(char)>;
using Expected = void(char);
REQUIRE_SAME(Expected, Result);
}
SECTION("empty rhs") {
using Result = FunctionCat<void(char), void()>;
using Expected = void(char);
REQUIRE_SAME(Expected, Result);
}
SECTION("general case") {
using Result = FunctionCat<void(char, int), void(bool, char)>;
using Expected = void(char, int, bool, char);
REQUIRE_SAME(Expected, Result);
}
}