2
0
mirror of https://github.com/boostorg/hof.git synced 2026-01-20 16:42:14 +00:00
Files
hof/test/apply.cpp
2016-01-17 23:16:02 -06:00

63 lines
1.8 KiB
C++

#include <fit/apply.hpp>
#include "test.hpp"
FIT_TEST_CASE()
{
FIT_STATIC_TEST_CHECK(fit::apply(binary_class(), 1, 2) == 3);
FIT_TEST_CHECK(fit::apply(binary_class(), 1, 2) == 3);
}
struct member_sum_f
{
int i;
constexpr member_sum_f(int x) : i(x)
{}
constexpr int add(int x) const
{
return i+x;
}
};
struct member_sum_f_derived
: member_sum_f
{
constexpr member_sum_f_derived(int x) : member_sum_f(x)
{}
};
FIT_TEST_CASE()
{
FIT_TEST_CHECK(fit::apply(&member_sum_f::add, member_sum_f(1), 2) == 3);
FIT_TEST_CHECK(fit::apply(&member_sum_f::add, member_sum_f_derived(1), 2) == 3);
#ifdef __clang__
FIT_STATIC_TEST_CHECK(fit::apply(&member_sum_f::add, member_sum_f(1), 2) == 3);
FIT_STATIC_TEST_CHECK(fit::apply(&member_sum_f::add, member_sum_f_derived(1), 2) == 3);
#endif
static_assert(std::is_base_of<member_sum_f, member_sum_f>::value, "Base of failed");
std::unique_ptr<member_sum_f> msp(new member_sum_f(1));
FIT_TEST_CHECK(fit::apply(&member_sum_f::add, msp, 2) == 3);
std::unique_ptr<member_sum_f_derived> mspd(new member_sum_f_derived(1));
FIT_TEST_CHECK(fit::apply(&member_sum_f::add, mspd, 2) == 3);
}
FIT_TEST_CASE()
{
FIT_TEST_CHECK(fit::apply(&member_sum_f::i, member_sum_f(3)) == 3);
FIT_TEST_CHECK(fit::apply(&member_sum_f::i, member_sum_f_derived(3)) == 3);
#ifdef __clang__
FIT_STATIC_TEST_CHECK(fit::apply(&member_sum_f::i, member_sum_f(3)) == 3);
FIT_STATIC_TEST_CHECK(fit::apply(&member_sum_f::i, member_sum_f_derived(3)) == 3);
#endif
std::unique_ptr<member_sum_f> msp(new member_sum_f(3));
FIT_TEST_CHECK(fit::apply(&member_sum_f::i, msp) == 3);
std::unique_ptr<member_sum_f_derived> mspd(new member_sum_f_derived(3));
FIT_TEST_CHECK(fit::apply(&member_sum_f::i, mspd) == 3);
}