From a141c401f78467bc15f62882fca5d55a007cacbb Mon Sep 17 00:00:00 2001 From: Steven Le Rouzic Date: Mon, 17 Feb 2025 00:21:48 +0100 Subject: Reorganize everything --- asl/base/meta_tests.cpp | 289 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 289 insertions(+) create mode 100644 asl/base/meta_tests.cpp (limited to 'asl/base/meta_tests.cpp') diff --git a/asl/base/meta_tests.cpp b/asl/base/meta_tests.cpp new file mode 100644 index 0000000..7aa7145 --- /dev/null +++ b/asl/base/meta_tests.cpp @@ -0,0 +1,289 @@ +#include "asl/base/meta.hpp" +#include "asl/tests/types.hpp" +#include "asl/testing/testing.hpp" +#include "asl/types/box.hpp" + +struct Struct {}; +union Union {}; +enum Enum : uint8_t { EnumVariant = 0, }; +enum class EnumClass : uint8_t { Variant = 0, }; + +static_assert(!asl::same_as); +static_assert(asl::same_as); + +static_assert(asl::same_as, float>); +static_assert(asl::same_as, int>); + +static_assert(asl::default_constructible); +static_assert(asl::default_constructible); +static_assert(asl::default_constructible); + +static_assert(asl::trivially_default_constructible); +static_assert(asl::trivially_default_constructible); +static_assert(!asl::trivially_default_constructible); + +static_assert(asl::copy_constructible); +static_assert(asl::copy_constructible); +static_assert(asl::copy_constructible); +static_assert(!asl::copy_constructible); +static_assert(!asl::copy_constructible); + +static_assert(asl::trivially_copy_constructible); +static_assert(asl::trivially_copy_constructible); +static_assert(asl::trivially_copy_constructible); +static_assert(!asl::trivially_copy_constructible); +static_assert(!asl::trivially_copy_constructible); +static_assert(!asl::trivially_copy_constructible); +static_assert(!asl::trivially_copy_constructible); + +static_assert(asl::move_constructible); +static_assert(asl::move_constructible); +static_assert(asl::move_constructible); +static_assert(asl::move_constructible); +static_assert(!asl::move_constructible); + +static_assert(asl::trivially_move_constructible); +static_assert(asl::trivially_move_constructible); +static_assert(asl::trivially_move_constructible); +static_assert(!asl::trivially_move_constructible); +static_assert(!asl::trivially_move_constructible); +static_assert(!asl::trivially_move_constructible); +static_assert(!asl::trivially_move_constructible); + +static_assert(asl::copy_assignable); +static_assert(asl::copy_assignable); +static_assert(asl::copy_assignable); +static_assert(!asl::copy_assignable); +static_assert(!asl::copy_assignable); + +static_assert(asl::trivially_copy_assignable); +static_assert(asl::trivially_copy_assignable); +static_assert(asl::trivially_copy_assignable); +static_assert(asl::trivially_copy_assignable); +static_assert(!asl::trivially_copy_assignable); +static_assert(!asl::trivially_copy_assignable); +static_assert(!asl::trivially_copy_assignable); + +static_assert(asl::copyable); +static_assert(asl::copyable); +static_assert(asl::copyable); +static_assert(!asl::copyable); +static_assert(!asl::copyable); + +static_assert(asl::moveable); +static_assert(asl::moveable); +static_assert(asl::moveable); +static_assert(asl::moveable); +static_assert(!asl::moveable); + +static_assert(asl::move_assignable); +static_assert(asl::move_assignable); +static_assert(asl::move_assignable); +static_assert(asl::move_assignable); +static_assert(!asl::move_assignable); + +static_assert(asl::trivially_move_assignable); +static_assert(asl::trivially_move_assignable); +static_assert(asl::trivially_move_assignable); +static_assert(asl::trivially_move_assignable); +static_assert(!asl::trivially_move_assignable); +static_assert(!asl::trivially_move_assignable); +static_assert(!asl::trivially_move_assignable); + +static_assert(asl::trivially_destructible); +static_assert(asl::trivially_destructible); +static_assert(asl::trivially_destructible); +static_assert(!asl::trivially_destructible); +static_assert(asl::trivially_destructible); +static_assert(asl::trivially_destructible); +static_assert(asl::trivially_destructible); + +static_assert(asl::same_as>); +static_assert(asl::same_as>); +static_assert(asl::same_as>); + +static_assert(asl::same_as>); +static_assert(asl::same_as>); +static_assert(asl::same_as>); + +static_assert(asl::same_as>); +static_assert(asl::same_as>); +static_assert(asl::same_as>); +static_assert(asl::same_as>); + +static_assert(asl::is_void); +static_assert(asl::is_void); +static_assert(asl::is_void); +static_assert(asl::is_void); +static_assert(!asl::is_void); +static_assert(!asl::is_void); +static_assert(!asl::is_void); +static_assert(!asl::is_void); +static_assert(!asl::is_void); +static_assert(!asl::is_void); + +static_assert(asl::is_ref); +static_assert(asl::is_ref); +static_assert(asl::is_ref); +static_assert(asl::is_ref); +static_assert(!asl::is_ref); +static_assert(!asl::is_ref); +static_assert(!asl::is_ref); +static_assert(!asl::is_ref); + +static_assert(asl::is_ptr); +static_assert(asl::is_ptr); +static_assert(asl::is_ptr); +static_assert(!asl::is_ptr); +static_assert(!asl::is_ptr); +static_assert(!asl::is_ptr); +static_assert(!asl::is_ptr); + +static_assert(asl::same_as>); +static_assert(asl::same_as>); +static_assert(asl::same_as>); +static_assert(asl::same_as>); +static_assert(asl::same_as>); +static_assert(asl::same_as>); +static_assert(asl::same_as>); +static_assert(asl::same_as>); + +static_assert(asl::is_func); +static_assert(asl::is_func); +static_assert(asl::is_func); +static_assert(asl::is_func); +static_assert(asl::is_func); +static_assert(asl::is_func); +static_assert(!asl::is_func); +static_assert(!asl::is_func); +static_assert(!asl::is_func); +static_assert(!asl::is_func); + +static_assert(asl::is_object); +static_assert(asl::is_object); +static_assert(asl::is_object); +static_assert(asl::is_object); +static_assert(asl::is_object); +static_assert(asl::is_object); +static_assert(asl::is_object); +static_assert(asl::is_object); +static_assert(!asl::is_object); +static_assert(!asl::is_object); +static_assert(!asl::is_object); +static_assert(!asl::is_object); + +static_assert(!asl::is_array); +static_assert(!asl::is_array); +static_assert(!asl::is_array); +static_assert(!asl::is_array); +static_assert(!asl::is_array); +static_assert(asl::is_array); +static_assert(asl::is_array); +static_assert(!asl::is_array); +static_assert(!asl::is_array); +static_assert(!asl::is_array); +static_assert(!asl::is_array); +static_assert(!asl::is_array); + +static_assert(asl::same_as>); +static_assert(asl::same_as>); +static_assert(asl::same_as>); +static_assert(asl::same_as>); + +static_assert(asl::types_count == 2); +static_assert(asl::types_count == 2); +static_assert(asl::types_count == 1); +static_assert(asl::types_count<> == 0); + +class Base {}; +class Derived : public Base {}; +class C {}; +class D { public: operator C() { return c; } C c; }; // NOLINT +class E { public: template E(T&&) {} }; // NOLINT + +static_assert(asl::convertible_from); +static_assert(!asl::convertible_from); +static_assert(asl::convertible_from); +static_assert(!asl::convertible_from); +static_assert(asl::convertible_from); + +static_assert(!asl::convertible_from); +static_assert(asl::convertible_from); +static_assert(asl::convertible_from); +static_assert(asl::convertible_from); +static_assert(!asl::convertible_from); +static_assert(!asl::convertible_from); +static_assert(!asl::convertible_from); + +static_assert(asl::derived_from); +static_assert(!asl::derived_from); +static_assert(!asl::derived_from); +static_assert(!asl::derived_from); +static_assert(!asl::derived_from); +static_assert(!asl::derived_from); +static_assert(!asl::derived_from); + +static_assert(!asl::is_const); +static_assert(asl::is_const); +static_assert(!asl::is_const); +static_assert(asl::is_const); + +static_assert(asl::is_floating_point); +static_assert(asl::is_floating_point); +static_assert(asl::is_floating_point); +static_assert(!asl::is_floating_point); +static_assert(!asl::is_floating_point); +static_assert(!asl::is_floating_point); + +static_assert(asl::uniquely_represented); +static_assert(asl::uniquely_represented); +static_assert(!asl::uniquely_represented); + +enum Enum1 {}; +enum class Enum2 {}; + +static_assert(asl::uniquely_represented); +static_assert(asl::uniquely_represented); + +static_assert(!asl::is_enum); +static_assert(asl::is_enum); +static_assert(asl::is_enum); + +static_assert(asl::derefs_as); +static_assert(asl::derefs_as); +static_assert(asl::derefs_as); +static_assert(asl::derefs_as, int>); + +static_assert(asl::derefs_as); +static_assert(asl::derefs_as); +static_assert(asl::derefs_as); +static_assert(asl::derefs_as, Base>); + +static void wants_int(int) {} +static void wants_base(Base&) {} +static void wants_base_ptr(Base*) {} + +ASL_TEST(deref) +{ + int a = 4; + auto b = asl::make_box(5); + + wants_int(asl::deref(5)); + wants_int(asl::deref(a)); + wants_int(asl::deref(&a)); + wants_int(asl::deref(b)); + + Derived c{}; + auto d = asl::make_box(); + + wants_base(asl::deref(Derived{})); + wants_base(asl::deref(c)); + wants_base(asl::deref(&c)); + wants_base(asl::deref(d)); + + wants_base_ptr(&asl::deref(Derived{})); + wants_base_ptr(&asl::deref(c)); + wants_base_ptr(&asl::deref(&c)); + wants_base_ptr(&asl::deref(d)); +} + -- cgit