Browse Source

Factory renamed to make_scope_exit().

main
offa 7 years ago
parent
commit
b70762c66d
2 changed files with 8 additions and 8 deletions
  1. +1
    -1
      include/scope_guard.h
  2. +7
    -7
      test/ScopeGuardTest.cpp

+ 1
- 1
include/scope_guard.h View File





template<class Deleter> template<class Deleter>
scope_guard_t<std::decay_t<Deleter>> scope_guard(Deleter&& deleter) noexcept
scope_guard_t<std::decay_t<Deleter>> make_scope_exit(Deleter&& deleter) noexcept
{ {
return scope_guard_t<std::decay_t<Deleter>>{std::forward<Deleter>(deleter)}; return scope_guard_t<std::decay_t<Deleter>>{std::forward<Deleter>(deleter)};
} }

+ 7
- 7
test/ScopeGuardTest.cpp View File

TEST_CASE("deleter called on destruction", "[ScopeGuard]") TEST_CASE("deleter called on destruction", "[ScopeGuard]")
{ {
REQUIRE_CALL(m, deleter()); REQUIRE_CALL(m, deleter());
auto guard = sr::scope_guard(deleter);
auto guard = sr::make_scope_exit(deleter);
static_cast<void>(guard); static_cast<void>(guard);
} }


{ {
CallMock cm; CallMock cm;
REQUIRE_CALL(cm, deleter()); REQUIRE_CALL(cm, deleter());
auto guard = sr::scope_guard([&cm] { cm.deleter(); });
auto guard = sr::make_scope_exit([&cm] { cm.deleter(); });
static_cast<void>(guard); static_cast<void>(guard);
} }


TEST_CASE("deleter is not called if released", "[ScopeGuard]") TEST_CASE("deleter is not called if released", "[ScopeGuard]")
{ {
REQUIRE_CALL(m, deleter()).TIMES(0); REQUIRE_CALL(m, deleter()).TIMES(0);
auto guard = sr::scope_guard(deleter);
auto guard = sr::make_scope_exit(deleter);
guard.release(); guard.release();
} }


TEST_CASE("move releases moved-from object", "[ScopeGuard]") TEST_CASE("move releases moved-from object", "[ScopeGuard]")
{ {
REQUIRE_CALL(m, deleter()); REQUIRE_CALL(m, deleter());
auto movedFrom = sr::scope_guard(deleter);
auto movedFrom = sr::make_scope_exit(deleter);
auto guard = std::move(movedFrom); auto guard = std::move(movedFrom);
static_cast<void>(guard); static_cast<void>(guard);
} }
TEST_CASE("move transfers state", "[ScopeGuard]") TEST_CASE("move transfers state", "[ScopeGuard]")
{ {
REQUIRE_CALL(m, deleter()); REQUIRE_CALL(m, deleter());
auto movedFrom = sr::scope_guard(deleter);
auto movedFrom = sr::make_scope_exit(deleter);
auto guard = std::move(movedFrom); auto guard = std::move(movedFrom);
static_cast<void>(guard); static_cast<void>(guard);
} }
TEST_CASE("move transfers state if released", "[ScopeGuard]") TEST_CASE("move transfers state if released", "[ScopeGuard]")
{ {
REQUIRE_CALL(m, deleter()).TIMES(0); REQUIRE_CALL(m, deleter()).TIMES(0);
auto movedFrom = sr::scope_guard(deleter);
auto movedFrom = sr::make_scope_exit(deleter);
movedFrom.release(); movedFrom.release();
auto guard = std::move(movedFrom); auto guard = std::move(movedFrom);
static_cast<void>(guard); static_cast<void>(guard);
TEST_CASE("no exception propagation from deleter", "[ScopeGuard]") TEST_CASE("no exception propagation from deleter", "[ScopeGuard]")
{ {
REQUIRE_NOTHROW([] { REQUIRE_NOTHROW([] {
auto guard = sr::scope_guard([] { throw std::exception{}; });
auto guard = sr::make_scope_exit([] { throw std::exception{}; });
static_cast<void>(guard); static_cast<void>(guard);
}()); }());
} }

Loading…
Cancel
Save