xref: /llvm-project/libcxx/test/std/diagnostics/syserr/syserr.compare/cmp_error_condition.pass.cpp (revision 877620bd961851d1ce6891db591b193b85796027)
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