• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 <iostream>
8 #include <boost/detail/lightweight_test.hpp>
9 #include <boost/phoenix/core.hpp>
10 #include <boost/phoenix/operator.hpp>
11 
12 namespace phoenix = boost::phoenix;
13 
14 int
main()15 main()
16 {
17     using phoenix::ref;
18     using phoenix::val;
19     using phoenix::arg_names::arg1;
20     using std::cout;
21 
22     {
23         int x;
24         int y;
25 
26         x = 123;
27         y = 123;
28         (ref(x) &= 456)();
29         y &= 456;
30         BOOST_TEST(x == y);
31 
32         x = 123;
33         y = 123;
34         (ref(x) |= 456)();
35         y |= 456;
36         BOOST_TEST(x == y);
37 
38         x = 123;
39         y = 123;
40         (ref(x) ^= 456)();
41         y ^= 456;
42         BOOST_TEST(x == y);
43 
44         x = 123;
45         y = 123;
46         (ref(x) <<= 4)();
47         y <<= 4;
48         BOOST_TEST(x == y);
49 
50         x = 1230000;
51         y = 1230000;
52         (ref(x) >>= 4)();
53         y >>= 4;
54         BOOST_TEST(x == y);
55 
56         int& r1 = (ref(x) &= 456)(); // should be an lvalue
57         int& r2 = (ref(x) |= 456)(); // should be an lvalue
58         int& r3 = (ref(x) ^= 456)(); // should be an lvalue
59         int& r4 = (ref(x) <<= 4)(); // should be an lvalue
60         int& r5 = (ref(x) >>= 4)(); // should be an lvalue
61         BOOST_TEST(&r1 == &r2 && &r2 == &r3 && &r3 == &r4 && &r4 == &r5);
62     }
63 
64     {
65         BOOST_TEST((val(123) & 456)() == (123 & 456));
66         BOOST_TEST((val(123) | 456)() == (123 | 456));
67         BOOST_TEST((val(123) ^ 456)() == (123 ^ 456));
68         BOOST_TEST((val(123) << 4)() == (123 << 4));
69         BOOST_TEST((val(1230000) >> 4)() == (1230000 >> 4));
70 
71         char const* s = "Yabadabadoo!!!\n";
72         (cout << arg1)(s);
73     }
74 
75     return boost::report_errors();
76 }
77