// 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(__has_include) # if __has_include() # define HAS_COMPARE # endif #endif #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() {} #elif !defined(HAS_COMPARE) BOOST_PRAGMA_MESSAGE( "Test skipped because is not available" ) int main() {} #else template void test() { constexpr auto eq = 0 <=> 0; constexpr auto lt = 0 <=> 1; constexpr auto gt = 1 <=> 0; { boost::array const a1 = {}; boost::array const a2 = {}; BOOST_TEST( ( a1 <=> a2 ) == eq ); } { boost::array a1; boost::array a2; a1.fill( 1 ); a2.fill( 1 ); BOOST_TEST( ( a1 <=> a2 ) == eq ); } for( std::size_t i = 0; i < N; ++i ) { boost::array a1; boost::array a2; a1.fill( 1 ); a2.fill( 1 ); a1[ i ] = 0; BOOST_TEST( ( a1 <=> a2 ) == lt ); { boost::array const a3 = a1; boost::array const a4 = a2; BOOST_TEST( ( a3 <=> a4 ) == lt ); } a1[ i ] = 2; BOOST_TEST( ( a1 <=> a2 ) == gt ); { boost::array const a3 = a1; boost::array const a4 = a2; BOOST_TEST( ( a3 <=> a4 ) == gt ); } } } int main() { test(); test(); test(); test(); test(); test(); return boost::report_errors(); } #endif