Skip to content

Commit 6bc98ca

Browse files
committed
Tests + fixes
1 parent c5c8a58 commit 6bc98ca

File tree

14 files changed

+227
-59
lines changed

14 files changed

+227
-59
lines changed

libcxx/include/optional

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1342,7 +1342,7 @@ template <
13421342
_LIBCPP_HIDE_FROM_ABI constexpr bool operator<=(const _Tp& __v, const optional<_Up>& __x)
13431343
# if _LIBCPP_STD_VER >= 26
13441344
requires(!__is_std_optional<_Tp>::value) && requires {
1345-
{ __v <= __x } -> __core_convertible_to<bool>;
1345+
{ __v <= *__x } -> __core_convertible_to<bool>;
13461346
}
13471347
# endif
13481348
{

libcxx/test/std/utilities/optional/optional.comp_with_t/equal.pass.cpp

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,30 @@
1414

1515
#include <optional>
1616

17+
#include "test_comparisons.h"
1718
#include "test_macros.h"
1819

20+
#if TEST_STD_VER >= 26
21+
22+
// Test SFINAE.
23+
24+
static_assert(HasOperatorEqual<int, std::optional<int>>);
25+
static_assert(HasOperatorEqual<int, std::optional<EqualityComparable>>);
26+
static_assert(HasOperatorEqual<EqualityComparable, std::optional<EqualityComparable>>);
27+
28+
static_assert(!HasOperatorEqual<NonComparable, std::optional<NonComparable>>);
29+
static_assert(!HasOperatorEqual<NonComparable, std::optional<EqualityComparable>>);
30+
31+
32+
static_assert(HasOperatorEqual<std::optional<int>, int>);
33+
static_assert(HasOperatorEqual<std::optional<EqualityComparable>, int>);
34+
static_assert(HasOperatorEqual<std::optional<EqualityComparable>, EqualityComparable>);
35+
36+
static_assert(!HasOperatorEqual<std::optional<NonComparable>,NonComparable>);
37+
static_assert(!HasOperatorEqual<std::optional<EqualityComparable>, NonComparable>);
38+
39+
#endif
40+
1941
using std::optional;
2042

2143
struct X {

libcxx/test/std/utilities/optional/optional.comp_with_t/greater.pass.cpp

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,28 @@
1414

1515
#include <optional>
1616

17+
#include "test_comparisons.h"
1718
#include "test_macros.h"
1819

20+
#if TEST_STD_VER >= 26
21+
22+
// Test SFINAE.
23+
static_assert(HasOperatorGreaterThan<std::optional<ThreeWayComparable>, int>);
24+
static_assert(HasOperatorGreaterThan<std::optional<ThreeWayComparable>, ThreeWayComparable>);
25+
26+
static_assert(!HasOperatorGreaterThan<std::optional<NonComparable>, NonComparable>);
27+
static_assert(!HasOperatorGreaterThan<std::optional<ThreeWayComparable>, NonComparable>);
28+
static_assert(!HasOperatorGreaterThan<std::optional<NonComparable>, ThreeWayComparable>);
29+
30+
static_assert(HasOperatorGreaterThan<int, std::optional<ThreeWayComparable>>);
31+
static_assert(HasOperatorGreaterThan<ThreeWayComparable, std::optional<ThreeWayComparable>>);
32+
33+
static_assert(!HasOperatorGreaterThan<NonComparable, std::optional<NonComparable>>);
34+
static_assert(!HasOperatorGreaterThan<NonComparable, std::optional<ThreeWayComparable>>);
35+
static_assert(!HasOperatorGreaterThan<ThreeWayComparable, std::optional<NonComparable>>);
36+
37+
#endif
38+
1939
using std::optional;
2040

2141
struct X {

libcxx/test/std/utilities/optional/optional.comp_with_t/greater_equal.pass.cpp

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,28 @@
1414

1515
#include <optional>
1616

17+
#include "test_comparisons.h"
1718
#include "test_macros.h"
1819

20+
#if TEST_STD_VER >= 26
21+
22+
// Test SFINAE.
23+
static_assert(HasOperatorGreaterThanEqual<std::optional<ThreeWayComparable>, int>);
24+
static_assert(HasOperatorGreaterThanEqual<std::optional<ThreeWayComparable>, ThreeWayComparable>);
25+
26+
static_assert(!HasOperatorGreaterThanEqual<std::optional<NonComparable>, NonComparable>);
27+
static_assert(!HasOperatorGreaterThanEqual<std::optional<ThreeWayComparable>, NonComparable>);
28+
static_assert(!HasOperatorGreaterThanEqual<std::optional<NonComparable>, ThreeWayComparable>);
29+
30+
static_assert(HasOperatorGreaterThanEqual<int, std::optional<ThreeWayComparable>>);
31+
static_assert(HasOperatorGreaterThanEqual<ThreeWayComparable, std::optional<ThreeWayComparable>>);
32+
33+
static_assert(!HasOperatorGreaterThanEqual<NonComparable, std::optional<NonComparable>>);
34+
static_assert(!HasOperatorGreaterThanEqual<NonComparable, std::optional<ThreeWayComparable>>);
35+
static_assert(!HasOperatorGreaterThanEqual<ThreeWayComparable, std::optional<NonComparable>>);
36+
37+
#endif
38+
1939
using std::optional;
2040

2141
struct X {

libcxx/test/std/utilities/optional/optional.comp_with_t/less_equal.pass.cpp

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,28 @@
1414

1515
#include <optional>
1616

17+
#include "test_comparisons.h"
1718
#include "test_macros.h"
1819

20+
#if TEST_STD_VER >= 26
21+
22+
// Test SFINAE.
23+
static_assert(HasOperatorLessThanEqual<std::optional<ThreeWayComparable>, int>);
24+
static_assert(HasOperatorLessThanEqual<std::optional<ThreeWayComparable>, ThreeWayComparable>);
25+
26+
static_assert(!HasOperatorLessThanEqual<std::optional<NonComparable>, NonComparable>);
27+
static_assert(!HasOperatorLessThanEqual<std::optional<ThreeWayComparable>, NonComparable>);
28+
static_assert(!HasOperatorLessThanEqual<std::optional<NonComparable>, ThreeWayComparable>);
29+
30+
static_assert(HasOperatorLessThanEqual<int, std::optional<ThreeWayComparable>>);
31+
static_assert(HasOperatorLessThanEqual<ThreeWayComparable, std::optional<ThreeWayComparable>>);
32+
33+
static_assert(!HasOperatorLessThanEqual<NonComparable, std::optional<NonComparable>>);
34+
static_assert(!HasOperatorLessThanEqual<NonComparable, std::optional<ThreeWayComparable>>);
35+
static_assert(!HasOperatorLessThanEqual<ThreeWayComparable, std::optional<NonComparable>>);
36+
37+
#endif
38+
1939
using std::optional;
2040

2141
struct X {

libcxx/test/std/utilities/optional/optional.comp_with_t/less_than.pass.cpp

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,28 @@
1414

1515
#include <optional>
1616

17+
#include "test_comparisons.h"
1718
#include "test_macros.h"
1819

20+
#if TEST_STD_VER >= 26
21+
22+
// Test SFINAE.
23+
static_assert(HasOperatorLessThan<std::optional<ThreeWayComparable>, int>);
24+
static_assert(HasOperatorLessThan<std::optional<ThreeWayComparable>, ThreeWayComparable>);
25+
26+
static_assert(!HasOperatorLessThan<std::optional<NonComparable>, NonComparable>);
27+
static_assert(!HasOperatorLessThan<std::optional<ThreeWayComparable>, NonComparable>);
28+
static_assert(!HasOperatorLessThan<std::optional<NonComparable>, ThreeWayComparable>);
29+
30+
static_assert(HasOperatorLessThan<int, std::optional<ThreeWayComparable>>);
31+
static_assert(HasOperatorLessThan<ThreeWayComparable, std::optional<ThreeWayComparable>>);
32+
33+
static_assert(!HasOperatorLessThan<NonComparable, std::optional<NonComparable>>);
34+
static_assert(!HasOperatorLessThan<NonComparable, std::optional<ThreeWayComparable>>);
35+
static_assert(!HasOperatorLessThan<ThreeWayComparable, std::optional<NonComparable>>);
36+
37+
#endif
38+
1939
using std::optional;
2040

2141
struct X {

libcxx/test/std/utilities/optional/optional.comp_with_t/not_equal.pass.cpp

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,30 @@
1414

1515
#include <optional>
1616

17+
#include "test_comparisons.h"
1718
#include "test_macros.h"
1819

20+
#if TEST_STD_VER >= 26
21+
22+
// Test SFINAE.
23+
24+
static_assert(HasOperatorNotEqual<int, std::optional<int>>);
25+
static_assert(HasOperatorNotEqual<int, std::optional<EqualityComparable>>);
26+
static_assert(HasOperatorNotEqual<EqualityComparable, std::optional<EqualityComparable>>);
27+
28+
static_assert(!HasOperatorNotEqual<NonComparable, std::optional<NonComparable>>);
29+
static_assert(!HasOperatorNotEqual<NonComparable, std::optional<EqualityComparable>>);
30+
31+
32+
static_assert(HasOperatorNotEqual<std::optional<int>, int>);
33+
static_assert(HasOperatorNotEqual<std::optional<EqualityComparable>, int>);
34+
static_assert(HasOperatorNotEqual<std::optional<EqualityComparable>, EqualityComparable>);
35+
36+
static_assert(!HasOperatorNotEqual<std::optional<NonComparable>,NonComparable>);
37+
static_assert(!HasOperatorNotEqual<std::optional<EqualityComparable>, NonComparable>);
38+
39+
#endif
40+
1941
using std::optional;
2042

2143
struct X {

libcxx/test/std/utilities/optional/optional.relops/equal.pass.cpp

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,21 @@
1515
#include <type_traits>
1616
#include <cassert>
1717

18-
#include "test_macros.h"
1918
#include "test_comparisons.h"
19+
#include "test_macros.h"
20+
21+
#if TEST_STD_VER >= 26
2022

2123
// Test SFINAE.
2224

23-
static_assert(HasOperatorEqual<std::optional<int>, std::optional<int>>);
24-
static_assert(HasOperatorEqual<std::optional<EqualityComparable>, std::optional<EqualityComparable>>);
25+
static_assert(HasOperatorEqual<std::optional<int>>);
26+
static_assert(HasOperatorEqual<std::optional<EqualityComparable>>);
27+
static_assert(HasOperatorEqual<std::optional<EqualityComparable>, std::optional<int>>);
28+
29+
static_assert(!HasOperatorEqual<std::optional<NonComparable>>);
30+
static_assert(!HasOperatorEqual<std::optional<EqualityComparable>, std::optional<NonComparable>>);
31+
32+
#endif
2533

2634
using std::optional;
2735

libcxx/test/std/utilities/optional/optional.relops/greater_equal.pass.cpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,21 @@
1313

1414
#include <optional>
1515

16+
#include "test_comparisons.h"
1617
#include "test_macros.h"
1718

19+
#if TEST_STD_VER >= 26
20+
21+
// Test SFINAE.
22+
static_assert(HasOperatorGreaterThanEqual<std::optional<ThreeWayComparable>>);
23+
static_assert(HasOperatorGreaterThanEqual<std::optional<ThreeWayComparable>, std::optional<int>>);
24+
25+
static_assert(!HasOperatorGreaterThanEqual<std::optional<NonComparable>>);
26+
static_assert(!HasOperatorGreaterThanEqual<std::optional<EqualityComparable>>);
27+
static_assert(!HasOperatorGreaterThanEqual<std::optional<ThreeWayComparable>, std::optional<NonComparable>>);
28+
29+
#endif
30+
1831
using std::optional;
1932

2033
struct X {

libcxx/test/std/utilities/optional/optional.relops/greater_than.pass.cpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,21 @@
1313

1414
#include <optional>
1515

16+
#include "test_comparisons.h"
1617
#include "test_macros.h"
1718

19+
#if TEST_STD_VER >= 26
20+
21+
// Test SFINAE.
22+
static_assert(HasOperatorGreaterThan<std::optional<ThreeWayComparable>>);
23+
static_assert(HasOperatorGreaterThan<std::optional<ThreeWayComparable>, std::optional<int>>);
24+
25+
static_assert(!HasOperatorGreaterThan<std::optional<NonComparable>>);
26+
static_assert(!HasOperatorGreaterThan<std::optional<EqualityComparable>>);
27+
static_assert(!HasOperatorGreaterThan<std::optional<ThreeWayComparable>, std::optional<NonComparable>>);
28+
29+
#endif
30+
1831
using std::optional;
1932

2033
struct X {

libcxx/test/std/utilities/optional/optional.relops/less_equal.pass.cpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,21 @@
1313

1414
#include <optional>
1515

16+
#include "test_comparisons.h"
1617
#include "test_macros.h"
1718

19+
#if TEST_STD_VER >= 26
20+
21+
// Test SFINAE.
22+
static_assert(HasOperatorLessThanEqual<std::optional<ThreeWayComparable>>);
23+
static_assert(HasOperatorLessThanEqual<std::optional<ThreeWayComparable>, std::optional<int>>);
24+
25+
static_assert(!HasOperatorLessThanEqual<std::optional<NonComparable>>);
26+
static_assert(!HasOperatorLessThanEqual<std::optional<EqualityComparable>>);
27+
static_assert(!HasOperatorLessThanEqual<std::optional<ThreeWayComparable>, std::optional<NonComparable>>);
28+
29+
#endif
30+
1831
using std::optional;
1932

2033
struct X {

libcxx/test/std/utilities/optional/optional.relops/less_than.pass.cpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,21 @@
1313

1414
#include <optional>
1515

16+
#include "test_comparisons.h"
1617
#include "test_macros.h"
1718

19+
#if TEST_STD_VER >= 26
20+
21+
// Test SFINAE.
22+
static_assert(HasOperatorLessThan<std::optional<ThreeWayComparable>>);
23+
static_assert(HasOperatorLessThan<std::optional<ThreeWayComparable>, std::optional<int>>);
24+
25+
static_assert(!HasOperatorLessThan<std::optional<NonComparable>>);
26+
static_assert(!HasOperatorLessThan<std::optional<EqualityComparable>>);
27+
static_assert(!HasOperatorLessThan<std::optional<ThreeWayComparable>, std::optional<NonComparable>>);
28+
29+
#endif
30+
1831
using std::optional;
1932

2033
struct X {

libcxx/test/std/utilities/optional/optional.relops/not_equal.pass.cpp

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,23 @@
1515
#include <type_traits>
1616
#include <cassert>
1717

18+
#include "test_comparisons.h"
1819
#include "test_macros.h"
1920

21+
#if TEST_STD_VER >= 26
22+
23+
// Test SFINAE.
24+
25+
static_assert(HasOperatorNotEqual<std::optional<int>>);
26+
static_assert(HasOperatorNotEqual<std::optional<EqualityComparable>>);
27+
static_assert(HasOperatorNotEqual<std::optional<EqualityComparable>, std::optional<int>>);
28+
29+
static_assert(!HasOperatorNotEqual<std::optional<NonComparable>>);
30+
static_assert(!HasOperatorNotEqual<std::optional<EqualityComparable>, std::optional<NonComparable>>);
31+
32+
#endif
33+
34+
2035
using std::optional;
2136

2237
struct X {

0 commit comments

Comments
 (0)