| //===- ScopeExitTest.cpp --------------------------------------------------===// |
| // |
| // 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 |
| // |
| //===----------------------------------------------------------------------===// |
| // |
| // Tests for orc-rt's ScopeExit.h APIs. |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #include "orc-rt/ScopeExit.h" |
| #include "gtest/gtest.h" |
| |
| using namespace orc_rt; |
| |
| TEST(ScopeExitTest, Noop) { |
| auto _ = make_scope_exit([]() {}); |
| } |
| |
| TEST(ScopeExitTest, OnScopeExit) { |
| bool ScopeExitRun = false; |
| { |
| auto _ = make_scope_exit([&]() { ScopeExitRun = true; }); |
| EXPECT_FALSE(ScopeExitRun); |
| } |
| EXPECT_TRUE(ScopeExitRun); |
| } |
| |
| TEST(ScopeExitTest, Release) { |
| bool ScopeExitRun = false; |
| { |
| auto OnExit = make_scope_exit([&]() { ScopeExitRun = true; }); |
| EXPECT_FALSE(ScopeExitRun); |
| OnExit.release(); |
| } |
| EXPECT_FALSE(ScopeExitRun); |
| } |
| |
| TEST(ScopeExitTest, MoveOnlyFunctionObject) { |
| struct MoveOnly { |
| MoveOnly() = default; |
| MoveOnly(MoveOnly &&) = default; |
| void operator()() {} |
| }; |
| |
| { |
| auto OnExit = make_scope_exit(MoveOnly()); |
| } |
| } |