diff options
Diffstat (limited to 'libstdc++-v3/testsuite/30_threads/promise/members/set_exception.cc')
-rw-r--r-- | libstdc++-v3/testsuite/30_threads/promise/members/set_exception.cc | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/libstdc++-v3/testsuite/30_threads/promise/members/set_exception.cc b/libstdc++-v3/testsuite/30_threads/promise/members/set_exception.cc index 6ff4a348f2a..4646e381a2f 100644 --- a/libstdc++-v3/testsuite/30_threads/promise/members/set_exception.cc +++ b/libstdc++-v3/testsuite/30_threads/promise/members/set_exception.cc @@ -21,6 +21,7 @@ // with this library; see the file COPYING3. If not see // <http://www.gnu.org/licenses/>. +// Test that promise::set_exception stores an exception. #include <future> #include <testsuite_hooks.h> @@ -48,8 +49,56 @@ void test01() VERIFY( !f1.valid() ); } +void test02() +{ + bool test = false; + + std::promise<int&> p1; + std::future<int&> f1 = p1.get_future(); + + VERIFY( f1.valid() ); + + p1.set_exception(std::make_exception_ptr(0)); + + try + { + f1.get(); + } + catch (int) + { + test = true; + } + VERIFY( test ); + VERIFY( !f1.valid() ); +} + +void test03() +{ + bool test = false; + + std::promise<void> p1; + std::future<void> f1 = p1.get_future(); + + VERIFY( f1.valid() ); + + p1.set_exception(std::make_exception_ptr(0)); + + try + { + f1.get(); + } + catch (int) + { + test = true; + } + VERIFY( test ); + VERIFY( !f1.valid() ); +} + int main() { test01(); + test02(); + test03(); return 0; } |