Skip to content

Commit 8883d44

Browse files
H-G-HristovZingamphilnik777
authored andcommitted
[libc++][NFC] Refactored equality comparisons tests for pair and expected (llvm#145668)
Refactored `std::expected` and `std::pair` tests to use the canonicalized names from `test_comparisions.h`, which are shared between tests. This was split from llvm#139368 as per comment llvm#139368 (review) Towards implementing [P2944R3: Comparisons for reference_wrapper](llvm#105424) --------- Co-authored-by: Hristo Hristov <zingam@outlook.com> Co-authored-by: Nikolas Klauser <nikolasklauser@berlin.de>
1 parent 146c414 commit 8883d44

File tree

7 files changed

+35
-61
lines changed

7 files changed

+35
-61
lines changed

libcxx/test/std/utilities/expected/expected.expected/equality/equality.T2.pass.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,14 @@
1616
#include <type_traits>
1717
#include <utility>
1818

19+
#include "test_comparisons.h"
1920
#include "test_macros.h"
20-
#include "../../types.h"
2121

2222
#if TEST_STD_VER >= 26
2323
// https://wg21.link/P3379R0
24-
static_assert(CanCompare<std::expected<int, int>, int>);
25-
static_assert(CanCompare<std::expected<int, int>, EqualityComparable>);
26-
static_assert(!CanCompare<std::expected<int, int>, NonComparable>);
24+
static_assert(HasOperatorEqual<std::expected<int, int>, int>);
25+
static_assert(HasOperatorEqual<std::expected<int, int>, EqualityComparable>);
26+
static_assert(!HasOperatorEqual<std::expected<int, int>, NonComparable>);
2727
#endif
2828

2929
constexpr bool test() {

libcxx/test/std/utilities/expected/expected.expected/equality/equality.other_expected.pass.cpp

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -17,26 +17,26 @@
1717
#include <type_traits>
1818
#include <utility>
1919

20+
#include "test_comparisons.h"
2021
#include "test_macros.h"
21-
#include "../../types.h"
2222

2323
// Test constraint
24-
static_assert(!CanCompare<NonComparable, NonComparable>);
24+
static_assert(!HasOperatorEqual<NonComparable, NonComparable>);
2525

26-
static_assert(CanCompare<std::expected<int, int>, std::expected<int, int>>);
27-
static_assert(CanCompare<std::expected<int, int>, std::expected<short, short>>);
26+
static_assert(HasOperatorEqual<std::expected<int, int>, std::expected<int, int>>);
27+
static_assert(HasOperatorEqual<std::expected<int, int>, std::expected<short, short>>);
2828

2929
#if TEST_STD_VER >= 26
3030
// https://wg21.link/P3379R0
31-
static_assert(!CanCompare<std::expected<int, int>, std::expected<void, int>>);
32-
static_assert(CanCompare<std::expected<int, int>, std::expected<int, int>>);
33-
static_assert(!CanCompare<std::expected<NonComparable, int>, std::expected<NonComparable, int>>);
34-
static_assert(!CanCompare<std::expected<int, NonComparable>, std::expected<int, NonComparable>>);
35-
static_assert(!CanCompare<std::expected<NonComparable, int>, std::expected<int, NonComparable>>);
36-
static_assert(!CanCompare<std::expected<int, NonComparable>, std::expected<NonComparable, int>>);
31+
static_assert(!HasOperatorEqual<std::expected<int, int>, std::expected<void, int>>);
32+
static_assert(HasOperatorEqual<std::expected<int, int>, std::expected<int, int>>);
33+
static_assert(!HasOperatorEqual<std::expected<NonComparable, int>, std::expected<NonComparable, int>>);
34+
static_assert(!HasOperatorEqual<std::expected<int, NonComparable>, std::expected<int, NonComparable>>);
35+
static_assert(!HasOperatorEqual<std::expected<NonComparable, int>, std::expected<int, NonComparable>>);
36+
static_assert(!HasOperatorEqual<std::expected<int, NonComparable>, std::expected<NonComparable, int>>);
3737
#else
3838
// Note this is true because other overloads in expected<non-void> are unconstrained
39-
static_assert(CanCompare<std::expected<void, int>, std::expected<int, int>>);
39+
static_assert(HasOperatorEqual<std::expected<void, int>, std::expected<int, int>>);
4040
#endif
4141
constexpr bool test() {
4242
// x.has_value() && y.has_value()

libcxx/test/std/utilities/expected/expected.expected/equality/equality.unexpected.pass.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,14 @@
1616
#include <type_traits>
1717
#include <utility>
1818

19+
#include "test_comparisons.h"
1920
#include "test_macros.h"
20-
#include "../../types.h"
2121

2222
#if TEST_STD_VER >= 26
2323
// https://wg21.link/P3379R0
24-
static_assert(CanCompare<std::expected<EqualityComparable, EqualityComparable>, std::unexpected<int>>);
25-
static_assert(CanCompare<std::expected<EqualityComparable, int>, std::unexpected<EqualityComparable>>);
26-
static_assert(!CanCompare<std::expected<EqualityComparable, NonComparable>, std::unexpected<int>>);
24+
static_assert(HasOperatorEqual<std::expected<EqualityComparable, EqualityComparable>, std::unexpected<int>>);
25+
static_assert(HasOperatorEqual<std::expected<EqualityComparable, int>, std::unexpected<EqualityComparable>>);
26+
static_assert(!HasOperatorEqual<std::expected<EqualityComparable, NonComparable>, std::unexpected<int>>);
2727
#endif
2828

2929
constexpr bool test() {

libcxx/test/std/utilities/expected/expected.void/equality/equality.other_expected.pass.cpp

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -17,26 +17,26 @@
1717
#include <type_traits>
1818
#include <utility>
1919

20+
#include "test_comparisons.h"
2021
#include "test_macros.h"
21-
#include "../../types.h"
2222

2323
struct Foo{};
24-
static_assert(!CanCompare<Foo, Foo>);
24+
static_assert(!HasOperatorEqual<Foo, Foo>);
2525

26-
static_assert(CanCompare<std::expected<void, int>, std::expected<void, int>>);
27-
static_assert(CanCompare<std::expected<void, int>, std::expected<void, short>>);
26+
static_assert(HasOperatorEqual<std::expected<void, int>, std::expected<void, int>>);
27+
static_assert(HasOperatorEqual<std::expected<void, int>, std::expected<void, short>>);
2828

2929
#if TEST_STD_VER >= 26
3030
// https://wg21.link/P3379R0
31-
static_assert(!CanCompare<std::expected<void, int>, std::expected<int, int>>);
32-
static_assert(CanCompare<std::expected<void, int>, std::expected<void, int>>);
33-
static_assert(CanCompare<std::expected<void, int>, std::expected<void, int>>);
34-
static_assert(!CanCompare<std::expected<void, NonComparable>, std::expected<void, NonComparable>>);
35-
static_assert(!CanCompare<std::expected<void, int>, std::expected<void, NonComparable>>);
36-
static_assert(!CanCompare<std::expected<void, NonComparable>, std::expected<void, int>>);
31+
static_assert(!HasOperatorEqual<std::expected<void, int>, std::expected<int, int>>);
32+
static_assert(HasOperatorEqual<std::expected<void, int>, std::expected<void, int>>);
33+
static_assert(HasOperatorEqual<std::expected<void, int>, std::expected<void, int>>);
34+
static_assert(!HasOperatorEqual<std::expected<void, NonComparable>, std::expected<void, NonComparable>>);
35+
static_assert(!HasOperatorEqual<std::expected<void, int>, std::expected<void, NonComparable>>);
36+
static_assert(!HasOperatorEqual<std::expected<void, NonComparable>, std::expected<void, int>>);
3737
#else
3838
// Note this is true because other overloads in expected<non-void> are unconstrained
39-
static_assert(CanCompare<std::expected<void, int>, std::expected<int, int>>);
39+
static_assert(HasOperatorEqual<std::expected<void, int>, std::expected<int, int>>);
4040
#endif
4141

4242
constexpr bool test() {

libcxx/test/std/utilities/expected/expected.void/equality/equality.unexpected.pass.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,14 @@
1616
#include <type_traits>
1717
#include <utility>
1818

19+
#include "test_comparisons.h"
1920
#include "test_macros.h"
20-
#include "../../types.h"
2121

2222
#if TEST_STD_VER >= 26
2323
// https://wg21.link/P3379R0
24-
static_assert(CanCompare<std::expected<void, EqualityComparable>, std::unexpected<int>>);
25-
static_assert(CanCompare<std::expected<void, int>, std::unexpected<EqualityComparable>>);
26-
static_assert(!CanCompare<std::expected<void, NonComparable>, std::unexpected<int>>);
24+
static_assert(HasOperatorEqual<std::expected<void, EqualityComparable>, std::unexpected<int>>);
25+
static_assert(HasOperatorEqual<std::expected<void, int>, std::unexpected<EqualityComparable>>);
26+
static_assert(!HasOperatorEqual<std::expected<void, NonComparable>, std::unexpected<int>>);
2727
#endif
2828

2929
constexpr bool test() {

libcxx/test/std/utilities/expected/types.h

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -336,17 +336,4 @@ struct CheckForInvalidWrites : public CheckForInvalidWritesBase<WithPaddedExpect
336336
}
337337
};
338338

339-
struct NonComparable {};
340-
341-
struct EqualityComparable {
342-
int i;
343-
constexpr EqualityComparable(int ii) : i(ii) {}
344-
345-
friend constexpr bool operator==(const EqualityComparable& data, int ii) { return data.i == ii; }
346-
};
347-
348-
// Test constraint
349-
template <class T1, class T2>
350-
concept CanCompare = requires(T1 t1, T2 t2) { t1 == t2; };
351-
352339
#endif // TEST_STD_UTILITIES_EXPECTED_TYPES_H

libcxx/test/std/utilities/utility/pairs/pairs.spec/comparison.pass.cpp

Lines changed: 1 addition & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -21,28 +21,15 @@
2121
#include <cassert>
2222
#include <concepts>
2323

24+
#include "test_comparisons.h"
2425
#include "test_macros.h"
2526

2627
#if TEST_STD_VER >= 26
2728

2829
// Test SFINAE.
2930

30-
struct EqualityComparable {
31-
constexpr EqualityComparable(int value) : value_{value} {};
32-
33-
friend constexpr bool operator==(const EqualityComparable&, const EqualityComparable&) noexcept = default;
34-
35-
int value_;
36-
};
37-
38-
static_assert(std::equality_comparable<EqualityComparable>);
39-
4031
static_assert(std::equality_comparable<std::pair<EqualityComparable, EqualityComparable>>);
4132

42-
struct NonComparable {};
43-
44-
static_assert(!std::equality_comparable<NonComparable>);
45-
4633
static_assert(!std::equality_comparable<std::pair<EqualityComparable, NonComparable>>);
4734
static_assert(!std::equality_comparable<std::pair<NonComparable, EqualityComparable>>);
4835

0 commit comments

Comments
 (0)