#include "tap.hpp" #include "types/description.hpp" #include "types/dispatch.hpp" #include "types.hpp" /////////////////////////////////////////////////////////////////////////////// enum an_enum_type { AN_ENUM_VALUE }; //----------------------------------------------------------------------------- struct does_enum_match { template bool operator() (cruft::type_tag const&) { return false; } template bool operator() (cruft::type_tag> const &tag) { auto const expected = cruft::types::make_description (); return expected == tag.desc; } }; /////////////////////////////////////////////////////////////////////////////// int main () { cruft::TAP::logger tap; tap.expect_eq ( cruft::types::make_description (), cruft::types::description { .category = cruft::types::category::INTEGER, .signedness = true, .width = sizeof (int), .arity = 1, .alignment = alignof (int), .index = cruft::typeidx (), }, "description: int" ); tap.expect_neq ( cruft::types::make_description (), cruft::types::make_description (), "different signedness is unequal" ); tap.expect_eq ( cruft::types::make_description ().category, cruft::types::category::ENUM, "enums are described as such" ); auto const enum_type_descriptor = cruft::types::make_description (); tap.expect ( cruft::types::visit (enum_type_descriptor, does_enum_match {}), "enum type descriptor dispatches correctly" ); return tap.status (); }