variant_swap_test.cpp 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  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-2019 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. #include "boost/core/lightweight_test.hpp"
  13. #include "boost/variant.hpp"
  14. #include <vector>
  15. #include <algorithm>
  16. void run1()
  17. {
  18. using boost::variant;
  19. typedef variant< int, std::vector<int>* > t_var;
  20. std::vector<int> vec;
  21. t_var v0(23), v1(&vec);
  22. BOOST_TEST(v0.which() == 0);
  23. BOOST_TEST(v1.which() == 1);
  24. swap(v0, v1);
  25. BOOST_TEST(v0.which() == 1);
  26. BOOST_TEST(v1.which() == 0);
  27. }
  28. void run2()
  29. {
  30. using boost::variant;
  31. using std::swap;
  32. typedef variant< std::vector<int>, std::vector<double> > t_var;
  33. std::vector<int> vec1;
  34. std::vector<double> vec2;
  35. t_var v0(vec1), v1(vec2);
  36. BOOST_TEST(v0.which() == 0);
  37. BOOST_TEST(v1.which() == 1);
  38. swap(v0, v1);
  39. BOOST_TEST(v0.which() == 1);
  40. BOOST_TEST(v1.which() == 0);
  41. v0.swap(v1);
  42. BOOST_TEST(v0.which() == 0);
  43. BOOST_TEST(v1.which() == 1);
  44. }
  45. void run3()
  46. {
  47. using boost::variant;
  48. using std::swap;
  49. typedef variant< int, double > t_var;
  50. t_var v0(1), v1(2.0);
  51. BOOST_TEST(v0.which() == 0);
  52. BOOST_TEST(v1.which() == 1);
  53. swap(v0, v1);
  54. BOOST_TEST(v0.which() == 1);
  55. BOOST_TEST(v1.which() == 0);
  56. v0.swap(v1);
  57. BOOST_TEST(v0.which() == 0);
  58. BOOST_TEST(v1.which() == 1);
  59. }
  60. int main()
  61. {
  62. run1();
  63. run2();
  64. run3();
  65. return boost::report_errors();
  66. }