unary_tests.cpp 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. /*=============================================================================
  2. Copyright (c) 2001-2007 Joel de Guzman
  3. Distributed under the Boost Software License, Version 1.0. (See accompanying
  4. file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
  5. ==============================================================================*/
  6. #include <boost/detail/lightweight_test.hpp>
  7. #include <boost/phoenix/core.hpp>
  8. #include <boost/phoenix/operator.hpp>
  9. namespace phoenix = boost::phoenix;
  10. int
  11. main()
  12. {
  13. using phoenix::val;
  14. using phoenix::ref;
  15. using phoenix::arg_names::arg1;
  16. {
  17. BOOST_TEST((-val(123))() == -123);
  18. BOOST_TEST((- -val(123))() == 123);
  19. BOOST_TEST((+val(123))() == 123);
  20. }
  21. {
  22. int x = 123;
  23. BOOST_TEST((++ref(x))() == 124);
  24. BOOST_TEST(x == 124);
  25. BOOST_TEST((--ref(x))() == 123);
  26. BOOST_TEST(x == 123);
  27. BOOST_TEST((ref(x)++)() == 123);
  28. BOOST_TEST(x == 124);
  29. BOOST_TEST((ref(x)--)() == 124);
  30. BOOST_TEST(x == 123);
  31. int& r1 = (++ref(x))(); // should be an lvalue
  32. int& r2 = (--ref(x))(); // should be an lvalue
  33. BOOST_TEST(r1 == 123 && r2 == 123);
  34. }
  35. { // From Phoenix 1.1 unary tests
  36. int i1 = 1, i = 5;
  37. BOOST_TEST((!val(true))() == false);
  38. BOOST_TEST((-val(1))() == -1);
  39. BOOST_TEST((+val(1))() == +1);
  40. BOOST_TEST((~val(1))() == ~1);
  41. BOOST_TEST(*(&arg1)(i1) == *(&i1));
  42. BOOST_TEST((&arg1)(i1) == &i1);
  43. BOOST_TEST((*val(&i1))() == *(&i1));
  44. BOOST_TEST((*&arg1)(i1) == *(&i1));
  45. BOOST_TEST((++ref(i))() == 6);
  46. BOOST_TEST((--ref(i))() == 5);
  47. BOOST_TEST((ref(i)++)() == 5);
  48. BOOST_TEST(i == 6);
  49. BOOST_TEST((ref(i)--)() == 6);
  50. BOOST_TEST(i == 5);
  51. }
  52. return boost::report_errors();
  53. }