| // Copyright 2019 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "base/auto_reset.h" |
| |
| #include <utility> |
| |
| #include "testing/gtest/include/gtest/gtest.h" |
| |
| namespace base { |
| |
| TEST(AutoReset, Move) { |
| int value = 10; |
| { |
| AutoReset<int> resetter1{&value, 20}; |
| EXPECT_EQ(20, value); |
| { |
| value = 15; |
| AutoReset<int> resetter2 = std::move(resetter1); |
| // Moving to a new resetter does not change the value; |
| EXPECT_EQ(15, value); |
| } |
| // Moved-to `resetter2` is out of scoped, and resets to the original value |
| // that was in moved-from `resetter1`. |
| EXPECT_EQ(10, value); |
| value = 105; |
| } |
| // Moved-from `resetter1` does not reset to anything. |
| EXPECT_EQ(105, value); |
| } |
| |
| } // namespace base |