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