[wpiutil] Add wpi::scope_exit (#4432)

This is based on std::scope_exit in the C++ library fundamentals TS v3.
This commit is contained in:
Tyler Veness
2022-09-23 14:48:59 -07:00
committed by GitHub
parent 5ac658c8f0
commit 773198537c
3 changed files with 74 additions and 0 deletions

View File

@@ -0,0 +1,36 @@
// Copyright (c) FIRST and other WPILib contributors.
// Open Source Software; you can modify and/or share it under the terms of
// the WPILib BSD license file in the root directory of this project.
#include "gtest/gtest.h"
#include "wpi/scope"
TEST(ScopeExitTest, ScopeExit) {
int exitCount = 0;
{
wpi::scope_exit exit{[&] { ++exitCount; }};
EXPECT_EQ(0, exitCount);
}
EXPECT_EQ(1, exitCount);
}
TEST(ScopeExitTest, Release) {
int exitCount = 0;
{
wpi::scope_exit exit1{[&] { ++exitCount; }};
wpi::scope_exit exit2 = std::move(exit1);
wpi::scope_exit exit3 = std::move(exit1);
EXPECT_EQ(0, exitCount);
}
EXPECT_EQ(1, exitCount);
{
wpi::scope_exit exit{[&] { ++exitCount; }};
exit.release();
}
EXPECT_EQ(1, exitCount);
}