From 45de3be80c3edd7ce26202210d1d24206b2ff072 Mon Sep 17 00:00:00 2001 From: Peter Dimov Date: Mon, 27 Jan 2025 04:03:06 +0200 Subject: [PATCH] Add array_thw_test_cx.cpp --- test/Jamfile.v2 | 1 + test/array_thw_test_cx.cpp | 70 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 71 insertions(+) create mode 100644 test/array_thw_test_cx.cpp diff --git a/test/Jamfile.v2 b/test/Jamfile.v2 index d88ec6b..eec7d63 100644 --- a/test/Jamfile.v2 +++ b/test/Jamfile.v2 @@ -65,6 +65,7 @@ compile array_access_test_cx2.cpp ; compile array_fill_test_cx.cpp ; compile array_eq_test_cx.cpp ; compile array_lt_test_cx.cpp ; +compile array_thw_test_cx.cpp ; # diff --git a/test/array_thw_test_cx.cpp b/test/array_thw_test_cx.cpp new file mode 100644 index 0000000..6b50938 --- /dev/null +++ b/test/array_thw_test_cx.cpp @@ -0,0 +1,70 @@ +// Copyright 2025 Peter Dimov +// Distributed under the Boost Software License, Version 1.0. +// https://www.boost.org/LICENSE_1_0.txt) + +#include +#include +#include +#include +#include + +#if !defined(__cpp_impl_three_way_comparison) + +BOOST_PRAGMA_MESSAGE( "Test skipped because __cpp_impl_three_way_comparison is not defined" ) +int main() {} + +#elif !( __cpp_impl_three_way_comparison >= 201907L ) + +BOOST_PRAGMA_MESSAGE( "Test skipped because __cpp_impl_three_way_comparison is defined to " BOOST_STRINGIZE(__cpp_impl_three_way_comparison) ) +int main() {} + +#else + +#define STATIC_ASSERT(...) static_assert(__VA_ARGS__, #__VA_ARGS__) + +template void test1() +{ + constexpr auto eq = 0 <=> 0; + + constexpr boost::array a1 = {}; + constexpr boost::array a2 = {}; + + STATIC_ASSERT( ( a1 <=> a2 ) == eq ); +} + +template void test2() +{ + constexpr auto eq = 0 <=> 0; + constexpr auto lt = 0 <=> 1; + constexpr auto gt = 1 <=> 0; + + { + constexpr boost::array a1 = {{ 1, 2, 3, 4 }}; + constexpr boost::array a2 = {{ 1, 2, 3, 4 }}; + + STATIC_ASSERT( ( a1 <=> a2 ) == eq ); + } + { + constexpr boost::array a1 = {{ 1, 2, 3, 4 }}; + constexpr boost::array a2 = {{ 1, 2, 3, 5 }}; + + STATIC_ASSERT( ( a1 <=> a2 ) == lt ); + } + { + constexpr boost::array a1 = {{ 1, 2, 3, 4 }}; + constexpr boost::array a2 = {{ 1, 2, 3, 2 }}; + + STATIC_ASSERT( ( a1 <=> a2 ) == gt ); + } +} + +int main() +{ + test1(); + test1(); + test1(); + + test2(); +} + +#endif