brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.1 KiB · 1437652 Raw
49 lines · cpp
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-exception6//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(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(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(Increment);43    G.release();44  }45  EXPECT_EQ(1, Count);46}47 48} // end anonymous namespace49