Skip to content

Commit fb4c004

Browse files
refactor: Add tests for meta traits and primitive concepts in primitives module
1 parent 35f5211 commit fb4c004

1 file changed

Lines changed: 57 additions & 0 deletions

File tree

tests/basic/test_underlying.cpp

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -480,6 +480,63 @@ TEST(PrimitiveTraitsTest, LegacyPrimitiveTraitsNamespaceAliasesRemainAvailable)
480480
SUCCEED();
481481
}
482482

483+
TEST(PrimitiveTraitsTest, MetaTraitsExposeValueTypeAndPrimitiveMetadata) {
484+
using value_t = mcpplibs::primitives::primitive<
485+
short, mcpplibs::primitives::policy::value::checked,
486+
mcpplibs::primitives::policy::type::compatible,
487+
mcpplibs::primitives::policy::error::expected,
488+
mcpplibs::primitives::policy::concurrency::fenced>;
489+
using traits_t = mcpplibs::primitives::meta::traits<value_t const &>;
490+
491+
static_assert(
492+
std::same_as<typename traits_t::value_type, typename value_t::value_type>);
493+
static_assert(std::same_as<typename traits_t::policies, typename value_t::policies>);
494+
static_assert(std::same_as<typename traits_t::value_policy,
495+
mcpplibs::primitives::policy::value::checked>);
496+
static_assert(std::same_as<typename traits_t::type_policy,
497+
mcpplibs::primitives::policy::type::compatible>);
498+
static_assert(std::same_as<typename traits_t::error_policy,
499+
mcpplibs::primitives::policy::error::expected>);
500+
static_assert(std::same_as<typename traits_t::concurrency_policy,
501+
mcpplibs::primitives::policy::concurrency::fenced>);
502+
503+
SUCCEED();
504+
}
505+
506+
TEST(PrimitiveTraitsTest, MetaPrimitiveConceptsMatchUnderlyingCategory) {
507+
using boolean_t = mcpplibs::primitives::primitive<bool>;
508+
using character_t = mcpplibs::primitives::primitive<char>;
509+
using integer_t = mcpplibs::primitives::primitive<int>;
510+
using floating_t = mcpplibs::primitives::primitive<double>;
511+
512+
static_assert(mcpplibs::primitives::meta::primitive_type<boolean_t const &>);
513+
static_assert(mcpplibs::primitives::meta::primitive_type<integer_t>);
514+
static_assert(!mcpplibs::primitives::meta::primitive_type<int>);
515+
516+
static_assert(mcpplibs::primitives::meta::boolean<boolean_t>);
517+
static_assert(!mcpplibs::primitives::meta::boolean<integer_t>);
518+
519+
static_assert(mcpplibs::primitives::meta::character<character_t>);
520+
static_assert(!mcpplibs::primitives::meta::character<boolean_t>);
521+
522+
static_assert(mcpplibs::primitives::meta::integer<integer_t>);
523+
static_assert(!mcpplibs::primitives::meta::integer<character_t>);
524+
525+
static_assert(mcpplibs::primitives::meta::floating<floating_t>);
526+
static_assert(!mcpplibs::primitives::meta::floating<integer_t>);
527+
528+
static_assert(mcpplibs::primitives::meta::numeric<integer_t>);
529+
static_assert(mcpplibs::primitives::meta::numeric<floating_t>);
530+
static_assert(!mcpplibs::primitives::meta::numeric<boolean_t>);
531+
static_assert(!mcpplibs::primitives::meta::numeric<character_t>);
532+
static_assert(!mcpplibs::primitives::meta::numeric<int>);
533+
534+
EXPECT_TRUE((mcpplibs::primitives::meta::boolean<boolean_t>));
535+
EXPECT_TRUE((mcpplibs::primitives::meta::character<character_t>));
536+
EXPECT_TRUE((mcpplibs::primitives::meta::integer<integer_t>));
537+
EXPECT_TRUE((mcpplibs::primitives::meta::floating<floating_t>));
538+
}
539+
483540
TEST(PrimitiveTraitsTest,
484541
UnderlyingTypeRequiresValidRepTypeAndCategoryConsistency) {
485542
EXPECT_TRUE((mcpplibs::primitives::underlying::traits<BadRep>::enabled));

0 commit comments

Comments
 (0)