#include #include "test.hpp" #include #include struct is_5 { template constexpr bool operator()(T i) const { return i == 5; } }; struct is_not_5 { template constexpr bool operator()(T i) const { return i != 5; } }; template struct test_int { template constexpr bool operator()(T x) const { return fit::conditional( fit::if_(std::is_integral())(F()), fit::always(true) )(x); } }; FIT_TEST_CASE() { FIT_TEST_CHECK(test_int()(5)); FIT_TEST_CHECK(test_int()(5L)); FIT_TEST_CHECK(test_int()(5.0)); FIT_TEST_CHECK(test_int()(6.0)); FIT_TEST_CHECK(test_int()(6)); FIT_TEST_CHECK(test_int()(6L)); FIT_TEST_CHECK(test_int()(5.0)); FIT_TEST_CHECK(test_int()(6.0)); FIT_STATIC_TEST_CHECK(test_int()(5)); FIT_STATIC_TEST_CHECK(test_int()(5L)); FIT_STATIC_TEST_CHECK(test_int()(5.0)); FIT_STATIC_TEST_CHECK(test_int()(6.0)); FIT_STATIC_TEST_CHECK(test_int()(6)); FIT_STATIC_TEST_CHECK(test_int()(6L)); FIT_STATIC_TEST_CHECK(test_int()(5.0)); FIT_STATIC_TEST_CHECK(test_int()(6.0)); } template struct test_int_c { template constexpr bool operator()(T x) const { return fit::conditional( fit::if_c::value>(F()), fit::always(true) )(x); } }; FIT_TEST_CASE() { FIT_TEST_CHECK(test_int_c()(5)); FIT_TEST_CHECK(test_int_c()(5L)); FIT_TEST_CHECK(test_int_c()(5.0)); FIT_TEST_CHECK(test_int_c()(6.0)); FIT_TEST_CHECK(test_int_c()(6)); FIT_TEST_CHECK(test_int_c()(6L)); FIT_TEST_CHECK(test_int_c()(5.0)); FIT_TEST_CHECK(test_int_c()(6.0)); FIT_STATIC_TEST_CHECK(test_int_c()(5)); FIT_STATIC_TEST_CHECK(test_int_c()(5L)); FIT_STATIC_TEST_CHECK(test_int_c()(5.0)); FIT_STATIC_TEST_CHECK(test_int_c()(6.0)); FIT_STATIC_TEST_CHECK(test_int_c()(6)); FIT_STATIC_TEST_CHECK(test_int_c()(6L)); FIT_STATIC_TEST_CHECK(test_int_c()(5.0)); FIT_STATIC_TEST_CHECK(test_int_c()(6.0)); } struct sum_f { template constexpr int operator()(T x, T y) const { return fit::conditional( fit::if_(std::is_integral())(fit::_ + fit::_), fit::always(0) )(x, y); } }; FIT_TEST_CASE() { FIT_TEST_CHECK(sum_f()(1, 2) == 3); FIT_TEST_CHECK(sum_f()(1.0, 2.0) == 0); FIT_TEST_CHECK(sum_f()("", "") == 0); FIT_STATIC_TEST_CHECK(sum_f()(1, 2) == 3); FIT_STATIC_TEST_CHECK(sum_f()("", "") == 0); } struct sum_f_c { template constexpr int operator()(T x, T y) const { return fit::conditional( fit::if_c::value>(fit::_ + fit::_), fit::always(0) )(x, y); } }; FIT_TEST_CASE() { FIT_TEST_CHECK(sum_f_c()(1, 2) == 3); FIT_TEST_CHECK(sum_f_c()(1.0, 2.0) == 0); FIT_TEST_CHECK(sum_f_c()("", "") == 0); FIT_STATIC_TEST_CHECK(sum_f_c()(1, 2) == 3); FIT_STATIC_TEST_CHECK(sum_f_c()("", "") == 0); }