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