llvm-project/libc/test/ErrnoSetterMatcher.h
Siva Chandra Reddy 134e9d1914 [libc][NFC] Move sys/mman entrypoints to the default build configs.
Specifically, mmap and munmap have been moved to the default build list
of entrypoints. To support this, certain deps and includes have been
adjusted. The use of errno in some cases has been updated.
2022-01-11 16:51:10 +00:00

74 lines
2.1 KiB
C++

//===-- ErrnoSetterMatcher.h ------------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
#ifndef LLVM_LIBC_TEST_ERRNOSETTERMATCHER_H
#define LLVM_LIBC_TEST_ERRNOSETTERMATCHER_H
#include "utils/UnitTest/Test.h"
#include <errno.h>
namespace __llvm_libc {
namespace testing {
namespace internal {
extern "C" const char *strerror(int);
template <typename T> class ErrnoSetterMatcher : public Matcher<T> {
T ExpectedReturn;
T ActualReturn;
int ExpectedErrno;
int ActualErrno;
public:
ErrnoSetterMatcher(T ExpectedReturn, int ExpectedErrno)
: ExpectedReturn(ExpectedReturn), ExpectedErrno(ExpectedErrno) {}
void explainError(testutils::StreamWrapper &OS) override {
if (ActualReturn != ExpectedReturn)
OS << "Expected return to be " << ExpectedReturn << " but got "
<< ActualReturn << ".\nExpecte errno to be " << strerror(ExpectedErrno)
<< " but got " << strerror(ActualErrno) << ".\n";
else
OS << "Correct value " << ExpectedReturn
<< " was returned\nBut errno was unexpectely set to "
<< strerror(ActualErrno) << ".\n";
}
bool match(T Got) {
ActualReturn = Got;
ActualErrno = errno;
errno = 0;
return Got == ExpectedReturn && ActualErrno == ExpectedErrno;
}
};
} // namespace internal
namespace ErrnoSetterMatcher {
template <typename RetT = int>
static internal::ErrnoSetterMatcher<RetT> Succeeds(RetT ExpectedReturn = 0,
int ExpectedErrno = 0) {
return {ExpectedReturn, ExpectedErrno};
}
template <typename RetT = int>
static internal::ErrnoSetterMatcher<RetT> Fails(int ExpectedErrno,
RetT ExpectedReturn = -1) {
return {ExpectedReturn, ExpectedErrno};
}
} // namespace ErrnoSetterMatcher
} // namespace testing
} // namespace __llvm_libc
#endif // LLVM_LIBC_TEST_ERRNOSETTERMATCHER_H