1 //-----------------------------------------------------------------------------
2 // boost-libs variant/test/variant_swap_test.cpp source file
3 // See http://www.boost.org for updates, documentation, and revision history.
4 //-----------------------------------------------------------------------------
5 //
6 // Copyright (c) 2009 ArtVPS Ltd.
7 // Copyright (c) 2013-2021 Antony Polukhin.
8 //
9 // Distributed under the Boost Software License, Version 1.0. (See
10 // accompanying file LICENSE_1_0.txt or copy at
11 // http://www.boost.org/LICENSE_1_0.txt)
12
13 #include "boost/core/lightweight_test.hpp"
14 #include "boost/variant.hpp"
15
16 #include <vector>
17 #include <algorithm>
18
run1()19 void run1()
20 {
21 using boost::variant;
22 typedef variant< int, std::vector<int>* > t_var;
23
24 std::vector<int> vec;
25 t_var v0(23), v1(&vec);
26
27 BOOST_TEST(v0.which() == 0);
28 BOOST_TEST(v1.which() == 1);
29
30 swap(v0, v1);
31
32 BOOST_TEST(v0.which() == 1);
33 BOOST_TEST(v1.which() == 0);
34 }
35
run2()36 void run2()
37 {
38 using boost::variant;
39 using std::swap;
40 typedef variant< std::vector<int>, std::vector<double> > t_var;
41
42 std::vector<int> vec1;
43 std::vector<double> vec2;
44 t_var v0(vec1), v1(vec2);
45
46 BOOST_TEST(v0.which() == 0);
47 BOOST_TEST(v1.which() == 1);
48
49 swap(v0, v1);
50
51 BOOST_TEST(v0.which() == 1);
52 BOOST_TEST(v1.which() == 0);
53
54 v0.swap(v1);
55
56 BOOST_TEST(v0.which() == 0);
57 BOOST_TEST(v1.which() == 1);
58 }
59
run3()60 void run3()
61 {
62 using boost::variant;
63 using std::swap;
64 typedef variant< int, double > t_var;
65
66 t_var v0(1), v1(2.0);
67
68 BOOST_TEST(v0.which() == 0);
69 BOOST_TEST(v1.which() == 1);
70
71 swap(v0, v1);
72
73 BOOST_TEST(v0.which() == 1);
74 BOOST_TEST(v1.which() == 0);
75
76 v0.swap(v1);
77
78 BOOST_TEST(v0.which() == 0);
79 BOOST_TEST(v1.which() == 1);
80 }
81
main()82 int main()
83 {
84 run1();
85 run2();
86 run3();
87
88 return boost::report_errors();
89 }
90
91