summaryrefslogtreecommitdiff
path: root/asl/tests/meta_tests.cpp
diff options
context:
space:
mode:
authorSteven Le Rouzic <steven.lerouzic@gmail.com>2025-02-04 00:37:08 +0100
committerSteven Le Rouzic <steven.lerouzic@gmail.com>2025-02-04 00:37:08 +0100
commit3d5a45b283d2a59211f9e24f100b95169375213d (patch)
tree2180c31100324076f7ff862009190564c0296b58 /asl/tests/meta_tests.cpp
parentf2b1af8d3f23ff47b343cef8feef6e25ff5377e4 (diff)
Add deref utilities & use them for log writer
Diffstat (limited to 'asl/tests/meta_tests.cpp')
-rw-r--r--asl/tests/meta_tests.cpp40
1 files changed, 40 insertions, 0 deletions
diff --git a/asl/tests/meta_tests.cpp b/asl/tests/meta_tests.cpp
index f01258a..5026327 100644
--- a/asl/tests/meta_tests.cpp
+++ b/asl/tests/meta_tests.cpp
@@ -1,5 +1,7 @@
#include "asl/meta.hpp"
#include "asl/tests/test_types.hpp"
+#include "asl/testing/testing.hpp"
+#include "asl/box.hpp"
struct Struct {};
union Union {};
@@ -247,3 +249,41 @@ static_assert(!asl::is_enum<int>);
static_assert(asl::is_enum<Enum1>);
static_assert(asl::is_enum<Enum2>);
+static_assert(asl::derefs_as<int, int>);
+static_assert(asl::derefs_as<int*, int>);
+static_assert(asl::derefs_as<int&, int>);
+static_assert(asl::derefs_as<asl::box<int>, int>);
+
+static_assert(asl::derefs_as<Derived, Base>);
+static_assert(asl::derefs_as<Derived*, Base>);
+static_assert(asl::derefs_as<Derived&, Base>);
+static_assert(asl::derefs_as<asl::box<Derived>, 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<int>(5);
+
+ wants_int(asl::deref<int>(5));
+ wants_int(asl::deref<int>(a));
+ wants_int(asl::deref<int>(&a));
+ wants_int(asl::deref<int>(b));
+
+ Derived c{};
+ auto d = asl::make_box<Derived>();
+
+ wants_base(asl::deref<Base>(Derived{}));
+ wants_base(asl::deref<Base>(c));
+ wants_base(asl::deref<Base>(&c));
+ wants_base(asl::deref<Base>(d));
+
+ wants_base_ptr(&asl::deref<Base>(Derived{}));
+ wants_base_ptr(&asl::deref<Base>(c));
+ wants_base_ptr(&asl::deref<Base>(&c));
+ wants_base_ptr(&asl::deref<Base>(d));
+}
+