]> git.ipfire.org Git - thirdparty/gcc.git/blob - libstdc++-v3/testsuite/30_threads/shared_future/members/get2.cc
Update copyright years.
[thirdparty/gcc.git] / libstdc++-v3 / testsuite / 30_threads / shared_future / members / get2.cc
1 // { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-gnu* *-*-solaris* *-*-cygwin *-*-rtems* *-*-darwin* powerpc-ibm-aix* } }
2 // { dg-options "-pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-gnu* *-*-solaris* powerpc-ibm-aix* } }
3 // { dg-require-effective-target c++11 }
4 // { dg-require-cstdint "" }
5 // { dg-require-gthreads "" }
6 // { dg-require-atomic-builtins "" }
7
8 // Copyright (C) 2009-2017 Free Software Foundation, Inc.
9 //
10 // This file is part of the GNU ISO C++ Library. This library is free
11 // software; you can redistribute it and/or modify it under the
12 // terms of the GNU General Public License as published by the
13 // Free Software Foundation; either version 3, or (at your option)
14 // any later version.
15
16 // This library is distributed in the hope that it will be useful,
17 // but WITHOUT ANY WARRANTY; without even the implied warranty of
18 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 // GNU General Public License for more details.
20
21 // You should have received a copy of the GNU General Public License along
22 // with this library; see the file COPYING3. If not see
23 // <http://www.gnu.org/licenses/>.
24
25
26 #include <future>
27 #include <exception>
28 #include <testsuite_hooks.h>
29
30 int value = 99;
31
32 void test01()
33 {
34 std::promise<int> p1;
35 std::shared_future<int> f1(p1.get_future());
36 std::shared_future<int> f2(f1);
37
38 p1.set_exception(std::make_exception_ptr(value));
39 try
40 {
41 (void) f1.get();
42 VERIFY( false );
43 }
44 catch (int& e)
45 {
46 VERIFY( e == value );
47 }
48 try
49 {
50 (void) f2.get();
51 VERIFY( false );
52 }
53 catch (int& e)
54 {
55 VERIFY( e == value );
56 }
57 }
58
59 void test02()
60 {
61 std::promise<int&> p1;
62 std::shared_future<int&> f1(p1.get_future());
63 std::shared_future<int&> f2(f1);
64
65 p1.set_exception(std::make_exception_ptr(value));
66 try
67 {
68 (void) f1.get();
69 VERIFY( false );
70 }
71 catch (int& e)
72 {
73 VERIFY( e == value );
74 }
75 try
76 {
77 (void) f2.get();
78 VERIFY( false );
79 }
80 catch (int& e)
81 {
82 VERIFY( e == value );
83 }
84 }
85
86 void test03()
87 {
88 std::promise<void> p1;
89 std::shared_future<void> f1(p1.get_future());
90 std::shared_future<void> f2(f1);
91
92 p1.set_exception(std::make_exception_ptr(value));
93 try
94 {
95 f1.get();
96 VERIFY( false );
97 }
98 catch (int& e)
99 {
100 VERIFY( e == value );
101 }
102 try
103 {
104 f2.get();
105 VERIFY( false );
106 }
107 catch (int& e)
108 {
109 VERIFY( e == value );
110 }
111 }
112
113 int main()
114 {
115 test01();
116 test02();
117 test03();
118
119 return 0;
120 }