summaryrefslogtreecommitdiff
path: root/libstdc++-v3/testsuite/20_util/unique_ptr/comparison/constexpr.cc
diff options
context:
space:
mode:
Diffstat (limited to 'libstdc++-v3/testsuite/20_util/unique_ptr/comparison/constexpr.cc')
-rw-r--r--libstdc++-v3/testsuite/20_util/unique_ptr/comparison/constexpr.cc73
1 files changed, 73 insertions, 0 deletions
diff --git a/libstdc++-v3/testsuite/20_util/unique_ptr/comparison/constexpr.cc b/libstdc++-v3/testsuite/20_util/unique_ptr/comparison/constexpr.cc
new file mode 100644
index 00000000000..83e4f0826a8
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/unique_ptr/comparison/constexpr.cc
@@ -0,0 +1,73 @@
+// { dg-options "-std=gnu++23" }
+// { dg-do compile { target c++23 } }
+
+#include <memory>
+#include <testsuite_hooks.h>
+
+constexpr bool
+test_eq()
+{
+ std::unique_ptr<int> p1, p2;
+ VERIFY( p1 == p2 );
+ p1.reset(new int(1));
+ VERIFY( p1 == p1 );
+ VERIFY( p1 != p2 );
+ struct null_deleter { constexpr void operator()(const void*) const { } };
+ std::unique_ptr<const int[], null_deleter> p3(p1.get());
+ VERIFY( p3 == p3 );
+ VERIFY( p1 == p3 );
+ VERIFY( p3 != p2 );
+
+ return true;
+}
+static_assert( test_eq() );
+
+constexpr bool
+test_rel()
+{
+ std::unique_ptr<int> p1, p2;
+ VERIFY( !(p1 < p2) );
+ VERIFY( !(p1 > p2) );
+ VERIFY( p1 <= p2 );
+ VERIFY( p1 >= p2 );
+ p1.reset(new int(1));
+ VERIFY( p1 <= p1 );
+ VERIFY( p1 >= p1 );
+ VERIFY( p1 > p2 );
+ VERIFY( p2 < p1 );
+ VERIFY( p2 <= p1 );
+ VERIFY( p1 >= p2 );
+ struct null_deleter { constexpr void operator()(const void*) const { } };
+ std::unique_ptr<const int[], null_deleter> p3(p1.get());
+ VERIFY( p3 <= p3 );
+ VERIFY( p3 >= p3 );
+ VERIFY( p1 <= p3 );
+ VERIFY( p3 > p2 );
+ VERIFY( p3 >= p2 );
+ VERIFY( p2 < p3 );
+ VERIFY( p2 <= p3 );
+
+ return true;
+}
+static_assert( test_rel() );
+
+constexpr bool
+test_3way()
+{
+ std::unique_ptr<int> p1, p2;
+ VERIFY( (p1 <=> p1) == 0 );
+ VERIFY( (p1 <=> p2) == 0 );
+ p1.reset(new int(1));
+ VERIFY( (p1 <=> p1) == 0 );
+ VERIFY( (p1 <=> p2) > 0 );
+ VERIFY( (p2 <=> p1) < 0 );
+ struct null_deleter { constexpr void operator()(const void*) const { } };
+ std::unique_ptr<const int[], null_deleter> p3(p1.get());
+ VERIFY( (p3 <=> p3) == 0 );
+ VERIFY( (p1 <=> p3) == 0 );
+ VERIFY( (p3 <=> p2) > 0 );
+ VERIFY( (p2 <=> p3) < 0 );
+
+ return true;
+}
+static_assert( test_3way() );