1//===- llvm/unittest/ADT/ScopeExit.cpp - Scope exit unit tests --*- 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#include "llvm/ADT/ScopeExit.h"
10#include "gtest/gtest.h"
11
12using namespace llvm;
13
14namespace {
15
16TEST(ScopeExitTest, Basic) {
17 struct Callable {
18 bool &Called;
19 Callable(bool &Called) : Called(Called) {}
20 Callable(Callable &&RHS) : Called(RHS.Called) {}
21 void operator()() { Called = true; }
22 };
23 bool Called = false;
24 {
25 auto g = make_scope_exit(F: Callable(Called));
26 EXPECT_FALSE(Called);
27 }
28 EXPECT_TRUE(Called);
29}
30
31TEST(ScopeExitTest, Release) {
32 int Count = 0;
33 auto Increment = [&] { ++Count; };
34 {
35 auto G = make_scope_exit(F&: Increment);
36 auto H = std::move(G);
37 auto I = std::move(G);
38 EXPECT_EQ(0, Count);
39 }
40 EXPECT_EQ(1, Count);
41 {
42 auto G = make_scope_exit(F&: Increment);
43 G.release();
44 }
45 EXPECT_EQ(1, Count);
46}
47
48} // end anonymous namespace
49

source code of llvm/unittests/ADT/ScopeExitTest.cpp