]> git.ipfire.org Git - thirdparty/gcc.git/blame - libstdc++-v3/testsuite/30_threads/promise/members/set_value.cc
Update copyright years.
[thirdparty/gcc.git] / libstdc++-v3 / testsuite / 30_threads / promise / members / set_value.cc
CommitLineData
d1236680 1// { dg-do run }
1e42d2f4 2// { dg-additional-options "-pthread" { target pthread } }
71c54f8e 3// { dg-require-effective-target c++11 }
c910ceff 4// { dg-require-gthreads "" }
c910ceff 5
99dee823 6// Copyright (C) 2009-2021 Free Software Foundation, Inc.
c910ceff
JW
7//
8// This file is part of the GNU ISO C++ Library. This library is free
9// software; you can redistribute it and/or modify it under the
10// terms of the GNU General Public License as published by the
11// Free Software Foundation; either version 3, or (at your option)
12// any later version.
13
14// This library is distributed in the hope that it will be useful,
15// but WITHOUT ANY WARRANTY; without even the implied warranty of
16// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17// GNU General Public License for more details.
18
19// You should have received a copy of the GNU General Public License along
20// with this library; see the file COPYING3. If not see
21// <http://www.gnu.org/licenses/>.
22
23
24#include <future>
25#include <testsuite_hooks.h>
26#include <testsuite_rvalref.h>
27
28void test01()
29{
c910ceff 30 std::promise<int> p1;
b3eed6fe 31 std::future<int> f1 = p1.get_future();
c910ceff 32
b3eed6fe 33 VERIFY( f1.valid() );
c910ceff
JW
34
35 p1.set_value(0);
36
37 int&& i1 = f1.get();
38
39 VERIFY( i1 == 0 );
40}
41
42void test02()
43{
c910ceff
JW
44 using __gnu_test::rvalstruct;
45
46 std::promise<rvalstruct> p1;
b3eed6fe 47 std::future<rvalstruct> f1 = p1.get_future();
c910ceff 48
b3eed6fe 49 VERIFY( f1.valid() );
c910ceff
JW
50
51 p1.set_value(rvalstruct(1));
52
53 rvalstruct r1(f1.get());
54
b3eed6fe 55 VERIFY( !f1.valid() );
c910ceff
JW
56 VERIFY( r1.val == 1 );
57}
58
59
60void test03()
61{
c910ceff 62 std::promise<int&> p1;
b3eed6fe 63 std::future<int&> f1 = p1.get_future();
c910ceff 64
b3eed6fe 65 VERIFY( f1.valid() );
c910ceff
JW
66
67 int i1 = 0;
68 p1.set_value(i1);
69 int& i2 = f1.get();
70
b3eed6fe 71 VERIFY( !f1.valid() );
c910ceff
JW
72 VERIFY( &i1 == &i2 );
73}
74
75void test04()
76{
c910ceff 77 std::promise<void> p1;
b3eed6fe 78 std::future<void> f1 = p1.get_future();
c910ceff 79
b3eed6fe 80 VERIFY( f1.valid() );
c910ceff
JW
81
82 p1.set_value();
83 f1.get();
84
b3eed6fe 85 VERIFY( !f1.valid() );
c910ceff
JW
86}
87
88int main()
89{
90 test01();
91 test02();
92 test03();
93 test04();
94
95 return 0;
96}