#include #include "test.hpp" #include #include #include #include #include #include template struct ac { T value; constexpr ac(T i) : value(i) {} }; template struct tuple_meta { typedef std::tuple type; }; struct tuple_meta_class { template struct apply { typedef std::tuple type; }; }; FIT_TEST_CASE() { auto v = fit::construct>()(5, 5); FIT_TEST_CHECK(v.size() == 5); FIT_TEST_CHECK(v == std::vector{5, 5, 5, 5, 5}); } FIT_TEST_CASE() { auto make = fit::construct>().by(fit::_1 * fit::_1); auto v = make(3, 3); FIT_TEST_CHECK(v.size() == 9); FIT_TEST_CHECK(v == std::vector{9, 9, 9, 9, 9, 9, 9, 9, 9}); } FIT_TEST_CASE() { auto v = fit::construct>()({5, 5, 5, 5, 5}); FIT_TEST_CHECK(v.size() == 5); FIT_TEST_CHECK(v == std::vector{5, 5, 5, 5, 5}); } FIT_TEST_CASE() { auto t = fit::construct()(1, 2, 3); static_assert(std::is_same, decltype(t)>::value, ""); FIT_TEST_CHECK(t == std::make_tuple(1, 2, 3)); // GCC 4.7 doesn't have fully constexpr tuple #if defined(__GNUC__) && !defined (__clang__) && __GNUC__ == 4 && __GNUC_MINOR__ > 7 FIT_STATIC_TEST_CHECK(std::make_tuple(1, 2, 3) == fit::construct()(1, 2, 3)); #endif } FIT_TEST_CASE() { auto t = fit::construct()(1, 2); static_assert(std::is_same, decltype(t)>::value, ""); FIT_TEST_CHECK(t == std::make_pair(1, 2)); // GCC 4.7 doesn't have fully constexpr pair #if defined(__GNUC__) && !defined (__clang__) && __GNUC__ == 4 && __GNUC_MINOR__ > 7 FIT_STATIC_TEST_CHECK(std::make_pair(1, 2) == fit::construct()(1, 2)); #endif } FIT_TEST_CASE() { auto make = fit::construct().by(fit::_1 * fit::_1); auto t = make(1, 2, 3); static_assert(std::is_same, decltype(t)>::value, ""); FIT_TEST_CHECK(t == std::make_tuple(1, 4, 9)); } FIT_TEST_CASE() { auto f = fit::conditional(fit::construct(), fit::identity); FIT_TEST_CHECK(f(1, 2) == std::make_pair(1, 2)); FIT_TEST_CHECK(f(1) == 1); } FIT_TEST_CASE() { auto x = fit::construct()(1); static_assert(std::is_same, decltype(x)>::value, ""); FIT_TEST_CHECK(x.value == ac(1).value); FIT_STATIC_TEST_CHECK(ac(1).value == fit::construct()(1).value); } FIT_TEST_CASE() { auto t = fit::construct_meta()(1, 2, 3); static_assert(std::is_same, decltype(t)>::value, ""); FIT_TEST_CHECK(t == std::make_tuple(1, 2, 3)); // GCC 4.7 doesn't have fully constexpr tuple #if defined(__GNUC__) && !defined (__clang__) && __GNUC__ == 4 && __GNUC_MINOR__ > 7 FIT_STATIC_TEST_CHECK(std::make_tuple(1, 2, 3) == fit::construct_meta()(1, 2, 3)); #endif } FIT_TEST_CASE() { auto t = fit::construct_meta()(1, 2, 3); static_assert(std::is_same, decltype(t)>::value, ""); FIT_TEST_CHECK(t == std::make_tuple(1, 2, 3)); // GCC 4.7 doesn't have fully constexpr tuple #if defined(__GNUC__) && !defined (__clang__) && __GNUC__ == 4 && __GNUC_MINOR__ > 7 FIT_STATIC_TEST_CHECK(std::make_tuple(1, 2, 3) == fit::construct_meta()(1, 2, 3)); #endif } FIT_TEST_CASE() { auto make = fit::construct_meta().by(fit::_1 * fit::_1); auto t = make(1, 2, 3); static_assert(std::is_same, decltype(t)>::value, ""); FIT_TEST_CHECK(t == std::make_tuple(1, 4, 9)); } FIT_TEST_CASE() { auto make = fit::construct_meta().by(fit::_1 * fit::_1); auto t = make(1, 2, 3); static_assert(std::is_same, decltype(t)>::value, ""); FIT_TEST_CHECK(t == std::make_tuple(1, 4, 9)); }