1*877620bdSAdrian Vogelsgesang //===----------------------------------------------------------------------===//
2*877620bdSAdrian Vogelsgesang //
3*877620bdSAdrian Vogelsgesang // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*877620bdSAdrian Vogelsgesang // See https://llvm.org/LICENSE.txt for license information.
5*877620bdSAdrian Vogelsgesang // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*877620bdSAdrian Vogelsgesang //
7*877620bdSAdrian Vogelsgesang //===----------------------------------------------------------------------===//
8*877620bdSAdrian Vogelsgesang // UNSUPPORTED: c++03, c++11, c++14, c++17
9*877620bdSAdrian Vogelsgesang
10*877620bdSAdrian Vogelsgesang // <system_error>
11*877620bdSAdrian Vogelsgesang
12*877620bdSAdrian Vogelsgesang // class error_condition
13*877620bdSAdrian Vogelsgesang
14*877620bdSAdrian Vogelsgesang // strong_ordering operator<=>(const error_condition& lhs, const error_condition& rhs) noexcept
15*877620bdSAdrian Vogelsgesang
16*877620bdSAdrian Vogelsgesang #include <system_error>
17*877620bdSAdrian Vogelsgesang #include <cassert>
18*877620bdSAdrian Vogelsgesang
19*877620bdSAdrian Vogelsgesang #include "test_macros.h"
20*877620bdSAdrian Vogelsgesang #include "test_comparisons.h"
21*877620bdSAdrian Vogelsgesang
main(int,char **)22*877620bdSAdrian Vogelsgesang int main(int, char**) {
23*877620bdSAdrian Vogelsgesang AssertOrderAreNoexcept<std::error_condition>();
24*877620bdSAdrian Vogelsgesang AssertOrderReturn<std::strong_ordering, std::error_condition>();
25*877620bdSAdrian Vogelsgesang
26*877620bdSAdrian Vogelsgesang // Same error category
27*877620bdSAdrian Vogelsgesang std::error_condition ec1a = std::error_condition(1, std::generic_category());
28*877620bdSAdrian Vogelsgesang std::error_condition ec1b = std::error_condition(1, std::generic_category());
29*877620bdSAdrian Vogelsgesang std::error_condition ec2 = std::error_condition(2, std::generic_category());
30*877620bdSAdrian Vogelsgesang
31*877620bdSAdrian Vogelsgesang assert(testOrder(ec1a, ec1b, std::strong_ordering::equal));
32*877620bdSAdrian Vogelsgesang assert(testOrder(ec1a, ec2, std::strong_ordering::less));
33*877620bdSAdrian Vogelsgesang
34*877620bdSAdrian Vogelsgesang // Different error category
35*877620bdSAdrian Vogelsgesang const std::error_condition& ec3 = std::error_condition(2, std::system_category());
36*877620bdSAdrian Vogelsgesang
37*877620bdSAdrian Vogelsgesang bool isLess = ec2 < ec3;
38*877620bdSAdrian Vogelsgesang assert(testOrder(ec2, ec3, isLess ? std::strong_ordering::less : std::strong_ordering::greater));
39*877620bdSAdrian Vogelsgesang
40*877620bdSAdrian Vogelsgesang return 0;
41*877620bdSAdrian Vogelsgesang }
42