Mercurial > hg > CbC > CbC_llvm
comparison libc/test/ErrnoSetterMatcher.h @ 207:2e18cbf3894f
LLVM12
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 08 Jun 2021 06:07:14 +0900 |
parents | |
children | c4bab56944e8 |
comparison
equal
deleted
inserted
replaced
173:0572611fdcc8 | 207:2e18cbf3894f |
---|---|
1 //===-- ErrnoSetterMatcher.h ------------------------------------*- C++ -*-===// | |
2 // | |
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. | |
4 // See https://llvm.org/LICENSE.txt for license information. | |
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | |
6 // | |
7 //===----------------------------------------------------------------------===// | |
8 | |
9 #ifndef LLVM_LIBC_TEST_ERRNOSETTERMATCHER_H | |
10 #define LLVM_LIBC_TEST_ERRNOSETTERMATCHER_H | |
11 | |
12 #include "src/errno/llvmlibc_errno.h" | |
13 #include "utils/UnitTest/Test.h" | |
14 | |
15 namespace __llvm_libc { | |
16 namespace testing { | |
17 | |
18 namespace internal { | |
19 | |
20 extern "C" const char *strerror(int); | |
21 | |
22 template <typename T> class ErrnoSetterMatcher : public Matcher<T> { | |
23 T ExpectedReturn; | |
24 T ActualReturn; | |
25 int ExpectedErrno; | |
26 int ActualErrno; | |
27 | |
28 public: | |
29 ErrnoSetterMatcher(T ExpectedReturn, int ExpectedErrno) | |
30 : ExpectedReturn(ExpectedReturn), ExpectedErrno(ExpectedErrno) {} | |
31 | |
32 void explainError(testutils::StreamWrapper &OS) override { | |
33 if (ActualReturn != ExpectedReturn) | |
34 OS << "Expected return to be " << ExpectedReturn << " but got " | |
35 << ActualReturn << ".\nExpecte errno to be " << strerror(ExpectedErrno) | |
36 << " but got " << strerror(ActualErrno) << ".\n"; | |
37 else | |
38 OS << "Correct value " << ExpectedReturn | |
39 << " was returned\nBut errno was unexpectely set to " | |
40 << strerror(ActualErrno) << ".\n"; | |
41 } | |
42 | |
43 bool match(T Got) { | |
44 ActualReturn = Got; | |
45 ActualErrno = llvmlibc_errno; | |
46 llvmlibc_errno = 0; | |
47 return Got == ExpectedReturn && ActualErrno == ExpectedErrno; | |
48 } | |
49 }; | |
50 | |
51 } // namespace internal | |
52 | |
53 namespace ErrnoSetterMatcher { | |
54 | |
55 template <typename RetT = int> | |
56 static internal::ErrnoSetterMatcher<RetT> Succeeds(RetT ExpectedReturn = 0, | |
57 int ExpectedErrno = 0) { | |
58 return {ExpectedReturn, ExpectedErrno}; | |
59 } | |
60 | |
61 template <typename RetT = int> | |
62 static internal::ErrnoSetterMatcher<RetT> Fails(int ExpectedErrno, | |
63 RetT ExpectedReturn = -1) { | |
64 return {ExpectedReturn, ExpectedErrno}; | |
65 } | |
66 | |
67 } // namespace ErrnoSetterMatcher | |
68 | |
69 } // namespace testing | |
70 } // namespace __llvm_libc | |
71 | |
72 #endif // LLVM_LIBC_TEST_ERRNOSETTERMATCHER_H |