libcruft-util/test/tuple/type.cpp

54 lines
1.2 KiB
C++
Raw Normal View History

2015-04-20 17:16:18 +10:00
#include "tap.hpp"
2018-04-05 13:54:42 +10:00
#include "tuple/type.hpp"
2018-04-05 13:54:42 +10:00
#include <typeindex>
2015-04-20 17:16:18 +10:00
2015-04-21 14:19:56 +10:00
template <typename T>
struct int_mapper
{
typedef int type;
};
2018-04-05 13:54:42 +10:00
2015-04-20 17:16:18 +10:00
int
2018-04-05 13:54:42 +10:00
main (void)
2015-04-20 17:16:18 +10:00
{
util::TAP::logger tap;
{
2018-04-05 13:54:42 +10:00
using tuple_t = std::tuple<float,int,void>;
tap.expect_eq (util::tuple::type::index<tuple_t,int>::value, 1u, "tuple index extraction");
2015-04-20 17:16:18 +10:00
}
{
2018-04-05 13:54:42 +10:00
#if !defined(NO_RTTI)
2015-04-20 17:16:18 +10:00
auto tuple = std::make_tuple (1u, 1, 1.f, 1.);
std::vector<std::type_index> expected {
std::type_index (typeid (1u)),
std::type_index (typeid (1)),
std::type_index (typeid (1.f)),
std::type_index (typeid (1.))
};
std::vector<std::type_index> actual;
util::tuple::type::each<decltype(tuple)> ([&actual] (auto i) {
2015-04-20 17:16:18 +10:00
actual.push_back (typeid (typename decltype(i)::type));
});
tap.expect_eq (actual, expected, "type iteration");
2018-04-05 13:54:42 +10:00
#else
2016-05-12 17:59:08 +10:00
tap.skip ("type iteration because no-rtti");
2018-04-05 13:54:42 +10:00
#endif
2015-04-20 17:16:18 +10:00
}
2015-04-21 14:19:56 +10:00
{
2018-04-05 13:54:42 +10:00
using src_t = std::tuple<std::string>;
using dst_t = typename util::tuple::type::map<src_t, int_mapper>::type;
2015-04-21 14:19:56 +10:00
tap.expect (std::is_same<dst_t, std::tuple<int>>::value, "tuple type mapping");
2015-04-21 14:19:56 +10:00
}
return tap.status ();
2018-04-05 13:54:42 +10:00
}