xref: /llvm-project/llvm/unittests/Support/ErrnoTest.cpp (revision 2946cd701067404b99c39fb29dc9c74bd7193eb3)
1fe09f506SPavel Labath //===- ErrnoTest.cpp - Error handling unit tests --------------------------===//
2fe09f506SPavel Labath //
3*2946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*2946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information.
5*2946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6fe09f506SPavel Labath //
7fe09f506SPavel Labath //===----------------------------------------------------------------------===//
8fe09f506SPavel Labath 
9fe09f506SPavel Labath #include "llvm/Support/Errno.h"
10fe09f506SPavel Labath #include "gtest/gtest.h"
11fe09f506SPavel Labath 
12fe09f506SPavel Labath using namespace llvm::sys;
13fe09f506SPavel Labath 
TEST(ErrnoTest,RetryAfterSignal)14fe09f506SPavel Labath TEST(ErrnoTest, RetryAfterSignal) {
15fe09f506SPavel Labath   EXPECT_EQ(1, RetryAfterSignal(-1, [] { return 1; }));
16fe09f506SPavel Labath 
17fe09f506SPavel Labath   EXPECT_EQ(-1, RetryAfterSignal(-1, [] {
18fe09f506SPavel Labath     errno = EAGAIN;
19fe09f506SPavel Labath     return -1;
20fe09f506SPavel Labath   }));
21fe09f506SPavel Labath   EXPECT_EQ(EAGAIN, errno);
22fe09f506SPavel Labath 
23fe09f506SPavel Labath   unsigned calls = 0;
24fe09f506SPavel Labath   EXPECT_EQ(1, RetryAfterSignal(-1, [&calls] {
25fe09f506SPavel Labath               errno = EINTR;
26fe09f506SPavel Labath               ++calls;
27fe09f506SPavel Labath               return calls == 1 ? -1 : 1;
28fe09f506SPavel Labath             }));
29fe09f506SPavel Labath   EXPECT_EQ(2u, calls);
30fe09f506SPavel Labath 
31fe09f506SPavel Labath   EXPECT_EQ(1, RetryAfterSignal(-1, [](int x) { return x; }, 1));
32fe09f506SPavel Labath 
33fe09f506SPavel Labath   std::unique_ptr<int> P(RetryAfterSignal(nullptr, [] { return new int(47); }));
34fe09f506SPavel Labath   EXPECT_EQ(47, *P);
359659a127SChandler Carruth 
369659a127SChandler Carruth   errno = EINTR;
379659a127SChandler Carruth   EXPECT_EQ(-1, RetryAfterSignal(-1, [] { return -1; }));
38fe09f506SPavel Labath }
39