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