#include #include #include #include "test.hpp" #include FIT_TEST_CASE() { FIT_STATIC_TEST_CHECK(fit::apply_eval(binary_class(), fit::always(1), fit::always(2)) == 3); FIT_TEST_CHECK(fit::apply_eval(binary_class(), []{ return 1; }, []{ return 2;}) == 3); } FIT_TEST_CASE() { fit::apply_eval(fit::always(), fit::always(1), fit::always(2)); } #if FIT_HAS_NOEXCEPT_DEDUCTION FIT_TEST_CASE() { static_assert(noexcept(fit::apply_eval(fit::always(), fit::always(1), fit::always(2))), "noexcept apply_eval"); } #endif FIT_TEST_CASE() { int i = 3; FIT_TEST_CHECK(fit::apply_eval(fit::_ - fit::_, [&]{ return i++; }, [&]{ return i++;}) == -1); FIT_TEST_CHECK(fit::apply_eval(fit::_ - fit::_, [&]{ return ++i; }, [&]{ return ++i;}) == -1); } struct indirect_sum_f { template auto operator()(T x, U y) const FIT_RETURNS(*x + *y); }; FIT_TEST_CASE() { FIT_TEST_CHECK( fit::apply_eval( indirect_sum_f(), []{ return std::unique_ptr(new int(1)); }, []{ return std::unique_ptr(new int(2)); }) == 3); }