variant_eq_ne.cpp 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. // Copyright 2017 Peter Dimov.
  2. //
  3. // Distributed under the Boost Software License, Version 1.0.
  4. //
  5. // See accompanying file LICENSE_1_0.txt or copy at
  6. // http://www.boost.org/LICENSE_1_0.txt
  7. #include <boost/variant2/variant.hpp>
  8. #include <boost/core/lightweight_test.hpp>
  9. #include <boost/core/lightweight_test_trait.hpp>
  10. #include <type_traits>
  11. #include <utility>
  12. #include <string>
  13. using namespace boost::variant2;
  14. struct X
  15. {
  16. };
  17. inline bool operator==( X const&, X const& ) { return false; }
  18. inline bool operator!=( X const&, X const& ) { return false; }
  19. int main()
  20. {
  21. {
  22. variant<int> v1, v2, v3( 1 ), v4( 1 );
  23. BOOST_TEST( v1 == v2 );
  24. BOOST_TEST_NOT( v1 != v2 );
  25. BOOST_TEST( v1 != v3 );
  26. BOOST_TEST_NOT( v1 == v3 );
  27. BOOST_TEST( v3 == v4 );
  28. BOOST_TEST_NOT( v3 != v4 );
  29. }
  30. {
  31. variant<int, float> v1, v2, v3( 1 ), v4( 1 ), v5( 3.14f ), v6( 3.14f );
  32. BOOST_TEST( v1 == v2 );
  33. BOOST_TEST_NOT( v1 != v2 );
  34. BOOST_TEST( v1 != v3 );
  35. BOOST_TEST_NOT( v1 == v3 );
  36. BOOST_TEST( v3 == v4 );
  37. BOOST_TEST_NOT( v3 != v4 );
  38. BOOST_TEST( v1 != v5 );
  39. BOOST_TEST_NOT( v1 == v5 );
  40. BOOST_TEST( v3 != v5 );
  41. BOOST_TEST_NOT( v3 == v5 );
  42. BOOST_TEST( v5 == v6 );
  43. BOOST_TEST_NOT( v5 != v6 );
  44. }
  45. {
  46. variant<int, int, float> v1, v2, v3( in_place_index_t<1>{} ), v4( in_place_index_t<1>{} ), v5( 3.14f ), v6( 3.14f );
  47. BOOST_TEST( v1 == v2 );
  48. BOOST_TEST_NOT( v1 != v2 );
  49. BOOST_TEST( v1 != v3 );
  50. BOOST_TEST_NOT( v1 == v3 );
  51. BOOST_TEST( v3 == v4 );
  52. BOOST_TEST_NOT( v3 != v4 );
  53. BOOST_TEST( v1 != v5 );
  54. BOOST_TEST_NOT( v1 == v5 );
  55. BOOST_TEST( v3 != v5 );
  56. BOOST_TEST_NOT( v3 == v5 );
  57. BOOST_TEST( v5 == v6 );
  58. BOOST_TEST_NOT( v5 != v6 );
  59. }
  60. {
  61. variant<X> v1, v2;
  62. BOOST_TEST_NOT( v1 == v2 );
  63. BOOST_TEST_NOT( v1 != v2 );
  64. }
  65. return boost::report_errors();
  66. }